这篇文章讨论了 MapReduce design patterns的四种基本设计模式:
1. Input-Map-Reduce-Output
2. Input-Map-Output
3. Input-Multiple Maps-Reduce-Output
4. Input-Map-Combiner-Reduce-Output
下面是一些真实场景,帮助你理解,什么时候使用那种模式更为恰当。
Input-Map-Reduce-Output
如果需要进行聚合操作,就要使用到这种模式。
为了计算不同性别人员的总工资,我们需要生成以性别为键,以薪水为值的键值对,键值对进行Map操作的结果如下:
将相同key的value放到一个集合中,给Reduce操作提供以下数据:
Reduce操作后的结果如下:
Input-Map-Output
Reduce操作最常见的用法是集合计算,如果仅仅希望改变数据格式,那么使用Input-Map-Output模式。
在Input-Multiple Maps-Reduce-Output设计模式中,我们从2个文件中获取数据,每个有不同的语法,(注意:虽然是多个文件,但是有相同的语法,那么没有必要使用2个映射器,我们可以简单的提供不同的输入文件路径解决,在一个映射器中使用相同的逻辑即可。)
这个模式也被在Reduce-Side Join中使用:
Input-Map-Combiner-Reduce-Output
Apache Spark 对于操作大和小的数据处理任务是非常高效的,不仅仅因为它重新造了轮子,而且它放大了进行有效分析的现有工具。它在商用级硬件上的高度可扩展性,和其他知名大数据处理引擎相比,它拥有令人难以置信的性能,Spark可能终将让软件蚕食世界。
Combiner,也被称为半个Reduce,是一个可选的类,它接收Map类的输入然后将键值对传递给Reducer类。Combiner函数的目的是降低Reducer的工作量。
在一个MapReduce程序里, 20%的工作在Map阶段完成, 这也是一个数据准备的阶段,这个阶段的工作是并行进行的。
80% 的工作在Reducer阶段完成, 这也称为计算阶段.。这个阶段工作不是并行进行的,所以比Map阶段慢。为了减少计算时间,可以将Reducer阶段的部分工作移动到Combiner阶段完成。
Scenario
现有多个部门,我们需要按照不同部门计算总工资,然后再按照性别计算总工资。而且,在计算总和时还有额外的条件。按性别计算各部门的总数之后:
如果总部门工资大于200K,在总数上增加25K。
如果总部门工资大于100K,在总数上增加10K。

- 原文:MapReduce Design Patterns / MapReduce 设计模式
- 作者:Shital Kat
- 频道:计算机
- 发布:coyee (2016-09-08)
- 标签: MapReduce
- 版权:本文仅用于学习、研究和交流目的,非商业转载请注明出处、译者和可译网完整链接。
文章评论