mrjob python パッケージで MapReduce を学び始めています。mrjob のドキュメントには、MapReduce スクリプトの例として次のスニペットがリストされています。
"""The classic MapReduce job: count the frequency of words.
"""
from mrjob.job import MRJob
import re
WORD_RE = re.compile(r"[\w']+")
class MRWordFreqCount(MRJob):
def mapper(self, _, line):
for word in WORD_RE.findall(line):
yield (word.lower(), 1)
def combiner(self, word, counts):
yield (word, sum(counts))
def reducer(self, word, counts):
yield (word, sum(counts))
if __name__ == '__main__':
MRWordFreqCount.run()
このアルゴリズムが一般的にどのように機能するか、コンバイナー (実行する必要はありません) が何をするか、リデューサーがマッパーとコンバイナーからのシャッフルおよびソートされた値に対してどのように実行されるかを理解しています。
ただし、レデューサーが単一の値をどのように考え出すのかわかりません。クラスターの異なるノードで実行されている異なる削減プロセスはありませんか? 特定のシャッフルされたキーと値のペアのみがパーティショナーによって特定のレデューサーに送信される場合、これらのレデュース関数はどのようにして単一の答えを導き出すのでしょうか?
さまざまなレデューサーからの出力がどのように組み合わされて単一の答えになるかについて、私は混乱していると思います。