請(qǐng)問(wèn)老師,hadoop上運(yùn)行的時(shí)候,沒(méi)有對(duì)map的結(jié)果進(jìn)行sort,為什么會(huì)跑成功?
在Linux上運(yùn)行map.py和reduce.py的時(shí)候,需要對(duì)map.py的結(jié)果進(jìn)行|sort -k1,1| 排序,如果不排序則reduce.py運(yùn)行的結(jié)果不正確;
但是在hadoop上運(yùn)行的時(shí)候,沒(méi)有排序這個(gè)操作,但是我看老師視頻里的是運(yùn)行成功的,我運(yùn)行失敗了,不知道是不是沒(méi)有排序的問(wèn)題。
跪求解答
2018-10-28
一個(gè)MapReduce作業(yè)由Map階段和Reduce階段兩部分組成,這兩階段會(huì)對(duì)數(shù)據(jù)排序,從這個(gè)意義上說(shuō),MapReduce框架本質(zhì)就是一個(gè)Distributed Sort。在Map階段,Map Task會(huì)在本地磁盤輸出一個(gè)按照key排序(采用的是快速排序)的文件(中間可能產(chǎn)生多個(gè)文件,但最終會(huì)合并成一個(gè)),在Reduce階段,每個(gè)Reduce Task會(huì)對(duì)收到的數(shù)據(jù)排序,這樣,數(shù)據(jù)便按照Key分成了若干組,之后以組為單位交給reduce()處理。很多人的誤解在Map階段,如果不使用Combiner便不會(huì)排序,這是錯(cuò)誤的,不管你用不用Combiner,Map Task均會(huì)對(duì)產(chǎn)生的數(shù)據(jù)排序(如果沒(méi)有Reduce Task,則不會(huì)排序, 實(shí)際上Map階段的排序就是為了減輕Reduce端排序負(fù)載)。由于這些排序是MapReduce自動(dòng)完成的,用戶無(wú)法控制,因此,在hadoop 1.x中無(wú)法避免,也不可以關(guān)閉,但hadoop2.x是可以關(guān)閉的。?