好程式設計師大資料學習路線分享MAPREDUCE
好程式設計師大資料學習路線分享 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師大資料學習路線分享MapReduce全過程解析程式設計師大資料
- 好程式設計師大資料學習路線分享MapReduce全流程總結程式設計師大資料
- 好程式設計師大資料學習路線之mapreduce概述程式設計師大資料
- 好程式設計師大資料學習路線分享SparkSQl程式設計師大資料SparkSQL
- 好程式設計師大資料學習路線分享Hbase指令學習程式設計師大資料
- 好程式設計師大資料學習路線分享大資料之字串程式設計師大資料字串
- 好程式設計師大資料學習路線Hadoop學習乾貨分享程式設計師大資料Hadoop
- 好程式設計師大資料學習路線分享HDFS學習總結程式設計師大資料
- 好程式設計師大資料學習路線分享hdfs學習乾貨程式設計師大資料
- 好程式設計師大資料學習路線分享Actor學習筆記程式設計師大資料筆記
- 好程式設計師大資料學習路線分享Map學習筆記程式設計師大資料筆記
- 好程式設計師大資料學習路線分享HDFS讀流程程式設計師大資料
- 好程式設計師大資料學習路線分享AWK詳解程式設計師大資料
- 好程式設計師大資料學習路線分享UDF函式程式設計師大資料函式
- 好程式設計師大資料學習路線分享spark之Scala程式設計師大資料Spark
- 好程式設計師大資料學習路線分享Lambda表示式程式設計師大資料
- 好程式設計師大資料學習路線分享大資料之執行緒程式設計師大資料執行緒
- 好程式設計師大資料學習路線分享高階函式程式設計師大資料函式
- 好程式設計師大資料學習路線分享Scala系列之物件程式設計師大資料物件
- 好程式設計師大資料學習路線分享Hadoop機架感知程式設計師大資料Hadoop
- 好程式設計師大資料培訓分享MapReduce理解程式設計師大資料
- 好程式設計師大資料學習路線分享TCP和UDP學習筆記程式設計師大資料TCPUDP筆記
- 好程式設計師大資料學習路線分享大資料之基礎語法程式設計師大資料
- 好程式設計師大資料學習路線分享hive的執行方式程式設計師大資料Hive
- 好程式設計師大資料學習路線分享什麼是Hash表程式設計師大資料
- 好程式設計師大資料學習路線分享Scala系列之抽象類程式設計師大資料抽象
- 好程式設計師大資料學習路線分享Scala系列之陣列程式設計師大資料陣列
- 好程式設計師大資料學習路線分享Scala分支和迴圈程式設計師大資料
- 好程式設計師大資料學習路線分享Scala系列之泛型程式設計師大資料泛型
- 好程式設計師大資料學習路線之大資料自學路線二程式設計師大資料
- 好程式設計師大資料學習路線之大資料自學路線一程式設計師大資料
- 好程式設計師大資料培訓教你快速學習MapReduce程式設計師大資料
- 好程式設計師大資料學習路線分享執行緒學習筆記二程式設計師大資料執行緒筆記
- 好程式設計師大資料學習路線分享多執行緒學習筆記程式設計師大資料執行緒筆記
- 好程式設計師大資料學習路線Hbase總結程式設計師大資料
- 好程式設計師大資料學習路線分享彈性分散式資料集RDD程式設計師大資料分散式
- 好程式設計師大資料學習路線分享函式+map對映+元祖程式設計師大資料函式
- 好程式設計師大資料學習路線分享hive分割槽和分桶程式設計師大資料Hive