好程序員大數據學習路線分享MapReduce全流程總結

  好程序員大數據學習路線分享MapReduce全流程總結,首先,MapReduce是什麼?幹什麼用的?
  MapReduce是一個基於yarn的分佈式、離線、並行的計算框架,主要職責是處理海量數據集,是Hadoop生態圈中一個很是重要的一個工具,因此MapReduce是大數據學習的一個很關鍵的知識點,須要你們好好掌握!
  MapReduce其中包含許多組件,但最主要的仍是Job提交和Map、Reduce的全流程這兩個部分,學習中只要把握好這兩條主線理清楚細節串成一個知識體系,那麼MapReduce的學習就會駕輕就熟了。關於Job做業的提交流程在Hadoop權威指南這本書上有至關詳細的步驟解析和圖示說明,那麼此次總結主要關於MapReduce過程當中海量數據是怎麼被提取並在MapTask和ReduceTask中被處理,以及其中涉及運用的組件,讓咱們一塊兒來看看吧。
圖片描述  程序員

  上面的圖從總體上描述了整個MapRduce流程,大體分爲五個步驟
  一、input(map端讀取分片數據)--->二、Map處理--->三、shuffle過程--->四、reduce處理--->五、output(reduce端輸出處理結果)如今咱們一步步來分析解釋這個過程。注:MP的整個過程當中數據結構爲:key-value
一、  Map端讀取數據:
a、在讀取以前,客戶端會對數據進行切片處理,分片機制以下,一個分片對應一個map,可調整客戶端的塊大小,minSize,maxSize改變map數量,minSize默認值是1,maxSize默認是long的最大值
b、以下圖所示,先對數據進行TextInputFormat格式化,而後lineRecordReader循環調用
nextKeyValue、getCurrentKey、getCurrentValue等方法將數據以<K,V>形式獲取到MapTask
c、切片讀取細節:每次讀取都往下多讀取一行(第一個切片);下一個切片永遠拋棄第一行;最後一個切片不能多讀一行
圖片描述緩存

二、  Map處理
a、在Map端,調用咱們按照業務邏輯編寫的map()方法,每一行調用一次map()方法對數據進行處理,有且僅有一次,分別在調用map方法前調用setup()方法和在在調用map方法後調用cleanup()方法
在這個階段,數據會被分解成一個個<K,V>形式的鍵值對
b、在這個階段,能夠有一個combiner過程,將數據進行局部整合(當數據量太大時),combiner能調用
圖片描述數據結構

三、  shuffle過程:是指數據從Map端輸出到Reduce端輸入這中間對數據的操做過程(數據分區、排序、緩存)
a、輸出從map端輸出後,會進入到outputCollector,一個數據收集器,而後由數據收集器將數據傳進一個有20%保留區的環形緩衝區(通常是100M)
b、當數據在環形緩衝區溢出時,會有一個spiller溢出器,在溢出器中會將數據調用getPartition(k,v,num)方法分區,而後根據hashcode在分區內進行快速排序,以後將數據發往Reduce
四、  reduce處理
a、通過shuffle過程處理的數據,是分區並排序的index索引文件,而reducetask框架從文件中讀取一個key傳遞給reduce方法,同時傳一個value迭代器
b、Value迭代器的hasnext方法會判斷文件中的下一個key是不是傳入時的key(若是是,則返回該value,若是不是,則中止,轉而調用下一個key)
c、看起來的效果,reducetask是將數據事先分組,每組調用一次reduce方法(其實不是)
d、reducetask處理完後,將全部分區文件進行歸併排序生成大文件輸出(默認輸出到hdfs)
e、圖片描述
五、  output(reduce端輸出處理結果)
  對數據進行TextOutputFormat處理,而後lineRecordWritor循環調用
nextKeyValue、getCurrentKey、getCurrentValue,輸出到外部文件系統(hdfs)框架

以上就是mapreduce對數據處理的全流程,這個階段的代碼比較簡單,只要把邏輯和數據處的思路和方向把握好,寫代碼也就手到擒來了分佈式

相關文章
相關標籤/搜索