分享

请教一个MR执行顺序的问题

Wyy_Ck 发表于 2017-3-22 11:02:27 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 6 7119
最近拜读了一篇文章,上面描述了MR任务执行的顺序,有一点依依,大家帮忙看看:
原来的顺序是: Input ---pattition ----spill -- merge

我理解partition是分区的吧 shuffle  应该放在后面的流程吧
求大神接货

已有(6)人评论

跳转到指定楼层
yongjian3311 发表于 2017-3-22 13:49:21
map和reduce都有shuffle过程,
map端的shuffle过程会进行排序、分区、合并
reduce端的shuffle会进行合并
回复

使用道具 举报

arsenduan 发表于 2017-3-22 17:32:10

楼主可以看这个图,
1.输入数据
2.分割数据[split]
3.执行map
4.suffle包括排序、分区等
5.reduce根据分区计算
6.输出
回复

使用道具 举报

Wyy_Ck 发表于 2017-3-23 09:53:11
arsenduan 发表于 2017-3-22 17:32
楼主可以看这个图,
1.输入数据
2.分割数据[split]

非常清晰的图片 感谢感谢
回复

使用道具 举报

Wyy_Ck 发表于 2017-3-23 10:26:55
yongjian3311 发表于 2017-3-22 13:49
map和reduce都有shuffle过程,
map端的shuffle过程会进行排序、分区、合并
reduce端的shuffle会进行合并

谢谢您的回答,不过还有一个小疑问,比如在Map端,通过调用partitioner接口 根据key进行分区,从而确定所在的reduce,此处是疑问,

比如数据key包含aaa,bbb   aaa经过处理后 得到在reduce0,key为bbb的数据在reduce1,请问如果此时文件还没有达到溢出的标准,此时reduce0  reduce1 应该还是存储在内存吧,那么 后面的reduce是如何分别获取reduce1和reduce0的数据的呢?


就是说 reduce任务怎么知道应该拉取哪一个map的结果呢?


谢谢啊
回复

使用道具 举报

yongjian3311 发表于 2017-3-24 09:28:57
•Reduce任务通过RPC向JobTracker询问Map任务是否已经完成,若完成,则领取数据
•Reduce领取数据先放入缓存,来自不同Map机器,先归并,再合并,写入磁盘
•多个溢写文件归并成一个或多个大文件,文件中的键值对是排序的
•当数据很少时,不需要溢写到磁盘,直接在缓存中归并,然后输出给Reduce
回复

使用道具 举报

einhep 发表于 2017-3-26 20:21:06
Wyy_Ck 发表于 2017-3-23 10:26
谢谢您的回答,不过还有一个小疑问,比如在Map端,通过调用partitioner接口 根据key进行分区,从而确定所 ...

reduce任务怎么知道应该拉取哪一个map的结果呢
分区函数确定了,分区有哪些数据也就确定了。
比如有分区函数为男女分类。
那么就有两个分区
一个分区是男的,为分区1
一个分区是女的,位分区2
,那么map中男得进入分区1,女的进入分区2

更多推荐参考
新手指导:MapReduce中的分区方法Partitioner
http://www.aboutyun.com/forum.php?mod=viewthread&tid=7558


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条