1

マルチステージ/ジョブの mapreduce プログラムがあります。私の最初の入力は TextInputFormat でなければならず、最後の出力は TextOutputFormat でなければなりません。私が達成したいのは、最初のジョブ内で形式を Text から SequenceFile に変換することです。そのような:

TextInputFormat
Job1.execute()
SequenceFileOutputFormat

SequenceFileInputFormat
Job2.execute()
SequenceFileOutputFormat

...

SequenceFileInputFormat
JobLast.execute()
TextOutputFormat

私が見つけたすべての例で、これは、入力をSequenceFileとして単純に書き込む追加のジョブを作成し、別のジョブがSequenceFileを読み取って別の形式で保存することによって実現されます。これは、追加のジョブを使用せずに実行できますか? 私はそのようなことをすることができます:

conf.setInputFormat(TextInputFormat.class);
conf.setOutputFormat(SequenceFileOutputFormat.class);

ジョブが実際に計算を実行している間。2 つの追加のジョブ (書き込みと読み取り) を作成せずにこれを達成するにはどうすればよいでしょうか。

問題は解決しました。コードの間違いです。申し訳ありません。

4

1 に答える 1

2

もちろん、出力は任意の形式で保存できます。そのための別の仕事は本当に必要ありません。SequenceFileOutputFormat任意のタイプのキー値を格納できるため、単に記述するだけconf.setOutputFormat(SequenceFileOutputFormat.class);でうまくいくはずです。試してみましたか?うまくいきませんでしたか?ただし、次のマップ ジョブの入力キーおよび値クラスが、最後のレデューサーに使用した出力キー/値クラスと互換性があることを確認してください。

于 2012-05-27T16:04:02.020 に答える