Data-Intensive Text Processing with MapReduce第三章(7)-3.6总结

 

 

这章提供一个设计MapReduce算法的指导。特别地,对于常见问题我们展示了很多设计模式来解决。总的来说,它们是:

 

“In-mapper combining”(map内合并),combiner函数被移到了mapper里面,mapper通过多个输入记录聚集部分结果,然后只有在局部聚集达到一定量后再发送中间键值对,而不是发送每一个输入键值对的中间输出。

 

相关的模式“pairs”和“stripes”是通过大量的观测值来跟踪joint事件。在pairs方法中,我们单独地跟踪每一个joint事件,但是在stripes方法中,我们跟踪与相同事件同时发生的所有事件。虽然stripes方法显然更加高效,但是它需要有足够的内存来放下所有的事件,这可能导致伸缩性瓶颈。

 

“Order inversion”(顺序反转),它的主要思想是把计算的先后顺序转化为一个排序问题。通过仔细的编排,我们在它遇到这个计算中需要的这些数据之前发送这些数据的计算结果(例如,一个聚集统计)给reducer处理。

 

“Value-to-key conversion”(键值转换),它提供了一个伸缩性解决方案来进行二次排序。通过把部分值移动到键中,我们可以使用MapReduce自身的方法来排序。

 

最后,在MapReduce编程模型中控制同步归结为能否有效的使用下面的技术:

 

1.构造复杂的键和值来让需要计算的数据集合起来。这可用于上面所说的所有设计模式。

16为了达到高效的访问分布式键值存储,它常常需要在同步请求()或依赖同步请求之前进行批量查询。

 

2.在mapper或reducer中执行自定的初始化和终止代码。例如,in-mapper combining模式依赖于在map任务的终止代码中发送中间键值对。

 

3.在mapper和reducer中通过多重输入保存状态。这可用于in-mapper combining,顺序倒转和键值转换。

 

4.控制中间键的顺序。这可用于顺序倒转和键值转换。

 

5.控制中间键空间的分配。这用于顺序倒转和键值转换。

 

这总结了我们对MapReduce算法设计的概述。现在必须清楚地知道虽然编程模型强制我们根据严格定义的组件来表示算法,但仍然有很多工具来使之适用于这些算法。在下面的一些章节中,我们会关注与特殊的MaoReduce算法:第四章的反向索引,第五章的图处理和第六章的计算期望最大值

你可能感兴趣的:(设计模式,mapreduce,编程,算法,processing,任务)