MapReduce之奇迹发生的地方:shuffle
生活随笔
收集整理的這篇文章主要介紹了
MapReduce之奇迹发生的地方:shuffle
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
出處:http://langyu.iteye.com/blog/992916#comments
hadoop核心:MapReduce原理。 MR的核心是shuffle,被稱為奇跡發生的地方。 shuffle,弄亂,洗牌的意思。partition 分區,sort 排序,spill溢出,disk 磁盤 下面是官方對shuffle的配圖: phase 階段,fetch 最終,merge 合并看不懂沒關系,心里有個印象就行。 下面說說我們對shuffle過程的期望: 1,完整的從map task端把數據拉取到reduce端。 2,在跨節點拉取數據時,盡可能減少對帶寬的不必要消耗。 3,減少磁盤IO對task執行的影響。
詳細配圖,shuffle過程的map 端 : ???????????????????????????????????????????????? 首先,我們要知道是,每個map task 都有一個環形緩沖區在內存memory中,用來存儲map的輸出結果。然后,當達到80%的時候,就會形成一個臨時文件,存儲到磁盤。當整個map結束,再對磁盤上的所有文件進行Merge合并生成“最終文件”。等待Reducer拉取。 1,數據來源HDFS上的block塊,block與split可以多對一,默認的是一對一的關系 2,數據經過map task執行后,形成K/V對。同時在這里就開始進行分區partition。以及,key,value,partitions,被序列化成字節數組,也就是說落到磁盤上的是字節數組 分區partition:是對key進行hash取值,然后對reduce task數量取模。進行的分區 3,spill溢寫到磁盤的數據,是sort有序的。combiner:如果有很多a,1 a,1 a,1這種數據,會有一個combiner過程,相當于在一個map task上進行reduce,只不過reduce只允許在最后階段那一端稱呼,所以在這里只能叫combiner,功能是一樣的。 4,就是溢寫到disk磁盤上的臨時小文件《也就是那一個個“80%”的溢寫臨時小文文件》,會進行一個Merge合并。最終在每一個map task上,都Merge成一個文件,這個文件也就是reduce一直在拉取的map task的最終結果 在map task進行時,reduce task會一直聯系它,問它完成了沒。
詳細配圖,shuffle過程的reduce 端: ???????? 1,map task結束后,reduce會啟動一些數據copy線程Fetcher取樣器。通過HTTP請求到map task 端的task tracker,獲取到map task端的輸出文件。 2,繼續Merge,這個Merge是把多個從map task端copy過來的數值進行Merge合并。 Merge的方式有三種:內存到內存 《不啟用》 內存到磁盤 《一直在進行》 磁盤到磁盤 《生成最終的文件》 3,在磁盤上merge后形成“最終文件”,當這個reduce task的最終文件確定下來,那么整個shuffle也就結束了,執行Reducer,結果放到HDFS上。
小鳥剛起步,看大神寫的之后,自己的簡單領悟總結。有不對的歡迎留言指正。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?贈人玫瑰,手有余香!
總結
以上是生活随笔為你收集整理的MapReduce之奇迹发生的地方:shuffle的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 公益是书籍是什么,公益书籍变现模式有哪些
- 下一篇: 【汇正财经顾晨浩】大盘窄幅震荡