各ノードで、URLの出現回数をカウントします。次に、シャーディング関数を使用して、URLのキーを所有する別のノードにURLを配布します。これで、各ノードに一意のキーが割り当てられます。次に、各ノードで再び削減してURLの出現回数を取得し、上位N個のURLを見つけます。最後に、上位N個のURLのみをマスターノードに送信します。マスターノードは、K*Nアイテムの中から上位N個のURLを検索します。Kはノードの数です。
Eg: K=3
N1 - > url1,url2,url3,url1,url2
N2 - > url2,url4,url1,url5,url2
N3 - > url1,url4,url3,url1,url3
ステップ1:各ノードのURLごとの発生をカウントします。
N1 -> (url1,2),(url2,2),(url3,1)
N2 -> (url4,1),(url2,2),(url5,1),(url1,1)
N3 -> (url1,2),(url3,2),(url4,1)
ステップ2:シャーディングはハッシュ関数を使用します(簡単にするために、URL番号%Kとします)
N1 -> (url1,2),(url1,1),(url1,2),(url4,1),(url4,1)
N2 -> (url2,2),(url2,2),(url5,1)
N3 -> (url3,2),(url3,1)
ステップ4:ノード内の各キーの出現回数を再度見つけます。
N1 -> (url1,5),(url4,2)
N2 -> (url2,4),(url5,1)
N3 -> (url3,3)
ステップ5:上位Nのみをマスターに送信します。N=1とします
Master -> (url1,5),(url2,4),(url3,3)
結果を並べ替えて、url1である上位1つのアイテムを取得します
ステップ1はマップサイドリデュースと呼ばれ、ステップ2で発生する巨大なシャッフルを回避するために行われます。