Hadoop的MapReduce階段為什麼要進行排序呢,這樣的排序對後續操作有什麼好處么?
01-15
MR在reduce階段需要分組,將key相同的放在一起進行規約,為了達到該目的,有兩種演算法:hashmap和sort,前者太耗內存,而排序通過外排可對任意數據量分組,只要磁碟夠大就行。map端排序是為了減輕reduce端排序的壓力。在spark中,除了sort的方法,也提供hashmap,用戶可配置,畢竟sort開銷太大了。
sort是用來shuffle的,shuffle就是把key相同的東西弄一起去,其實不一定要sort也能shuffle,但是sort的好處是他可以通過外排降低內存使用量
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
中秋快樂
謝邀
如此map階段可以有一種方法可以實現不排序,把輸出作為value,不要作為key,不進行reduce階段。但是這樣的結果為什麼是倒序的。。。求大神解答
其實我也為此困擾了很久,我一直覺得shuffle階段的sort作用不大(但是Partition分組絕對十分必要!),應該做成可插拔的。到了Hadoop 2.X中,shuffle階段確實做成了可插拔的,但是貌似只是可以使用自定義的排序演算法,而不能真正將shuffle階段的sort設置為False(也可能是我了解不足,望大牛糾正)。所以sort的作用,可能確實只限於方便後續的其他應用開發。PS:shuffle階段是MR的核心,需要多多鑽研。
推薦閱讀: