大規模なデータセットに対して何らかの計算を実行するには、複数の MapReduce ストリーミング ジョブをチェーンする必要があります。
ジョブ全体を高速化するために、ジョブごとに複数のレデューサーを使用するつもりです。ワークフロー スケジューラとして、Oozie を使用しています。
私の問題を明確にするための図を次に示します。2 つのファイルがあるとします。
File 1: File 2:
A B 1 A B 3
A C 4 C D 6
B D 2 B D 1
2 つのマッパーと 2 つのレデューサーを用意して、MapReduce ジョブの次の出力を取得したいと考えています。
Output:
A B 4
A C 4
B D 3
C D 6
しかし、これは私が得たものではなく、部分的な合計です。
これが私が思うことです。
MapReduce ジョブごとに複数のレデューサーがあるため、次のジョブの入力はいくつかのファイルに分割されます。これらのファイルはマッパーに渡され、マッパーはその出力をレデューサーに送信します。マッパーは、入力全体が処理され、たとえば name1 をキーとしてソートされるのを待たずに、出力をレデューサーに送信しているようです。
複数のファイルを入力として使用することについていくつかのスレッドを読みましたが、マップ側の結合を実行することの問題ではないと思います。パーティショニングに関係しているのかもしれませんが、パーティショニングの内容を正確には理解していません。
レデューサーに送信する前に、複数のマッパーの出力を並べ替える方法はありますか? または、次の MapReduce Job の入力としてファイルを 1 つだけにするために、いくつかのレデューサーの出力をマージするように Oozie に指示できますか?