mapreduce中的partitioner,combiner,shuffle
来源:互联网 发布:手机智能机器人软件 编辑:程序博客网 时间:2024/06/05 00:29
mapreduce中的partitioner,combiner,shuffle
为什么进行map规约
网络带宽严重被占降低程序效率
单一节点承载过重降低程序性能
combiner
在MapReduce编程模型中,在Mapper和Reducer之间有一个非常重要的组件,它解决了上述的性能瓶颈问题,它就是Combiner。
每一个map都可能会产生大量的本地输出,Combiner的作用就是对map端的输出先做一次合并,以减少在map和reduce节点之间的数据传输量,以提高网络IO性能。
使用combiner之后,先完成的map会在本地聚合,提升速度。对于hadoop自带的wordcount的例子,value就是一个叠加的数字,所以map一结束就可以进行reduce的value叠加,而不必要等到所有的map结束再去进行reduce的value叠加
public static class MyCombiner extends Reducer<Text, LongWritable, Text, LongWritable> { protected void reduce( Text key, java.lang.Iterable<LongWritable> values, org.apache.hadoop.mapreduce.Reducer<Text, LongWritable, Text, LongWritable>.Context context) throws java.io.IOException, InterruptedException { // 显示次数表示规约函数被调用了多少次,表示k2有多少个分组 System.out.println("Combiner输入分组<" + key.toString() + ",N(N>=1)>"); long count = 0L; for (LongWritable value : values) { count += value.get(); // 显示次数表示输入的k2,v2的键值对数量 System.out.println("Combiner输入键值对<" + key.toString() + ",”+ value.get() + ">"); } context.write(key, new LongWritable(count)); // 显示次数表示输出的k2,v2的键值对数量 System.out.println("Combiner输出键值对<" + key.toString() + "," + count + ">"); }; }
在实际的Hadoop集群操作中,我们是由多台主机一起进行MapReduce的,如果加入规约操作,每一台主机会在reduce之前进行一次对本机数据的规约,然后在通过集群进行reduce操作,这样就会大大节省reduce的时间,从而加快MapReduce的处理速度。
Partitioner
MapReduce的使用者通常会指定Reduce任务和Reduce任务输出文件的数量(R)。
用户在中间key上使用分区函数来对数据进行分区,之后在输入到后续任务执行进程。一个默认的分区函数式使用hash方法(比如常见的:hash(key) mod R)进行分区。hash方法能够产生非常平衡的分区。
shuffle
针对多个map任务的输出按照不同的分区(Partition)通过网络复制到不同的reduce任务节点上,这个过程就称作为Shuffle。
Copy阶段:Reducer通过Http方式得到输出文件的分区。
reduce端可能从n个map的结果中获取数据,而这些map的执行速度不尽相同,当其中一个map运行结束时,reduce就会从JobTracker中获取该信息。map运行结束后TaskTracker会得到消息,进而将消息汇报给JobTracker,reduce定时从JobTracker获取该信息,reduce端默认有5个数据复制线程从map端复制数据。
2.Merge阶段:如果形成多个磁盘文件会进行合并
从map端复制来的数据首先写到reduce端的缓存中,同样缓存占用到达一定阈值后会将数据写到磁盘中,同样会进行partition、combine、排序等过程。如果形成了多个磁盘文件还会进行合并,最后一次合并的结果作为reduce的输入而不是写入到磁盘中。
3.Reducer的参数:最后将合并后的结果作为输入传入Reduce任务中。
- mapreduce中的partitioner,combiner,shuffle
- combiner/Partitioner/shuffle
- [Hadoop]MapReduce中的Partitioner与Combiner
- MapReduce中的combiner、partition和shuffle各自的作用是什么?
- MapReduce作业Map阶段和Reduce阶段重要过程详述(Partitioner、Combiner、Shuffle三个阶段的解析)
- combiner partitioner
- MapReduce中的Combiner类
- MAPREDUCE中的Combiner
- [Hadoop]MapReduce中的Partitioner
- Mapreduce中的分区Partitioner
- Hadoop MapReduce中的Partitioner
- Mapreduce中的分区Partitioner
- 关于mapreduce 的 shuffle ,partition,combiner
- 3.MapReduce高级接口编程(partitioner、sort、combiner)
- MapReduce程序开发中的Combiner
- MapReduce中的分区方法Partitioner
- MapReduce中的分区方法Partitioner
- MapReduce中的分区方法Partitioner
- 2017.08.15工作日记
- hdu 6124 Euler theorem(水题)
- 4.高性能MySQL --- 服务器性能剖析( 2 )
- 排序--直接插入排序
- Hive QL[笔记4]
- mapreduce中的partitioner,combiner,shuffle
- 对象原型__proto__和 构造器原型对象prototype的关系
- 继承的几种方式和理解(读书笔记)
- 前端经验分享
- 网易笔试:等差数列
- IDEA快捷键
- BZOJ BZOJ 2588: Spoj 10628. Count on a tree 树上主席树
- DIV+CSS如何让文字垂直居中?
- fread() fwrite()和write() read()的区别