2016-09-06 3 views
0

私は2つのチェーン・マップ・リダクション・ステップを持っています。最初のグループidと非常に少数のケースでは、異なるid(おそらく数千万の入力オブジェクトのうちの数千もの)を持つ新しいオブジェクトが生成されます。 2番目の要素は、新しいオブジェクトを含むすべてをIDでグループ化し、気になるものをたくさん生成します。チェーン・ハープープでマップ・ステップを不必要に繰り返すのを避けるにはどうすればいいですか

新しいオブジェクトを除くすべてが既にグループ化された同じサーバー上にあり、idによって順序付けされている場合は、すべてのデータを再度読み取り/シャッフルするのは本当に無駄です。現在のレデューサーに新しいものをシャッフルしてリストを再スタートさせる方法はありますか?

私はHadoopストリーミングを使用していますので、これでうまくいく答えは理想的ですが、一般的な回答にも興味があります。

答えて

0

新しいオブジェクトがレデューサーによって作成された場合は、MapReduceで1回のパスでこれを行うことはできません。代わりにsparkの使用を検討してください。それは反復的なタスクの方が良いです。

新しいオブジェクトがマッパーによって生成され、最初のステージレデューサーがパススルーにすぎない場合は、1つのステップでこれを実行できます。最初のステージのマッパーは元のレコードと新しいレコードの両方を出力する必要がありますマッパーは1:1でなければならないという規則はありません。マッパーは入力より多くのレコードを生成することができます)

関連する問題