2009-05-20 6 views
6

Hadoop Streamingジョブの出力ファイル名を制御する方法はありますか? 具体的には、私の仕事の出力ファイルの内容と名前をレデューサーが出力するケーキで整理したいと思います。各ファイルには1つのキーの値しか含まれず、その名前がキーになります。Hadoopストリーミングジョブの出力ファイル名とコンテンツを制御するにはどうすればよいですか?

更新: ちょっと答えが見つかりました - ジョブ出力形式としてMultipleOutputFormatから派生したJavaクラスを使用すると、出力ファイル名を制御できます。 http://hadoop.apache.org/core/docs/current/api/org/apache/hadoop/mapred/lib/MultipleOutputFormat.html

は、私はそこに、このための任意のサンプルを見ていない... 誰もが独自の出力フォーマットのJavaクラスを使用するHadoopのストリーミングサンプルを指摘することはできますか?

答えて

8

ジョブ出力形式としてMultipleOutputFormatから派生したJavaクラスを使用すると、出力ファイル名を制御できます。 http://hadoop.apache.org/core/docs/current/api/org/apache/hadoop/mapred/lib/MultipleOutputFormat.html

唯一のJARがサポートされているので、あなたが実際に...ストリーミング瓶をフォークし、それを参照できるようにするには、ジョブをストリーミングするためにそれにあなたの新しい出力フォーマットクラスを配置する必要があり、Hadoopのストリーミングを使用する場合は

EDIT: のHadoopのバージョン0.20.2のように、このクラスは廃止され、あなたが今使用する必要があります。一般のthatsに http://hadoop.apache.org/docs/mapreduce/current/api/org/apache/hadoop/mapreduce/lib/output/MultipleOutputs.html

+1

新しいドキュメントへのリンクが壊れています –

-1

一般に、Hadoopではディレクトリ全体が出力であり、個々のファイルではないとみなされます。 Streamingまたは通常のJavaジョブを使用するかどうかにかかわらず、ファイル名を直接制御する方法はありません。

しかし、何もあなたがこの分割をやって、自分の名前を変更するのをやめてしまいます。 $ HADOOP dfs -cat path/to/your/output/directory/part- *を作成し、内容をキーで分割して新しいファイルに書き込むスクリプトにパイプすることができます。

+0

ないあなたが取るしたいアプローチ。 –

関連する問題