Hadoop的MapReduce阶段为什么要进行排序呢,这样的排序对后续操作有什么好处么?



Mapreduce排序:

1、MapReduce中排序发生在哪几个阶段??这些排序是否可以避免,为什么??
答:一个MapReduce作业由Map阶段和Reduce阶段两部分组成,这两阶段会对数据排序,从这个意义上说,MapReduce框架本质就是一个Distributed Sort。在Map阶段,Map Task会在本地磁盘输出一个按照key排序(采用的是快速排序)的文件(中间可能产生多个文件,但最终会合并成一个),在Reduce阶段,每个Reduce Task会对收到的数据排序,这样,数据便按照Key分成了若干组,之后以组为单位交给reduce()处理。很多人的误解在Map阶段,如果不使用Combiner便不会排序,这是错误的,不管你用不用Combiner,Map Task均会对产生的数据排序(如果没有Reduce Task,则不会排序, 实际上Map阶段的排序就是为了减轻Reduce端排序负载)。由于这些排序是MapReduce自动完成的,用户无法控制,因此,在hadoop 1.x中无法避免,也不可以关闭,但hadoop2.x是可以关闭的。
2、编写MapReduce作业时,如何做到在Reduce阶段,先对Key排序,再对Value排序??
答:该问题通常称为”二次排序“,最常用的方法是将Value放到Key中,实现一个组合Key,然后自定义Key排序规则(为Key实现一个WritableComparable)
3、如何使用MapReduce实现两个表join?
答:可以考虑一下几种情况:(1)一个表大,一个表小(可放到内存中);(2)两个表都是大表
第一种情况比较简单,只需将小表放到DistributedCache中即可;第二种情况常用的方法有:map-side join(要求输入数据有序,通常用户Hbase中的数据表连接),reduce-side join,semi join(半连接),具体资料可网上查询

MapReduce不是一个阶段
准确的说 更像是一个计算组件

Hadoop就是由存储组件HDFS 计算组件MapReduce 资源管理组件Yarn这三个基本组件够成

概念要清晰

好 然后你说的应该是MapReduce计算框架过程中的sort phase
发生sort有两个地方
一个是在map side发生在spill后 partition前
一个是在reduce side 发生在copy后 reduce前

那么问题来了 这个sort有什么好处呢
答案 没什么好处
一开始被这个问题咯噔了一下
后来一想 发现其实问反了
应该说 MapReduce这个框架就是为了分布式计算 然而计算最basic的就是排序
所以说MapReduce最初衷的目的就是为了大数据排序而设计也不会有什么问题
08年 这个框架排T等级的数据是最快的 记得有个奖

所以这么说吧
不是sort对后续操作有何好处 而是这个sort为许多应用和后续应用开发带来很多好处 试想分布式计算框架不提供排序 要你自己排 真是哇哇叫 谁还用

话说这个sort phase里面有众多奇淫技巧
是这个框架的精华 值得深究和看source code



作者:Reid Chan
链接:https://www.zhihu.com/question/35999547/answer/65443663
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

sort是用来shuffle的,shuffle就是把key相同的东西弄一起去,其实不一定要sort也能shuffle,但是sort的好处是他可以通过外排降低内存使用量

MR在reduce阶段需要分组,将key相同的放在一起进行规约,为了达到该目的,有两种算法:hashmap和sort,前者太耗内存,而排序通过外排可对任意数据量分组,只要磁盘够大就行。map端排序是为了减轻reduce端排序的压力。在spark中,除了sort的方法,也提供hashmap,用户可配置,毕竟sort开销太大了。



作者:董西成
链接:https://www.zhihu.com/question/35999547/answer/65942033
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

MR在reduce阶段需要分组,将key相同的放在一起进行规约,为了达到该目的,有两种算法:hashmap和sort,前者太耗内存,而排序通过外排可对任意数据量分组,只要磁盘够大就行。map端排序是为了减轻reduce端排序的压力。在spark中,除了sort的方法,也提供hashmap,用户可配置,毕竟sort开销太大了。



作者:董西成
链接:https://www.zhihu.com/question/35999547/answer/65942033
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。





你可能感兴趣的:(apreduce)