1. 程式人生 > 其它 >MapReduce的理解部分

MapReduce的理解部分

技術標籤:Hadoopmapreduce大資料hadoop

1)MapReduce的基本介紹: 分散式計算框架

思想:  分而治之 
	map: 負責  分 的過程
	reduce: 負責  合 的過程

2)MapReduce的程式設計規範步驟

天龍八步:
map階段: 2步
1) 讀取資料, 將讀取過來的資料轉換為 k1 和 v1
2) 自定義map邏輯, 將 k1 和 v1 轉換為 k2 和 v2
shuffle階段: 4步 接收 map階段的k2和 v2 轉換為 new k2和 v2
3) 分割槽 : 將相同的k2的資料發往同一個reduce
4) 排序 : 針對 k2 的資料 進行排序工作

5) 規約 : mr中優化步驟, 用於進行區域性聚合功能, 一般是可以省略的
6) 分組 : 將相同k2的資料分成一組, 將v2的資料合併形成一個集合
reduce階段: 2步
7) 自定義reduce邏輯, 接收k2 和 v2的資料, 將其轉換為 k3 和 v3
8) 輸出結果, 將k3 和 v3 輸出到目的地
–而 k2 就是 整個MR的靈魂

3)MapReduce的並行度機制

何為並行度:  在執行MR的時候, map執行的數量 以及 reduce執行數量 有誰來決定的問題
	map執行的數量 取決於 讀取檔案的大小, 預設情況下, 是按照 128M 一個Map來處理, 同時每一個檔案至少會有一個map來讀取
		MR 對整個檔案進行讀取工作, 然後對整個檔案進行邏輯劃分(FileSplit)---檔案切片
	reduce執行數量:  一般有人為來設定的, 當業務需求要求結果是多個檔案的時候, 這個時候一般就要設定reduce的數量
		一個reduce就會輸出一個聚合結果, 多個reduce就會輸出多個聚合結果
		如果只有一個reduce, 一般聚合結果, 最終聚合結果, 而如何使用多個reduce, 將聚合結果, 拆分多半
		同時reduce數量 還取決於分割槽的數量, 如果進行自定義分割槽, 分割槽數量要和reduce是相等的

4)map階段的工作機制:

1) 通過FileInputFormat 讀取目標地址的資料, 通過FileInputFormat對目標資料進行FileSplit的邏輯分片資料, 最終會啟動多少個mapTask取決於
	FileSplit的邏輯分片的數量, 讀取後, 將資料轉換為K1和 v1
2) 自定義map邏輯, 接收k1和v1, 將k1和v1 轉換為 k2和v2: 前序讀取一行, 呼叫一次map邏輯, 輸出k2和v2
3) 進行分割槽操作: map端輸出一次k2和v2, 那麼分割槽邏輯就會對k2進行分割槽操作, 預設採用HASH取模計演算法, 計算後, 對k2進行分割槽標記
	然後將標記好的k2和v2寫入到 環形緩衝區
4) 隨著不斷寫入到環形緩衝區, 環形緩衝區預設的大小為100M, 當達到緩衝區的80%的時候, MR會啟動一個溢寫執行緒, 將80%資料寫出到磁碟中, 形成一個
	臨時檔案, 在執行溢寫過程中, 還會對k2資料進行排序操作, 如果設定了規約, 那麼也就會在這個時候執行了
5) 不斷的寫入, 不斷的溢寫 , 產生多個臨時檔案, 當mapTask執行完成後, 會將最後的緩衝區的資料一併寫出磁碟上, 然後開始進行合併操作. 保證一個
	MapTask 只會產生一個最終的結果檔案, 在合併的過程中, 同樣也會進行排序, 並且有規約依然還會執行操作
6) 當mapTask的結果檔案形成後, 靜靜等待reduceTask的拉取即可

shuffle中:  分割槽 排序  規約 屬於 map端的shuffle過程

5)reduce階段的工作流程:

1) 當map執行完成後, reduce開始執行拉取工作, 每一個reduce到mapTask執行的結果檔案中, 拉取屬於自己分割槽的資料
2) 將資料首先拉取到記憶體中, 當記憶體寫滿後, 將資料溢寫到磁碟上, 形成多個臨時檔案, 在溢寫的時候, 依然會對資料進行排序
3) 當整個拉取工作結束後, 對多個臨時檔案資料執行merge(合併)操作 , 將多個臨時檔案合併為一個結果檔案, 同時合併過程依然排序
4) 對合並後的結果檔案, 開始執行分組操作, 分好一組資料後, 就會呼叫一次reduce的邏輯, reduce接收k2和v2的資料, 將其轉換為k3和v3
5) reduce每輸出一次 k3和v3, 就會被FileOutPutFormat 接收到, 然後將資料追加到結果檔案上
6) 當整個reducer將所有的分組資料都處理完成, 結果檔案, 也就產生了...

shuffle中:  分組  屬於 reduce的shuffle過程