慕瓜1546030
2018-10-24 16:07
在Linux上运行map.py和reduce.py的时候,需要对map.py的结果进行|sort -k1,1| 排序,如果不排序则reduce.py运行的结果不正确;
但是在hadoop上运行的时候,没有排序这个操作,但是我看老师视频里的是运行成功的,我运行失败了,不知道是不是没有排序的问题。
跪求解答
一个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是可以关闭的。
Hadoop基础及演练
52268 学习 · 64 问题
相似问题