剑客
关注科技互联网

[译] MapReduce 四种基本设计模式

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

[译] MapReduce 四种基本设计模式

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

[译] MapReduce 四种基本设计模式 [译] MapReduce 四种基本设计模式

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

[译] MapReduce 四种基本设计模式

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

[译] MapReduce 四种基本设计模式

Reduce操作后的结果如下:

[译] MapReduce 四种基本设计模式

Input-Map-Output

[译] MapReduce 四种基本设计模式

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

[译] MapReduce 四种基本设计模式 [译] MapReduce 四种基本设计模式

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

[译] MapReduce 四种基本设计模式

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

[译] MapReduce 四种基本设计模式

Input-Map-Combiner-Reduce-Output

[译] MapReduce 四种基本设计模式

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

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

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

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

Scenario

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

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

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

[译] MapReduce 四种基本设计模式

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址