好程式設計師大資料學習路線分享MapReduce全流程總結
好程式設計師大資料學習路線分享MapReduce 全流程總結,首先, MapReduce 是什麼?幹什麼用的?
MapReduce 是一個基於 yarn 的分散式、離線、並行的計算框架,主要職責是處理海量資料集,是 Hadoop 生態圈中一個非常重要的一個工具,所以 MapReduce 是大資料學習的一個很關鍵的知識點,需要大家好好掌握!
MapReduce 其中包含許多元件,但最主要的還是 Job 提交和 Map 、 Reduce 的全流程這兩個部分 , 學習中只要把握好這兩條主線理清楚細節串成一個知識體系,那麼 MapReduce 的學習就會得心應手了。關於 Job 作業的提交流程在 Hadoop 權威指南這本書上有相當詳細的步驟解析和圖示說明,那麼這次總結主要關於 MapReduce 過程中海量資料是怎麼被提取並在 MapTask 和 ReduceTask 中被處理,以及其中涉及運用的元件,讓我們一起來看看吧。
上面的圖從整體上描述了整個MapRduce 流程,大致分為五個步驟
1 、 input ( map 端讀取分片資料) --->2 、 Map 處理 --->3 、 shuffle 過程 --->4 、 reduce 處理 --->5 、 output ( reduce 端輸出處理結果) 現在我們一步步來分析解釋這個過程。注:MP 的整個過程中資料結構為 :key-value
1、 Map 端讀取資料:
a 、在讀取之前,客戶端會對資料進行切片處理, 分片機制如下,一個分片對應一個map,可調整客戶端的塊大小,minSize,maxSize改變map數量,minSize預設值是1,maxSize預設是long的最大值
b 、如下圖所示,先對資料進行 TextInputFormat 格式化,然後 lineRecordReader 迴圈呼叫
nextKeyValue 、 getCurrentKey 、 getCurrentValue 等方法將資料以 <K,V> 形式獲取到 MapTask
c 、切片讀取細節:每次讀取都往下多讀取一行 ( 第一個切片 ) ;下一個切片永遠拋棄第一行;最後一個切片不能多讀一行
2、 Map 處理
a 、在 Map 端,呼叫我們按照業務邏輯編寫的 map() 方法,每一行呼叫一次 map() 方法對資料進行處理,有且僅有一次,分別在呼叫 map 方法前呼叫 setup() 方法和在在呼叫 map 方法後呼叫 cleanup() 方法
在這個階段,資料會被分解成一個個<K,V> 形式的鍵值對
b 、在這個階段,可以有一個 combiner 過程,將資料進行區域性整合(當資料量太大時), combiner 能呼叫
3、 shuffle 過程:是指資料從 Map 端輸出到 Reduce 端輸入這中間對資料的操作過程(資料分割槽、排序、快取)
a、 輸出從map 端輸出後,會進入到 outputCollector, 一個資料收集器,然後由資料收集器將資料傳進一個有 20% 保留區的環形緩衝區 ( 一般是 100M)
b、 當資料在環形緩衝區溢位時,會有一個spiller 溢位器,在溢位器中會將資料呼叫 getPartition(k,v,num) 方法分割槽,然後根據 hashcode 在分割槽內進行快速排序,之後將資料發往 Reduce
4、 reduce 處理
a、 經過shuffle 過程處理的資料,是分割槽並排序的 index 索引檔案,而 reducetask 框架從檔案中讀取一個 key 傳遞給 reduce 方法,同時傳一個 value 迭代器
b、Value 迭代器的 hasnext 方法會判斷檔案中的下一個 key 是否是傳入時的 key (如果是,則返回該 value ,如果不是,則停止,轉而呼叫下一個 key )
c、 看起來的效果,reducetask 是將資料事先分組,每組呼叫一次 reduce 方法(其實不是)
d、reducetask 處理完後,將所有分割槽檔案進行歸併排序生成大檔案輸出(預設輸出到 hdfs )
e、
5、 output ( reduce 端輸出處理結果)
對資料進行TextOutputFormat 處理,然後 lineRecordWritor 迴圈呼叫
nextKeyValue 、 getCurrentKey 、 getCurrentValue ,輸出到外部檔案系統( hdfs )
以上就是mapreduce 對資料處理的全流程,這個階段的程式碼比較簡單,只要把邏輯和資料處的思路和方向把握好,寫程式碼也就手到擒來了
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2655431/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師大資料學習路線分享MAPREDUCE程式設計師大資料
- 好程式設計師大資料學習路線分享MapReduce全過程解析程式設計師大資料
- 好程式設計師大資料學習路線分享HDFS學習總結程式設計師大資料
- 好程式設計師大資料學習路線分享HDFS讀流程程式設計師大資料
- 好程式設計師大資料學習路線之mapreduce概述程式設計師大資料
- 好程式設計師大資料學習路線Hbase總結程式設計師大資料
- 好程式設計師大資料學習路線分享SparkSQl程式設計師大資料SparkSQL
- 好程式設計師大資料學習路線分享Hbase指令學習程式設計師大資料
- 好程式設計師大資料學習路線分享大資料之字串程式設計師大資料字串
- 好程式設計師大資料學習路線分享Map學習筆記程式設計師大資料筆記
- 好程式設計師大資料學習路線分享hdfs學習乾貨程式設計師大資料
- 好程式設計師大資料學習路線分享Actor學習筆記程式設計師大資料筆記
- 好程式設計師大資料學習路線分享Lambda表示式程式設計師大資料
- 好程式設計師大資料學習路線分享UDF函式程式設計師大資料函式
- 好程式設計師大資料學習路線分享spark之Scala程式設計師大資料Spark
- 好程式設計師大資料學習路線分享AWK詳解程式設計師大資料
- 好程式設計師大資料學習路線Hadoop學習乾貨分享程式設計師大資料Hadoop
- 好程式設計師大資料學習路線分享大資料之執行緒程式設計師大資料執行緒
- 好程式設計師大資料學習路線分享Scala系列之物件程式設計師大資料物件
- 好程式設計師大資料學習路線分享高階函式程式設計師大資料函式
- 好程式設計師大資料學習路線分享TCP和UDP學習筆記程式設計師大資料TCPUDP筆記
- 好程式設計師大資料學習路線分享大資料之基礎語法程式設計師大資料
- 好程式設計師大資料學習路線分享Hadoop機架感知程式設計師大資料Hadoop
- 好程式設計師大資料學習路線分享什麼是Hash表程式設計師大資料
- 好程式設計師大資料學習路線分享Scala系列之抽象類程式設計師大資料抽象
- 好程式設計師大資料學習路線分享Scala系列之泛型程式設計師大資料泛型
- 好程式設計師大資料學習路線分享hive的執行方式程式設計師大資料Hive
- 好程式設計師大資料學習路線分享Scala系列之陣列程式設計師大資料陣列
- 好程式設計師大資料學習路線分享Scala分支和迴圈程式設計師大資料
- 好程式設計師大資料培訓分享MapReduce理解程式設計師大資料
- 好程式設計師大資料學習路線之大資料自學路線二程式設計師大資料
- 好程式設計師大資料學習路線之大資料自學路線一程式設計師大資料
- 好程式設計師大資料學習路線分享執行緒學習筆記二程式設計師大資料執行緒筆記
- 好程式設計師大資料學習路線分享多執行緒學習筆記程式設計師大資料執行緒筆記
- 好程式設計師大資料培訓教你快速學習MapReduce程式設計師大資料
- 好程式設計師大資料學習路線分享hive分割槽和分桶程式設計師大資料Hive
- 好程式設計師大資料學習路線分享Scala系列之對映Map程式設計師大資料
- 好程式設計師大資料學習路線分享Scala系列之基礎篇程式設計師大資料