好程式設計師大資料學習路線分享MAPREDUCE

好程式設計師IT發表於2019-08-22

  好程式設計師大資料學習路線分享 MAPREDUCE 需求:統計大量的文字檔案中的單詞出現的次數

- 1 )整個運算需要分階段

- 階段一:並行區域性運算

- 階段二 :彙總處理,不同的階段需要開發不同的程式

- 2 )階段之間的呼叫

- 3 )業務程式( task 程式)如何併發到叢集並啟動程式

- 4 )如何監控 task 程式的執行狀態,如何處理異常

- :: 這些問題是開發分散式程式都會面臨的問題,完全可以封裝成框架 ::

MR 的結構

- 一個完整的 MapReduce 執行時有三類例項程式:

- 1 MRAppMaster : 負責整個程式的過程排程和狀態排程

- 2 mapTask :負責 map 階段的整個資料處理流程

- 3 ReduceTask :負責 reduce 階段的整個資料處理流程

 MR 設計框架

::MAPERDUCE 詳細框架 ::

- 1 )資源如何分發? :: 放到 HDFS::: 中不能由客戶端傳送,如果配置 1000 臺機器,也不能做 pipeline ,所以,可以把 jar 放在 HDFS 中的一個目錄下。

- 2 )雖然有上千臺機器,現在 job 只需要 20 臺機器即可完成,由誰決定是哪 20 臺機器? ::ResourceManager:: 作為 master

- 3)worker--NODEMANAGER, 執行應用程式,監控應用程式的資源使用情況( cpu ,磁碟,網路,硬碟)並且向排程器 ResourceManager 彙報

![](MAPREDUCE/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202018-09-19%20%E4%B8%8B%E5%8D%889.27.42.png)

:: 作業提交流程 ::

- 1 )客戶端提交作業給 resourcemanager

- 2 resourcemanager 返回 jobid ,儲存路徑 path 資訊

- 3 )客戶端將 job.jar   job.split (確定需要執行多少 task )、 job.splitinfo 等資源上傳到 HDFS 的儲存路徑

- 4 )上傳到 hdfs 完成後,客戶端通知 resourcemanager 啟動 job

- 5 resourcemanager job 加入到 job* 等待佇列 * ,然後 nodemanager 啟動 container ,將資源下載到 container 內,向客戶端發出請求啟動 master

- 6)Appmaster resourcemanager 請求 maptask 的資

- 7 resourcemanager 分配資源,從 hdfs 下載 jar container 中, master 啟動 maptask ,透過心跳機制,檢查 job.split

- 8 maptask 執行完成,通知 Appmaster ,釋放 maptask 資源。

 

## 分片機制

:: 如何確定需要執行多少 task (並行度) ::

 

![](MAPREDUCE/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202018-09-20%20%E4%B8%8A%E5%8D%882.30.10.png)

- 決定需要多大的並行度

- map 階段並行度:客戶端首先檢視一下待處理資料目錄下的資料量

   /data/a.txt 1G

/data/b.txt  800M

-   迴圈遍歷:對每個檔案看檔案有多少個 block ,將 block 數量累加到計數器    

- 返回一任務規劃描述檔案: job.split

- [ ] split0: /data/a.txt   0-128M

- [ ] split1: /data/a.txtx 128-256M

..

- [ ] split8: /data/b.txt   0-128M

寫入HDFS

- 分片和分塊不同:

- 分片是邏輯概念,給 task 一個資料處理的範圍

- 存在冗餘( 10% ),偏移量和資料大小

- 特性:移動計算( jar 包中封裝的計算)而不是移動資料

 

編寫MR 程式的步驟:

1 、使用者編寫程式分為三個部分: Mapper Reducer Driver

2 Mapper 的輸入資料是 kv 對的形式(資料型別可自定義)

3 Mapper 的輸出資料是 kv 對的形式(資料型別可自定義)

4 Mapper 中的業務邏輯寫在 map ()方法中

5 Map ()方法對每一對 kv 值呼叫一次

6 Reducer 的輸入資料是 kv 對的形式(資料型別可自定義)

7 Reducer 的輸出資料是 kv 對的形式(資料型別可自定義)

8 Reducer 中的業務邏輯寫在 reduce ()方法中

9 ReduceTask 程式對每一組相同的 key <k,v> 呼叫一次 reduce ()方法

10 、使用者自定義的 Mapper Reducer 類都要繼承各自的父類

11 、整個程式需要一個 Driver 來進行提交,提交是一個描述了各種必要資訊的 job 物件

- 案例: wordcount

- 需求:有一批資料檔案( TB 或者 PB 級別的資料),如何統計這些檔案中的單詞出現次數


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2654615/,如需轉載,請註明出處,否則將追究法律責任。

相關文章