分享

mapreduce的shuffle过程

ld512870 发表于 2016-2-17 17:21:23 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 3 7553
    在看mapreduce的shuffle过程的时候,一直有几点疑问,一个partition分区的问题,还是wordcount的例子,当reduce有好几个,比如3个的时候,需要对map的结果(aaa,1)进行分区,指明它是属于哪个reduce,通常用的就是hash然后取余,那么,问题就是这partition过程是发生在什么时间呢?是发生在将map结果写入到内存中的时候吗?如果是这个时候,在这个内存块中是对这个(aaa,1)打了标记吗?map端完成后是只形成了一个文件吗?这个文件中是保存着这3个reduce的数据,当reduce来拉取数据的时候,是3个一起,拉取,各个reduce只拉取自己的数据吗?
  求大神来详细解析一下啦.

已有(3)人评论

跳转到指定楼层
wscl1213 发表于 2016-2-17 20:40:10
个人见解,仅供楼主参考
他们之间 有中间数据的,然后reduce会拉取属于自己的文件。
回复

使用道具 举报

进击的巨人 发表于 2016-2-18 18:23:15
在写入磁盘之前,线程会根据数据最终要传送到的Reducer把缓冲区的数据划分成(默认是按照键)相应的分区。
一旦内存缓冲区达到溢出的阀值,就会新建一个溢出写文件,因此在map任务完其最后一个输出记录后,会有若干个溢出写文件。在Map任务完成之前,溢出写文件被合并成一个已分区且已排序的输出文件做为map输出的中间结果
回复

使用道具 举报

ld512870 发表于 2016-2-18 21:49:33
进击的巨人 发表于 2016-2-18 18:23
在写入磁盘之前,线程会根据数据最终要传送到的Reducer把缓冲区的数据划分成(默认是按照键)相应的分区。
...

谢谢啦。应该是这样的,最终形成的文件应该就是已经分好区的
回复

使用道具 举报

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

本版积分规则

关闭

推荐上一条 /2 下一条