分享

彻底了解mapreduce核心Shuffle--解惑各种mapreduce问题

 
hyj 发表于 2014-3-7 21:55:06 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 50 162558
XiaoLuo 发表于 2014-10-20 11:56:18
很好的一篇文章,收藏了,对我帮助很大。谢谢!
回复

使用道具 举报

severus 发表于 2014-11-5 20:49:13
回复

使用道具 举报

8023K 发表于 2014-12-27 10:37:32
hyj 发表于 2014-4-20 17:35
map和reduce都有合并,在map中,是先分区,在合并,还是先合并在分区

请问楼主:
在map端的第2个阶段中,你说“key与value值都会被序列化成字节数组 ”,并且说了“  整个内存缓冲区就是一个字节数组”。
那么请问,在你举的wordcount的例子中,字节数组的内容是什么呢?
回复

使用道具 举报

tang 发表于 2015-3-7 14:05:35
讲解的很详细呀,
回复

使用道具 举报

tang 发表于 2015-4-3 21:08:58
回复

使用道具 举报

llp 发表于 2015-5-27 14:00:51
好清楚的讲解
回复

使用道具 举报

lwj_wenzi 发表于 2015-8-10 11:16:01
回复

使用道具 举报

zcfightings 发表于 2015-8-13 11:13:52
pig2 发表于 2014-3-7 22:12
本帖最后由 nettman 于 2014-3-8 00:07 编辑
个人观点仅供参考:
Shuffle产生的意义是什么?

首先谢谢分享 看了之后 还是有几个问题 如下:
1.每个map task都有一个内存缓冲区,存储着map的输出结果,当缓冲区快满的时候需要将缓冲区的数据该如何处理?
         你说道 spill的临时文件合并成一个最终文件,等待reduce拉取。
问:大文件中包含要发往各个reduce的数据(reduce1的,reduce2的)?reduce task时 是全部文件取走到reduce端,然后挑出属于本reduce的数据,还是直接在map端就只读取属于自己的数据?
2.溢写过程中如果有很多个key/value对需要发送到某个reduce端去,那么如何处理这些key/value值?
         你说到如果有很多个key/value对需要发送到某个reduce端去,那么需要将这些key/value值拼接到一块。
问: key、value拼到一块是什么意思,挨着存放还是如(key,【val1,val2,val3】)形式?


回复

使用道具 举报

bob007 发表于 2015-8-13 19:42:18
zcfightings 发表于 2015-8-13 11:13
首先谢谢分享 看了之后 还是有几个问题 如下:
1.每个map task都有一个内存缓冲区,存储着map的输出结果 ...

首先还是比较认真的,但是也存在缺点,不断改进和进步,会有前途的。

第一个问题直接读取中间结果,也就是map输出结果
第二个问题,有点教条主义了,完全忽视了内存的情况,只是听老师讲。
合并就是在内存中,简单的归并而已。
(key,【val1,val2,val3】)这里只是老师对内存形式的一种展示,要具有想象力,才能把知识学活了

回复

使用道具 举报

zcfightings 发表于 2015-8-14 11:45:43
bob007 发表于 2015-8-13 19:42
首先还是比较认真的,但是也存在缺点,不断改进和进步,会有前途的。

第一个问题直接读取中间结果,也 ...

你好,看了你的回答,我还有点小问题,希望能不吝赐教!
针对第一个,直接读取中间结果:
             (a)中间结果是以文件的形式,还是直接在内存块中就被拉走了?
             (b)map的输出会映射到各个reduce(输出中已经标示属于哪个reduce),那针对map的输出结果,数据是怎么组织的呢?文件?内存?再细节                         一点,映射到不同reduce的数据怎么组织的呢,假设是文件形式存放的话,是一个reduce的对应一个文件(就是最后有多个文件,每个                                 reduce拉取属于自己的那个文件)还是就只有一个文件,如果只有一个文件,keyvalue是怎么组织的,同一个reduce的放在一块,按key排                         序存放?各个reduce怎么拉取属于各自的数据呢。
针对第二个:(key,【val1,val2,val3】)
                     map端输出是(key,val1)(key,val2)(key,val3),而reduce端收到时已经变成了(key,【val1,val2,val3】),那中间这个变                            化,是谁做的?


我是基于个人的理解提出的困惑,有些地方可能理解的就不对,如果有这种情况,希望能提出并给与指正。

积极向高手学习请教,就是一种进步。
回复

使用道具 举报

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

本版积分规则

关闭

推荐上一条 /2 下一条