web-dev-qa-db-ja.com

Hadoop-reduce後に出力ファイルから結果を取得しますか?

Mapフェーズとreduceフェーズのジョブを考えると、出力フォルダーに「part-r-00000」のような名前のファイルが含まれていることがわかります。

これらのファイルをアプリケーションレベルで後処理する必要がある場合、出力フォルダー内のすべてのファイルを自然な名前の順序(part-r-00000、part-r-00001、part-r-00002 ...)で繰り返す必要がありますか?仕事の結果を得るために?

または、Hadoopヘルパーファイルリーダーを使用して、「イテレーター」を取得し、ファイルの切り替えを処理することもできます(ファイルpart-r-00000が完全に読み取られたら、ファイルpart-r-00001から続行します)。

10
jdevelop

Mapreduceで出力フォルダーを指定すると、そこに含まれるのはpart-rファイル(reduceタスクの出力)と_SUCCESSファイル(空)だけです。したがって、後処理を実行する場合は、job1の出力ディレクトリをジョブ2の入力ディレクトリとして設定するだけでよいと思います。

ポストプロセッサには対処可能な要件があるかもしれません。たとえば、出力ファイルを順番に処理することは重要ですか?

または、ファイルをローカルで処理したいだけの場合は、すべてmapreduceジョブの出力形式に依存します。これにより、part-rファイルがどのように構造化されているかがわかります。次に、標準のi/oを簡単に使用できます。

5
DDW

Hadoopファイルシステム(FS)シェルのgetmergeコマンドを使用できます。

hadoop fs -getmerge /mapreduce/job/output/dir/ /your/local/output/file.txt
8
mgs

おそらく、Hadoop FileSystem を使用して、part-r-xxxxxファイルのアプリケーションから反復を実行できます。

FileSystem fs = FileSystem.get(new Configuration());
FileStatus[] status = fs.listStatus(new Path("hdfs://hostname:port/joboutputpath"));
for (int i=0;i<status.length;i++){
    fs.open(status[i].getPath())));
}

ChainMapper /ChainReducerを調べることもできます。

2