1. 程式人生 > >【Hadoop學習之六】MapReduce

【Hadoop學習之六】MapReduce

分享圖片 耦合 output 2.x 大文件 分片 trac bubuko hdfs

一、概念
MapReduce:
"相同"的key為一組,調用一次reduce方法,方法內叠代這一組數據進行計算

塊、分片、map、reduce、分組、分區之間對應關系
block > split
1:1:1個block可以切成1個分片
N:1:多個block可以以切成1個分片
1:N:1個block可以切成多個分片

split > map
1:1:一個分片只能產生一個map

map > reduce
N:1:多個Map可以對應一次reduce
N:N:多個Map可以對應多次reduce
1:1:1個Map可以對應1次reduce
1:N:1個Map可以對應多次reduce

group(key)>partition
1:1:1次分組可以對應1個分區
N:1:多個分組可以對應一個分區
N:N:多個分組可以對應多個分區
1:N? >違背了原語

partition > outputfile

技術分享圖片

MapTAsk:
(1)對於一個分片,加載到內存進行Map處理,
(2)Map業務邏輯將分片中數據處理成一個個的K,V鍵值對
(3)將Map輸出的K,V鍵值對加工,生成含有分區partition的K,V,P鍵值對
(4)經過一段時間的處理,將生成的KVP數據放到緩存裏(默認100M),然後按照分區P,鍵key排序,最終形成一個內部有序外部無序的100M文件
(5)將這個100M緩存輸出到本地文件系統裏,經過map處理完成後,最終生成一堆這樣的小文件
(6)將這一堆小文件進行歸並形成一個內部有序外部無序的大文件

技術分享圖片
ReduceTask:
(1)將各個節點歸並後的大文件中拉取(shuffler)屬於同一分區的文件
這個地方會產生網絡IO,map之後的文件如果很大會影響性能,因此可以對map之後的數據進行簡單統計 降低拉取文件的大小
(2)將拉過來的小文件進行歸並,reduce的歸並強依賴map的排序結果
(3)將合並的文件調用reduce


二、Hadoop整體協作
Hadoop 1.x
1、客戶端clients先啟動,計算切片清單,
2、客戶端將MR jar包、切片清單、配置文件等作業資源上傳HDFS;
3、客戶端提交任務給Job Tracker
4、Job Tracker從HDFS獲取切片清單,參考Task Tracker上的資源負載情況,規劃Map、Reduce任務去到的節點
5、Task Tracker通過與Job Tracker心跳,獲取屬於自己的任務清單
6、Task Tracker從HDFS上獲取切片清單、jar、配置,map運行map任務,Reduce運行Reduce任務,
7、Reduce任務將生成結果文件返回給HDFS
8、客戶端通過HDFS下載文件 查看結果

技術分享圖片

技術分享圖片

技術分享圖片

弊端:Job Tracker有兩件事:任務調度和監控整個集群資源負載,存在單點故障、負載過重、資源管理和計算調度強耦合
因此有了Hadoop 2.x的YARN

【Hadoop學習之六】MapReduce