描述Map/Reduce框架的清明上河图

描述Map/Reduce框架的清明上河图,我见过的最详细的,没有之一。

基于hadoop-r2.7.1-src源代码看过了,很详细。它涵盖了Map/Reduce框架的核心流程(包含了shuffle),涉及到了Map和Reduce阶段的内存优化原理。

图片来源:Distributed Systems Architecture, https://0x0fff.com/hadoop-mapreduce-comprehensive-description/。基于原来图片添加许些comment.

1. Distributed Systems Architecture (https://0x0fff.com/hadoop-mapreduce-comprehensive-description/) 文中提到的配置项,对performance tunning有很大帮助。

2. 图片的颜色代表不同的类型,如reduce 阶段 fetch 后,保存到ram里的为深色并带有ram字样,保存到disk上的为浅色。这个规则在整个图中有效。

3. Reduce阶段简介:

1) Copy阶段(其实就是fetch Map最后的 MapOutput):fetch.java里有两个重要的函数,copyFromHost 和 copyMapOutput ,调用顺序为copyFromHost => copyMapOutput。而 copyMapOutput 里最终会调用MergeManagerImpl.java里定义的reserve(...)

2) Sort阶段(其实主要是merge,顺带做了默认的sort):Merge的主要代码在MergeManagerImpl.java和Merger.java(它在老的接口目录下hadoop-mapreduce-client\hadoop-mapreduce-client-core\src\main\java\org\apache\hadoop\mapred)。

MergeManagerImpl.java里包含了很多用户配置的关键参数。它里面的reserve(...)决定了取过来的MapOutput是存Memory还是Disk,存Memory的归为InMemoryMapOutput类,存Disk的归为OnDiskMapOutput类,两个类分别有不同类实现InMemoryMapOutput.java和OnDiskMapOutput.java.  缓存好后根据是否到了阀门值决定是否做merge。如果使能了mapreduce.reduce.merge.memtomem.enabled(默认是false)会在到达阀门mapreduce.reduce.merge.memtomem.threshold后,开始调用IntermediateMemoryToMemoryMerger定义的merge,这个是写内存的。如果没有使能mapreduce.reduce.merge.memtomem.enabled且fetch的单个MapOutput没有超过值(mapreduce.reduce.shuffle.memory.limit.percent * memoryLimit) 缓存Memory,否则缓存Disk. 注:memoryLimit = mapreduce.reduce.shuffle.input.buffer.percent * (mapreduce.reduce.memory.totalbytes ,如果没定义mapreduce.reduce.memory.totalbytes就使用getRuntime().maxMemory())。如果reserve缓存Memory的话,阀门值为(mapreduce.reduce.shuffle.merge.percent * memoryLimit),达到阀门值会调用 InMemoryMerger类的merger函数,这个函数最终是要写磁盘的。如果reserve缓存Disk的话, 达到阀门值后,这是铁定要写磁盘的。等所有的fetch结束后,调用finalMerge函数来一锅端,把InMemoryMapOutput和OnDiskMapOutput 都封装到segment里,这里该Merger.java登场了。Merger.java里的segment 可以封装文件包括磁盘的文件,也可以封装Memory数据。而排序就靠Merger.java里的MergeQueue,它继承了PriorityQueue. PriorityQueue是按各个segment的最小key排序且以segment为排序节点,排序方式有点类似heapsort。Merger.java还实现了RawKeyValueIterator,提供给reduce函数作为input.

Reference list:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值