2012-03-15 7 views
2

私はHBaseから読み込まれたいくつかのデータからCSVファイルを生成しているmapreduceに取り組んでいます。段階を減らさずにマッパーから単一のファイルに書き込む方法(またはジョブの最後にマッパーによって生成された複数のファイルをマージする方法)はありますか?私は仕事のレベルでファイルに書き込むために出力フォーマットを設定できることを知っています、それはマッパーのために同様のことをすることは可能ですか?マッパーから単一ファイルに書き込む

ありがとうございました

答えて

0

縮小フェーズのないMap/Reduce-Job(example)を使用することは可能です(珍しくありません)。そのためにはjob.setNumReduceTasks(0)を使用してください。

しかし、この場合ジョブ出力の処理方法がわかりません。 Ususallyあなたは減速機ごとに1つの結果ファイルを取得します。減速機がなければ、マッパーごとに1つのファイルを取得するか、またはジョブ出力を生成できないと想像することができます。それを試してみる必要があります/それを研究してください。

上記の方法ではうまくいかない場合でも、マッパー出力(ID関数)を転送するだけのデフォルトのReducer実装を使用できます。

+0

こんにちは、返信ありがとうございます。これは私を助けた。もしjob.setNumReduceTasks(0)を指定しなければ、ファイルはpart-m-00000のように名付けられます。デフォルトのレデューサーがあれば、part-r-0000などと名前が付けられます。ジョブの終了時にリデューサーの部品ファイルをマージします。 – ndzlatar

+1

私はFileUtil.copyMerge(fs、新しいパス(fileName)、fs、新しいパス(fileName)、true、conf、 "")を見つけました。ジョブの完了時にファイルをマージするために使用できます – ndzlatar

0

本当に、これはMapReduceの仕組みではありません。

あなたはなぜそのジョブを必要としますか?同じことをする簡単なJavaアプリケーションを作成します。同じことをするコマンドラインユーティリティもあります。

+0

こんにちは、私はこの特定の状況でこれに同意しません。この場合、hbaseに非常に多くのレコードを処理することがあり、それを配布されていない方法で行うことは問題になる可能性があります。分散アプリケーションを作成する最も簡単な方法は、Map Reduceを使用することです。 – ndzlatar

関連する問題