6

Hadoopストリーミングジョブの出力ファイル名を制御する方法はありますか?具体的には、ジョブの出力ファイルの内容と名前を、レデューサーが出力するketごとに整理する必要があります。各ファイルには1つのキーの値のみが含まれ、その名前がキーになります。

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

このためのサンプルは見たことがありません...カスタム出力形式のJavaクラスを使用するHadoopストリーミングサンプルを誰かが指摘できますか?

4

2 に答える 2

8

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

Hadoop ストリーミングを使用する場合、サポートされる JAR は 1 つだけなので、実際にはストリーミング jar をフォークして、ストリーミング ジョブが参照できるように新しい出力形式クラスを配置する必要があります...

編集: Hadoop のバージョン 0.20.2 の時点で、このクラスは非推奨になっているため、次を使用する必要があります: http://hadoop.apache.org/docs/mapreduce/current/api/org/apache/hadoop/mapreduce/lib/output /MultipleOutputs.html

于 2009-08-05T02:29:56.703 に答える
-1

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

ただし、ジョブが終了した後、この分割と名前の変更を行うことを妨げるものは何もありません。$HADOOP dfs -cat path/to/your/output/directory/part-* を実行し、コンテンツをキーで分割して新しいファイルに書き込むスクリプトにパイプします。

于 2009-05-24T16:39:57.710 に答える