Hadoop生態圈之mapreduce

概念

MapReduce是多進程,進程空間獨享,方便對資源的管理,消耗更多的啓動時間,時效性不高,適合離線處理,高吞吐。mapreduce是hadoop的批量處理計算框架,主要分爲map、reduce過程。

map:負責將數據處理爲<key,value>形式的數據輸出到reduce

reduce:負責處理map輸出的結果

工作流程

1.從hdfs獲取數據。InputFormat:RecordRead讀取一行數據並使用split函數切割數據,形成<key,value>數據

2.map:map讀取切分的數據。map首先將數據讀入Memerybuffer,當數據量超過Memerybuffer就會向硬盤寫入形成小文件這個過程爲spill。再通過Merge寫在硬盤的數據,根據partition個數按照哈希一致性的原則分配給reduce。

map->reduce會發生shuffle過程,shuffle過程是指從不同的機器把同一個key的數據發送到同一臺機器處理,而key集中在某一臺機器。

3.reduce:根據partition分發數據到reduce,Merge合併處理數據(發生spill過程與mapReduce一樣)

4.dataoutput輸出數據到hdfs

partition個數 跟 reduce個數一樣。

例子分析

wordcount例子分析

1.客戶端提交wordcount作業,將jar包分配到執行的datanode

2.datanode從hdfs讀取數據

3.map先將數據切分<key,value>形式,可以再分發給reduce之前將數據合併能減少網絡傳輸。從圖可知:hello從兩個節點分配到一個reduce(哈希一致性的原則),這個過程發生shuffle過程。

shuffle過程產生數據傾斜:1.通過預處理key如:key_01,key_02來打散 2.會發生數據傾斜的數據過濾,不進去reduce階段,特殊處理

4.reduce處理map數據,合併再輸出到hdfs 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章