为了账号安全,请及时绑定邮箱和手机立即绑定

请问老师,hadoop上运行的时候,没有对map的结果进行sort,为什么会跑成功?

在Linux上运行map.py和reduce.py的时候,需要对map.py的结果进行|sort -k1,1| 排序,如果不排序则reduce.py运行的结果不正确;

但是在hadoop上运行的时候,没有排序这个操作,但是我看老师视频里的是运行成功的,我运行失败了,不知道是不是没有排序的问题。

跪求解答

正在回答

1 回答

一个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 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

请问老师,hadoop上运行的时候,没有对map的结果进行sort,为什么会跑成功?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信