1. 程式人生 > >[Hadoop]淺談MapReduce原理及執行流程

[Hadoop]淺談MapReduce原理及執行流程

技術分享 情況下 size 原來 per node 有一個 根據 執行流程

MapReduce


  • MapReduce原理非常重要,hive與spark都是基於MR原理
  • MapReduce采用多進程,方便對每個任務資源控制和調配,但是進程消耗更多的啟動時間,因此MR時效性不高。適合批量,高吞吐的數據處理。Spark采用的是多線程模型。

MapReduce執行流程

技術分享圖片

Map過程

  • map函數開始產生輸出時,並不是直接將數據寫到磁盤,它利用緩沖的方式寫到內存。每個map任務都有一個環形內存緩沖區用於存儲任務輸出。在默認情況下,緩沖區大小為100MB。一旦緩沖內容達到閾值(默認80%),便把數據溢出(spill)到磁盤。

Partition過程

  • 在map輸出數據寫入磁盤之前,線程首先根據數據最終要傳的reducer把數據劃分成相應的分區,這個過程即為partition。

技術分享圖片

傳統hash算法
  • hash()%max 括號內隨機取數,這樣會隨機分配到1-max服務器上
一致性hash算法

技術分享圖片

  • 一致性哈希算法的優點:形成動態閉環調節,如果有一臺服務器出現問題,例如圖中B服務器出現問題,A和C可以代替其承擔。

Partition的作用

  • 對於spill出的數據進行哈希取模,原來數據形式(key, value),取模後變成(partition,key, value)
  • reduce有幾個partition就有幾個
  • 在進行MapReduce計算時,有時候需要把最終的輸出數據分到不同的文件中,比如按照省份劃分的話,需要把同一省份的數據放到一個文件中;按照性別劃分的話,需要把同一性別的數據放到一個文件中。我們知道最終的輸出數據是來自於Reducer任務。那麽,如果要得到多個文件,意味著有同樣數量的Reducer任務在運行。Reducer任務的數據來自於Mapper任務,也就說Mapper任務要劃分數據,對於不同的數據分配給不同的Reducer任務運行。Mapper任務劃分數據的過程就稱作Partition。負責實現劃分數據的類稱作Partitioner。

HDFS中block

  • 文件存儲在HDFS中,每個文件切分成多個一定大小(默認64M)的block(默認3個備份)存儲在多個節點(DataNode)上
  • block的修改:hdfs-site.xml配置文件中修改dfs.block.size的值

Shuflle

  • shuffle是MapReduce的“心臟”,是奇跡發生的地方
  • Shuflle包括很多環節:partition sort spill meger combiner copy memery disk

[Hadoop]淺談MapReduce原理及執行流程