文档结构  
翻译进度:已翻译     翻译赏金:0 元 (?)    ¥ 我要打赏
参与翻译: ypddw (2), toypipi (2)

这篇文章讨论了 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

Image title

如果需要进行聚合操作,就要使用到这种模式。

Image titleImage title

为了计算不同性别人员的总工资,我们需要生成以性别为键,以薪水为值的键值对,键值对进行Map操作的结果如下:

Image title

将相同key的value放到一个集合中,给Reduce操作提供以下数据:

第 1 段(可获 0.99 积分)

Image title

Reduce操作后的结果如下:

Image title

Input-Map-Output

Image title

Reduce操作最常见的用法是集合计算,如果仅仅希望改变数据格式,那么使用Input-Map-Output模式。

Image titleImage title

在Input-Multiple Maps-Reduce-Output设计模式中,我们从2个文件中获取数据,每个有不同的语法,(注意:虽然是多个文件,但是有相同的语法,那么没有必要使用2个映射器,我们可以简单的提供不同的输入文件路径解决,在一个映射器中使用相同的逻辑即可。)

Image title

这个模式也被在Reduce-Side Join中使用:

第 2 段(可获 1.23 积分)

Image title

Input-Map-Combiner-Reduce-Output

Image title

Apache Spark 对于操作大和小的数据处理任务是非常高效的,不仅仅因为它重新造了轮子,而且它放大了进行有效分析的现有工具。它在商用级硬件上的高度可扩展性,和其他知名大数据处理引擎相比,它拥有令人难以置信的性能,Spark可能终将让软件蚕食世界。

Combiner,也被称为半个Reduce,是一个可选的类,它接收Map类的输入然后将键值对传递给Reducer类。Combiner函数的目的是降低Reducer的工作量。

第 3 段(可获 1.38 积分)

在一个MapReduce程序里, 20%的工作在Map阶段完成, 这也是一个数据准备的阶段,这个阶段的工作是并行进行的。

80% 的工作在Reducer阶段完成, 这也称为计算阶段.。这个阶段工作不是并行进行的,所以比Map阶段慢。为了减少计算时间,可以将Reducer阶段的部分工作移动到Combiner阶段完成。

Scenario

现有多个部门,我们需要按照不同部门计算总工资,然后再按照性别计算总工资。而且,在计算总和时还有额外的条件。按性别计算各部门的总数之后:

如果总部门工资大于200K,在总数上增加25K。

如果总部门工资大于100K,在总数上增加10K。

Image title

第 4 段(可获 1.78 积分)

文章评论