宏观上,Hadoop每个作业要经历两个阶段:Map phase和reduce phase。对于Map phase,又主要包含四个子阶段:从磁盘上读数据-》执行map函数-》combine结果-》将结果写到本地磁盘上;对于reduce phase,同样包含四个子阶段:从各个map task上读相应的数据(shuffle)-》sort-》执行reduce函数-》将结果写到HDFS中。

(注:本文介绍的shuffle阶段非常粗略,如果想了解shuffle实现细节以及当前主流的优化方法,可阅读我的最新书籍《Hadoop技术内幕:深入解析MapReduce架构设计与实现原理》(购买说明)第8章 “Task运行过程分析”以及第8.5.2节 “系统优化”)

Hadoop处理流程中的两个子阶段严重降低了其性能。第一个是map阶段产生的中间结果要写到磁盘上,这样做的主要目的是提高系统的可靠性,但代价是降低了系统的性能,实际上,Hadoop的改进版–MapReduce Online去除了这个阶段,而采用其他更高效的方式提高系统可靠性(见参考资料[1]);另一个是shuffle阶段采用HTTP协议从各个map task上远程拷贝结果,这种设计思路(远程拷贝,协议采用http)同样降低了系统性能。实际上,Baidu公司正试图将该部分代码替换成C++代码来提高性能(见参考资料[2])。

本文首先着重分析shuffle阶段的具体流程,然后分析了其低效的原因,最后给出了可能的改进方法。

如图所示,每个reduce task都会有一个后台进程GetMapCompletionEvents,它获取heartbeat中(从JobTracker)传过来的已经完成的task列表,并将与该reduce task对应的数据位置信息保存到mapLocations中,mapLocations中的数据位置信息经过滤和去重(相同的位置信息因为某种原因,可能发过来多次)等处理后保存到集合scheduledCopies中,然后由几个拷贝线程(默认为5个)通过HTTP并行的拷贝数据,同时线程InMemFSMergeThread和LocalFSMerger会对拷贝过来的数据进行归并排序。

主要有两个方面影响shuffle阶段的性能:(1)数据完全是远程拷贝 (2)采用HTTP协议进行数据传输。对于第一个方面,如果采用某种策略(修改框架),让你reduce task也能有locality就好了;对于第二个方面,用新的更快的数据传输协议替换HTTP,也许能更快些, 如UDT协议(见参考资料[3]), 它在MapReduce的另一个C++开源实现Sector/Sphere(见参考资料[4])中被使用,效果不错!

————————————————————————————————————————-

【参考资料】

【1】http://code.google.com/p/hop/

【2】http://wenku.baidu.com/view/8225e73f0912a21614792947.html

【3】http://udt.sourceforge.net/

【4】http://sector.sourceforge.net/

原创文章,转载请注明: 转载自董的博客

本文链接地址: http://dongxicheng.org/mapreduce/hadoop-shuffle-phase/

Hadoop中shuffle阶段流程分析相关推荐

  1. PackageManagerService启动详解(三)之开始初始化阶段流程分析

      PKMS启动详解(三)之BOOT_PROGRESS_PMS_START阶段流程分析 Android PackageManagerService系列博客目录: PKMS启动详解系列博客概要 PKMS ...

  2. PackageManagerService启动详解(七)之扫描系统应用安装目录阶段流程分析

    PKMS启动详解(七)之BOOT_PROGRESS_PMS_SYSTEM_SCAN_START阶段流程分析 Android PackageManagerService系列博客目录: PKMS启动详解系 ...

  3. MapReduce中各个阶段的分析(转自道法—自然老师)

    MapReduce中各个阶段的分析: 在MapReduce的各个阶段: 在文件被读入的时候调用的是Inputformat方法读入的.inputformat-->recordreader--> ...

  4. android6.0中app crash流程分析

    要根据这个流程分析一下如何在应用中截获系统的app crash弹框,然后做到更人性化 基于Android 6.0的源码剖析, 分析Android应用Crash是如何处理的. /frameworks/b ...

  5. 【沃顿商学院学习笔记】商业基础——Operation Management:02运营管理活动中的详细流程分析

    运营管理的学习笔记--流程分析 对于流量分析,我们一般会从四个角度来分析问题:流动单元Flow Unit.流动率/吞吐量Flow Rate/Throughput.流动时间Flow Time和库存Inv ...

  6. Android中View绘制流程分析

    创建Window 在Activity的attach方法中通过调用PolicyManager.makeNewWindo创建Window,将一个View add到WindowManager时,Window ...

  7. Hadoop的map阶段流程

    在学习这部分的时候,一直想弄明白,因此在博客上找到一张图,自己保存了,原文章自己没收藏,因此只留下一张图 希望这个图可以让大家更好的理解这个知识点,同时也谢谢这个图的作者!!!

  8. Spark源码分析之Sort-Based Shuffle读写流程

    一 概述 我们知道Spark Shuffle机制总共有三种: # 未优化的Hash Shuffle:每一个ShuffleMapTask都会为每一个ReducerTask创建一个单独的文件,总的文件数是 ...

  9. Spark Shuffle Write阶段磁盘文件分析

    流程分析 入口处: org.apache.spark.scheduler.ShuffleMapTask.runTask override def runTask(context: TaskContex ...

最新文章

  1. [JavaScript Java] 初识Closure Tools(一)
  2. 基于数据中心废热利用的供冷、供热系统
  3. CentOS 搭建Postfix+Dovecot简单邮件系统
  4. 定义EJB 3.1视图(本地,远程,无接口)
  5. Windows Live Writer 测试
  6. easyui tab 引用html,jQuery插件EasyUI获取当前Tab中iframe窗体对象的方法
  7. 记腾讯一面 | 掘金技术征文
  8. php jpeg不支持,php jpeg不支持怎么办
  9. 笔记本计算机故障排除,笔记本电脑常见故障原因 笔记本电脑常见故障解决方法【详解】...
  10. 大神如何用油猴提升前端开发效率 ?
  11. CTF逆向-[CISCN2018]2ex-WP_mips-32架构以及base64换表
  12. oracle 数据库回收站,Oracle数据库的回收站
  13. 港科百创 | 未磁科技完成超亿元A轮融资,获国内首张原子磁力计心磁图仪注册证...
  14. 超级解压缩工具RAR Extractor The Unarchiver Pro
  15. 在Redhat 7下安装MySQL数据库 和 配置
  16. 理解slotted page
  17. 评测 osmo_易用能折叠的稳定器 大疆OSMO Mobile3评测
  18. RPG MAKER MV 基础二十五
  19. vscode插件vetur,vue3 setup下vetur调整
  20. 人脸自收集数据集辅助制作工具——人脸姿态数据标注

热门文章

  1. 这位中国小伙 6个月用比特币攒了125个亿 !
  2. CSDN蒋涛大数据表明:DCO - 区块链时代企业级服务的全新机会
  3. 技术有时间衰减因子.
  4. 基因组与数据整合:DNA应用开发正在临近
  5. 为什么说在KMP算法中文本串中的每个字符都是需要进行比较操作的?
  6. 白话Elasticsearch55-数据建模之对每个用户发表的博客进行分组 (Top Hits Aggregation)
  7. JVM-03内存区域与内存溢出异常(下)【OutOfMemoryError案例】
  8. html ppt文件在线播放,[2018年最新整理]如何在PPT中插入html网页.ppt
  9. 今天是1024也是霜降
  10. 【TypeScript】类的使用