MapReduce編程模型

Mpper/Reducer/InputFormat/Spilit/Block/Partationer/Conbiner

Map階段由一定數量的Map Task組成

  • 數據數據解析 InputFormat
  • 輸入數據處理 Mapper
  • 數據分組Partitioner

Reduce階段由一定數量的Reduce Task組成

  • 從遠程拷貝數據
  • 按照可以進行歸併排序
  • 數據處理 Reducer
  • 數據輸出格式 OutputFormat

Shuffle過程

  • Mapper把結果不斷的輸出到環形緩衝區中
  • 當環形緩衝區中的數據達到一定閥值時,後台線程會將其溢寫到磁碟(根據Partitioner把數據寫入不同的partition,然後對每個partition中的數據進行排序)
  • 隨著Mapper的不斷運行,磁碟溢寫文件越來越多。當Mapper執行完成時,會對這些溢寫文件進行合併,並對相同partition下的不同分片進行歸併排序,同一個分區內的數據是有序的
  • Reduce Task通過網路遠程拷貝MapTask輸出結果中屬於自己的分區數據。合併拷貝過來的數據,並通過歸併排序演算法對內容進行整理,將相同key的數據分為一組,不同key之間有序
  • 最終生成一個key對應一組值的數據集合,每個key會調用一次reduce方法

  • Combiner調用的地方

1)MapTask環形緩衝區向磁碟溢寫文件之前

2)Map節點在合併本地多個溢寫文件為一個大文件之前

  • 使用Combiner的好處

1)減少MapTask輸出的數據量

2)由於MapTask會將溢寫文件寫入磁碟,所以可以減少磁碟IO

3)減少ReduceTask的網路傳輸數據量

  • 應用場景:結果可疊加的場景,比如SUM
  • 設置方法:job.setCombinerClass(WordCountReduce.class)

推薦閱讀:

相关文章