大數(shù)據(jù)學習路線分享MAPREDUCE,需求:統(tǒng)計大量的文本文件中的單詞出現(xiàn)的次數(shù)
*
1)整個運算需要分階段
* 階段一:并行局部運算
* 階段二 :匯總處理,不同的階段需要開發(fā)不同的程序
* 2)階段之間的調(diào)用
* 3)業(yè)務程序(task程序)如何并發(fā)到集群并啟動程序
* 4)如何監(jiān)控task程序的運行狀態(tài),如何處理異常
* ::這些問題是開發(fā)分布式程序都會面臨的問題,完全可以封裝成框架::
MR 的結(jié)構(gòu)
* 一個完整的MapReduce運行時有三類實例進程:
* 1)MRAppMaster : 負責整個程序的過程調(diào)度和狀態(tài)調(diào)度
* 2)mapTask:負責map階段的整個數(shù)據(jù)處理流程
* 3)ReduceTask:負責reduce階段的整個數(shù)據(jù)處理流程
MR設計框架
::MAPERDUCE詳細框架::
- 1)資源如何分發(fā)?
::放到HDFS:::中不能由客戶端發(fā)送,如果配置1000臺機器,也不能做pipeline,所以,可以把jar放在HDFS中的一個目錄下。 -
2)雖然有上千臺機器,現(xiàn)在job只需要20臺機器即可完成,由誰決定是哪20臺機器?::ResourceManager:: 作為master -
3)worker--NODEMANAGER,執(zhí)行應用程序,監(jiān)控應用程序的資源使用情況(cpu,磁盤,網(wǎng)絡,硬盤)并且向調(diào)度器ResourceManager匯報
::作業(yè)提交流程::
* 1)客戶端提交作業(yè)給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內(nèi),向客戶端發(fā)出請求啟動master
* 6)Appmaster向resourcemanager請求maptask的資
*
7)resourcemanager分配資源,從hdfs下載jar到container中,master啟動maptask,通過心跳機制,檢查job.split
* 8)maptask執(zhí)行完成,通知Appmaster,釋放maptask資源。
分片機制
::如何確定需要運行多少task(并行度)::
*
決定需要多大的并行度
* map階段并行度:客戶端首先查看一下待處理數(shù)據(jù)目錄下的數(shù)據(jù)量
/data/a.txt 1G
/data/b.txt 800M
* 循環(huán)遍歷:對每個文件看文件有多少個block,將block數(shù)量累加到計數(shù)器
*
返回一任務規(guī)劃描述文件:job.split:
- [ ] split0: /data/a.txt 0-128M - [ ] split1: /data/a.txtx 128-256M ….. - [
] split8: /data/b.txt 0-128M
寫入HDFS中
*
分片和分塊不同:
* 分片是邏輯概念,給task一個數(shù)據(jù)處理的范圍
* 存在冗余(10%),偏移量和數(shù)據(jù)大小
* 特性:移動計算(jar包中封裝的計算)而不是移動數(shù)據(jù)
編寫MR程序的步驟:
1、用戶編寫程序分為三個部分:Mapper、Reducer、Driver
2、Mapper的輸入數(shù)據(jù)是kv對的形式(數(shù)據(jù)類型可自定義)
3、Mapper的輸出數(shù)據(jù)是kv對的形式(數(shù)據(jù)類型可自定義)
4、Mapper中的業(yè)務邏輯寫在map()方法中
5、Map()方法對每一對kv值調(diào)用一次
6、Reducer的輸入數(shù)據(jù)是kv對的形式(數(shù)據(jù)類型可自定義)
7、Reducer的輸出數(shù)據(jù)是kv對的形式(數(shù)據(jù)類型可自定義)
8、Reducer中的業(yè)務邏輯寫在reduce()方法中
9、ReduceTask進程對每一組相同的key的調(diào)用一次reduce()方法
10、用戶自定義的Mapper、Reducer類都要繼承各自的父類
11、整個程序需要一個Driver來進行提交,提交是一個描述了各種必要信息的job對象
* 案例:wordcount
* 需求:有一批數(shù)據(jù)文件(TB或者PB級別的數(shù)據(jù)),如何統(tǒng)計這些文件中的單詞出現(xiàn)次數(shù)
熱門工具 換一換