我开始使用 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()
我了解该算法的一般工作原理,组合器(不需要运行)的作用,以及化简器如何在映射器和组合器的混洗和排序值上运行。
但是,我不明白减速器是如何得出单个值的。集群的不同节点上没有运行不同的reduce进程吗?如果分区器仅将某些经过洗牌的键值对发送到某些缩减器,这些缩减函数如何得出一个单一的答案?
我想我对如何将各种减速器的输出组合成一个答案感到困惑。