当我学习 mapreduce 时,其中一个关键组件是组合器。这是 mapper 和 reducer 之间的一个步骤,它本质上是在 map 阶段结束时运行 reducer,以减少 mapper 输出的数据行数。随着我需要处理的数据大小的增加(在数 TB 级),reduce 步骤变得异常缓慢。我和我的一个朋友谈过,他说这也是他的经验,他没有使用组合器,而是使用哈希函数对他的 reduce 键进行分区,这减少了 reduce 步骤中每个键的值的数量. 我试过了,它奏效了。有没有其他人有过这种组合器步骤不能很好地扩展的经验,为什么我找不到这个问题的任何文档以及解决方法?我'
[编辑] 这是我朋友建议的解决方法的一个示例,它比组合器工作得快得多:
而不是输出word, count
映射器输出(word, hash(timestamp) % 1024), count
然后有2个reduce步骤来合并mapper的结果。