Hadoop的MapReduce階段為什麼要進行排序呢,這樣的排序對後續操作有什麼好處么?


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的核心,需要多多鑽研。


推薦閱讀:

TAG:雲計算 | Hadoop | MapReduce |