MapReduce常见设计模式解析

来源:互联网 发布:淘宝广告自己跳出来 编辑:程序博客网 时间:2024/05/16 10:10

Summarization Patterns(总结归纳模式):数值聚合、倒排索引、单词计数

相同Key的数据分组汇聚是MapReduce核心,所以总结归纳模式是最容易想到的,书中提到了数值归纳,倒排索引的例子.单词计数就是这类应用的典型,计算过程中高度并行化,Map阶段产出的数据行是信息完备的,后续阶段计算不需要参考其它数据行;这就保证了计算是可以并行实施:不依赖其它数据行,不依赖计算顺序.中值,均值,标准差,最大值,最小值,倒排索引都可以如法炮制;

Filtering Patterns(过滤模式):TopKFilteringBloom Filtering(布隆过滤)、Distinct(去重)

该模式的作用是寻找一个小数据集,这个小数据集合可能是取Top,Distinct,filtering或者Bloom filtering.直接做Filtering应该是这些模式里面最简单的,每条记录都做一下去留判断,Reduce的过程都没有.但这确有非常经典的应用案例:Distributed grep 

Data Organization Patterns(数据重组模式):PartitioningBinning(分箱)、总体排序、shuffle(混洗)

Structuredto Hierarchical 由于只是改变的数据的视图,Combiner帮不了多少忙行结构数据外键关联,这样的数据结构构造成类似XMLBSON的结构.

Partitioning 移动数据,并不关心数据的顺序,书中的例子就很典型:3年的日志数据并不是日期排序,取一段时间数据,如果数据按照时间分区,就可以避免全表扫描.如果是按照月分区,该分区内数据顺序并不重要.

BinningPartitioning的区别在于它是将同一条数据分到一个或多个类别.. 分箱是在map阶段分割数据而不是在partitioner阶段。主要的优势是消除了reduce阶段的使用。

TotalOrder Sorting 整体并行排序,善用Partitioner重定结果,说起来简单实际操作过程中要注意的细节还是非常多的.

Shuffling除了书中提到的"隐藏用户信息" "随机取样"还有什么使用场景?好奇 

 Join PatternsJoin模式):ReduceJoin(常规)、Replicated Join(无Reduce阶段)

       ReduceSide Join 将数据映射为外键为Key的形式,Reduce阶段完成Join. 大量数据发送到Reduce Reducejoin需要大量的网络传输 .如果并不太关注执行时间就可以用它. 如果要join的数据非常巨大,就只能选这种join. join是在reduce完成,Local优化起不了什么作用

Replicated Join 解决的是Join数据集规模不对称的情况,把小数据集分发出去,消除了Reduce阶段的Shuffle.

组合式MapReduce计算(迭代模式、顺序组合模式、具有依赖关系的组合模式、链式模式)

       迭代模式:通过事先不确定的迭代轮数后,保证前后两轮的结果在用户给定的误差范围之内(通过迭代逼近结果),则MapReduce认为结束,例如:频繁项集的挖掘时,事先不知道需要多少轮挖掘,可以先假设一个挖掘轮数;(PageRank是最著名的迭代方法

       顺序组合模式:轮数事先已知,顺序执行MapReduce任务,第(n-1)阶段的输出作为第n阶段的输入;(具体如下图左图所示)

       具有依赖关系的组合模式:通过A.addDependingJob(B),添加任务间的依赖关系,并通过JobConf对相互依赖的任务进行封装;(作业X, Y相互独立,而作业Z依赖于作业XYZ需要将作业X和作业Y产生的结果进行一个join处理,即Z一定要等到XY执行完毕才能开始执行→依赖关系,具体如下图右图所示)

       链式模式:ChainMapper包括若干个MapperChainReducer包含唯一的Reducer和若干个Mapper在核心MapReduce之外,把前后处理步骤实现为一些辅助的Map过程,将这些辅助Map过程与核心MapReduce过程合并为一个链式MapReduce任务),其中ChainMapperChainReducer都提供了addMapper方法以便加入一系列的Mapper,例如:ChainMapper.addMapper(…)ChainReducer.addMapper(…);


0 0
原创粉丝点击