1

setOutputFormat(SequenceFileOutputFormat.class)で構成された100個のレデューサーを使用するジョブがあります。

ジョブの実行後、次のコマンドを使用してすべてのパーツファイルを結合し、圧縮で正しく機能させることはできますか?

hadoop fs -cat output / part *> fullOutput

そうでない場合は、複数のレデューサーを使用して、それらのすべての出力を1つのファイルにまとめるのに適した方法は何ですか?

どうもありがとう、

- 美術

4

1 に答える 1

0

どのような圧縮を使用していますか? 一部のコーデックでは、これは確実に機能しません。たとえば、Lzop コーデックには各ファイルの先頭にヘッダーがあるため、ファイルを結合すると、ヘッダーが散在します。Lzo (末尾の 'p' なし) コーデックにはヘッダーが含まれていません。また、質問を受けるまで、ヘッダーが存在する理由がわかりませんでした。これらのパーツが結合する可能性は十分にあると思います。

  1. 単一のレデューサーでジョブを処理できる場合は、それを行うことができます。または、ディレクトリを次のジョブへの入力として使用できるため、より少ないレデューサーで実行し、ファイルの結合について心配する必要はありません。

  2. 単一のレデューサーを使用して出力ファイルを結合する後続の MR ジョブ (IdentityMapper、IdentityReducer) を実行できます。

  3. 解凍してから再圧縮できます。

    hadoop dfs -cat output/* | lzop -d -c > full

私はこれについて少し心配していました。今では、使用するレデューサーの数を減らし、小さな一時ファイルの圧縮を避けています。

于 2011-09-14T22:19:25.000 に答える