2012-06-07 33 views
0

我是hadoop的新手,最近我被要求用Hadoop做一個測試項目。 因此,當我重新評估BigData時,碰巧知道Pail。現在我想要做的就是這樣的事情。首先創建一個簡單的對象,然後使用Thrift將其序列化,然後使用Pail將其放入Hdfs中。然後我想在map函數中獲取這個對象並做我想做的事情。但我不知道如何在map函數中獲取tat對象。如何將一個序列化的對象放入Hadoop DFS中並將其放回到map函數中?

有人可以告訴我任何參考或解釋如何做到這一點?

感謝名單

回答

0

我能想到的三個選項:

  1. 使用-files選項並命名在HDFS文件(最好爲任務跟蹤器將下載的文件,一旦該節點上運行的所有作業)
  2. 使用DistributedCache(與上面類似的邏輯),但是通過一些API調用而不是通過命令行配置文件
  3. 直接從HDFS加載文件(當您拉動文件在HDFS爲每個任務)

至於一些代碼,把負載邏輯到你的映射器的setup(...)或配置(..)方法(具體取決於是否是使用新的或舊的API),如下所示:

protected void setup(Context context) { 
    // the -files option makes the named file available in the local directory 
    File file = new File("filename.dat"); 
    // open file and load contents ... 

    // load the file directly from HDFS 
    FileSystem fs = FileSystem.get(context.getConfiguration()); 
    InputStream hdfsInputStream = fs.open("/path/to/file/in/hdfs/filename.dat"); 
    // load file contents from stream... 
} 

DistributedCache具有在Javadocs

一些示例代碼
相關問題