2009-05-20 36 views
6

有沒有辦法控制Hadoop Streaming作業的輸出文件名? 具體而言,我希望我的作業的輸出文件內容和名稱由減速器輸出組織 - 每個文件只包含一個鍵的值,其名稱將是關鍵。如何控制Hadoop流式作業的輸出文件名稱和內容?

更新: 剛剛找到答案 - 使用從MultipleOutputFormat派生的Java類作爲作業輸出格式可以控制輸出文件名。 http://hadoop.apache.org/core/docs/current/api/org/apache/hadoop/mapred/lib/MultipleOutputFormat.html

我還沒有看到這出有什麼樣... 任何人都可以點出了Hadoop的流樣本,使得使用自定義輸出格式的Java類的?

回答

8

使用派生自MultipleOutputFormat的Java類作爲作業輸出格式可以控制輸出文件名。 http://hadoop.apache.org/core/docs/current/api/org/apache/hadoop/mapred/lib/MultipleOutputFormat.html

當使用Hadoop流,因爲只有一個JAR支持你確實有叉流罐子,把你的新的輸出格式班在它流作業能夠引用它...

編輯: 由於0.20.2版本的Hadoop此類已被棄用,您現在應該使用: http://hadoop.apache.org/docs/mapreduce/current/api/org/apache/hadoop/mapreduce/lib/output/MultipleOutputs.html

+1

鏈接到新文檔的鏈接已斷開 – 2013-09-16 20:20:56

-1

一般來說,Hadoop會讓您將整個目錄視爲輸出,而不是單個文件。無法直接控制文件名,無論是使用Streaming還是常規的Java作業。

但是,在作業完成之後,沒有任何東西阻止您對自己進行拆分和重命名。您可以$ HADOOP dfs -cat path/to/your/output/directory/part- *,然後將其傳遞給您的腳本,將腳本內容按鍵分割並寫入新文件。

+0

一般而言那不是要採取的方法。 – 2013-09-16 20:21:33

相關問題