优秀网站大全自媒体平台注册账号教程
优秀网站大全,自媒体平台注册账号教程,wordpress文字验证码,网站免费的不用下载Hadoop学习笔记—10.Shuffle过程那点事儿 一、回顾Reduce阶段三大步骤 在第四篇博文《初识MapReduce》中#xff0c;我们认识了MapReduce的八大步骤#xff0c;其中在Reduce阶段总共三个步骤#xff0c;如下图所示#xff1a; 其中#xff0c;Step2.1就是一个Shuffle操作我们认识了MapReduce的八大步骤其中在Reduce阶段总共三个步骤如下图所示 其中Step2.1就是一个Shuffle操作它针对多个map任务的输出按照不同的分区Partition通过网络复制到不同的reduce任务节点上这个过程就称作为Shuffle。 PSHadoop的shuffle过程就是从map端输出到reduce端输入之间的过程这一段应该是Hadoop中最核心的部分因为涉及到Hadoop中最珍贵的网络资源所以shuffle过程中会有很多可以调节的参数也有很多策略可以研究这方面可以看看大神董西成的相关文章或他写的MapReduce相关书籍。 二、Shuffle过程浅析 上图中分为Map任务和Reduce任务两个阶段从map端输出到reduce端的红色和绿色的线表示数据流的一个过程也我们所要了解的Shuffle过程。 2.1 Map端 1在map端首先接触的是InputSplit在InputSplit中含有DataNode中的数据每一个InputSplit都会分配一个Mapper任务Mapper任务结束后产生K2,V2的输出这些输出先存放在缓存中 每个map有一个环形内存缓冲区用于存储任务的输出。默认大小100MBio.sort.mb属性一旦达到阀值0.8(io.sort.spil l.percent)一个后台线程就把内容写到(spill)Linux本地磁盘中的指定目录mapred.local.dir下的新建的一个溢出 写文件。 总结map过程的输出是写入本地磁盘而不是HDFS但是一开始数据并不是直接写入磁盘而是缓冲在内存中缓存的好处就是减少磁盘I/O的开销提高合并和排序的速度。又因为默认的内存缓冲大小是100M当然这个是可以配置的所以在编写map函数的时候要尽量减少内存的使用为shuffle过程预留更多的内存因为该过程是最耗时的过程。 2写磁盘前要进行partition、sort和combine等操作。通过分区将不同类型的数据分开处理之后对不同分区的数据进行 排序如果有Combiner还要对排序后的数据进行combine。等最后记录写完将全部溢出文件合并为一个分区且排序的文件。 3最后将磁盘中的数据送到Reduce中从图中可以看出Map输出有三个分区有一个分区数据被送到图示的Reduce任务中剩下的两个分区被送到其他Reducer任务中。而图示的Reducer任务的其他的三个输入则来自其他节点的Map输出。 补充在写磁盘的时候采用压缩的方式将map的输出结果进行压缩是一个减少网络开销很有效的方法关于如何使用压缩在本文第三部分会有介绍。 2.2 Reduce端 1Copy阶段Reducer通过Http方式得到输出文件的分区。 reduce端可能从n个map的结果中获取数据而这些map的执行速度不尽相同当其中一个map运行结束时reduce就会从 JobTracker中获取该信息。map运行结束后TaskTracker会得到消息进而将消息汇报给JobTrackerreduce定时从 JobTracker获取该信息reduce端默认有5个数据复制线程从map端复制数据。 2Merge阶段如果形成多个磁盘文件会进行合并 从map端复制来的数据首先写到reduce端的缓存中同样缓存占用到达一定阈值后会将数据写到磁盘中同样会进行partition、 combine、排序等过程。如果形成了多个磁盘文件还会进行合并最后一次合并的结果作为reduce的输入而不是写入到磁盘中。 3Reducer的参数最后将合并后的结果作为输入传入Reduce任务中。 总结当Reducer的输入文件确定后整个Shuffle操作才最终结束。之后就是Reducer的执行了最后Reducer会把结果存到HDFS上。 三、Hadoop中的压缩 刚刚我们在了解Shuffle过程中看到map端在写磁盘的时候采用压缩的方式将map的输出结果进行压缩是一个减少网络开销很有效的方法。其实在Hadoop中早已为我们提供了一些压缩算法的实现我们不用重复造轮子了。 3.1 解压缩算法的实现Codec Codec是Hadoop中关于压缩解压缩的算法的实现在Hadoop中codec由CompressionCode的实现来表示。下面是一些常见压缩算法实现如下图所示 3.2 MapReduce的输出进行压缩 1MapReduce的输出属性如下所示 2在Java中如何针对输出设置压缩 ★★★ 上图中在reduce端输出压缩使用了刚刚Codec中的Gzip算法当然你也可以使用bzip2算法 参考资料 1董西成《Hadoop中shuffle阶段流程分析》http://dongxicheng.org/mapreduce/hadoop-shuffle-phase/ 该文对Shuffle阶段的一些不足做出了分析并给出了几个目前流行的解决办法 2左坚《Hadoop计算中的shuffle过程》http://www.wnt.com.cn/html/news/tophome/top_xytd/top_xytd_jswz/bbs_service/20130711/111140562.html 3皮皮家的程序猿《Hadoop中的shuffle过程》http://www.cnblogs.com/zhangcm/archive/2012/11/23/2784495.html 4Suddenly《MapReduce排序和分组》http://www.cnblogs.com/sunddenly/p/4009751.html 作者周旭龙 出处http://edisonchou.cnblogs.com/ 本文版权归作者和博客园共有欢迎转载但未经作者同意必须保留此段声明且在文章页面明显位置给出原文链接。 转载于:https://www.cnblogs.com/1130136248wlxk/p/4975110.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/88076.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!