JavaでMRコードを記述しているときに、Map-SideJoinまたはReduce-Sideをいつ使用するかを決定するにはどうすればよいですか?
マップ側の結合は、データがマップに到達する前に結合を実行します。マップ関数は、マップ側でデータを結合する前に、強力な前提条件を想定しています。どちらの方法にも長所と短所があります。マップ側結合は、縮小側と比較して効率的ですが、厳密な形式が必要です。
前提条件:
RepartitionedjoinまたはRepartitionedsort merge joinとも呼ばれるReduceサイド結合であり、主に使用される結合タイプです。ソートとシャッフルのフェーズを経る必要があり、ネットワークのオーバーヘッドが発生します。サイド結合の削減では、データソース、タグ、グループキーなどのいくつかの用語を使用します。
このデータをreduce側で結合することはわかっているので、reduceフェーズでの結合に使用できるように準備する必要があります。実行する必要のある手順を見てみましょう。
詳細については、次のリンクを確認してください: http://hadoopinterviews.com/map-side-join-reduce-side-join/
テーブルの1つをメモリに収めることができる場合は、マップサイド結合を使用します。これにより、データの並べ替えとシャッフルのオーバーヘッドが削減されます。
入力データセットを構造化する必要がないため、Reduce-Side結合はMap-Side結合よりも単純です。ただし、両方のデータセットがMapReduceシャッフルフェーズを通過する必要があるため、効率は低下します。同じキーを持つレコードは、レデューサーにまとめられます。