マップリデュースジョブへの入力である300000行を超えるファイルがあり、このファイルの最初の1000行のみをジョブで処理したいと考えています。レデューサーに送信されるレコードの数を制限する良い方法はありますか?
単純なIDリデューサーは、出力を書き出すために必要なすべてです。現在、レデューサーは入力にあるのと同じ数の行を書き出します。
まず、mapreduceプログラムが1つのレデューサーのみを使用するように設定されていることを確認します。明示的に設定する必要があります。そうしないと、Hadoopが他の数値を選択する可能性があり、合計1000を超えないようにreduceタスク間で調整する良い方法はありません。次に、Reducerクラスでインスタンス変数を維持するだけで、レコードの数をカウントし、1000を超えるとそれらの発行を停止できます。
もう1つの、おそらくもっと簡単な方法は、入力ファイルを短くすることです。不要な行を削除するだけです。
ハイブとブタはどちらもこの種のことを行うフレームワークであることも注目に値します。「生の」MapReduceコードを書くことは実際にはまれです。ほとんどの人はこれら2つのうちの1つを使用します。