Shuffle機制及優化

1. Shuffle機制

Map方法之後,Reduce方法之前的數據處理過程稱之爲Shuffle。
在這裏插入圖片描述
Shuffle階段主要做的事情:

  1. map方法處理後得到的一系列新的key/value會先經過Partioner的分區方法,標記分區,然後進入環形緩衝區
  2. 在環形緩衝區中進行分區和排序,環形緩衝區左側寫數據,右側寫索引
  3. 環形緩衝區默認100m,默認到達80%時溢寫,溢寫前對數據的key的索引按照字典序,進行快速排序
  4. 對溢寫的文件進行歸併排序,然後將結果放到相應的分區再進行排序,最後等待Reduce端拉取數據
  5. Reduce首先拉取數據到內存中,內存不夠,再溢寫到磁盤中,然後將內存和磁盤中的數據進行歸併排序,此時可以進行一次分組排序,最後寫入到reduce方法

2. Shuffle階段的優化

  1. 調整環形緩衝區到200m,同時溢寫比例增大到90%-95%,目的爲了減小溢寫次數
  2. 默認歸併10個溢寫文件,在機器的性能允許的前提下可增大爲15-20個,減小溢寫文件個數
  3. 歸併溢寫文件的過程中,在不影響業務邏輯的前提下對數據進行combiner,對MapTask的輸出進行局部彙總,以減少網絡傳輸量
  4. 歸併完成後,放到對應的磁盤時,可以對文件進行壓縮,減小文件大小
  5. Reduce拉取對應分區的數據時,默認一次拉取5個,在機器性能允許的前提下可以增加拉取個數
  6. Reduce拉取數據所存放的內存空間在條件允許的條件下也可以增大
  7. 每個MapTask和ReduceTask默認的可使用的內存大小爲1G,可以調整爲4-6G
  8. 每個MapTask和ReduceTask的最大允許失敗重試次數和超時時間也可以調整

3. MapReduce中能進行壓縮的地方

  • Map的輸入:壓縮後要保證能進行切片,支持切片的壓縮方法(LZO,bzip2)
  • Map的輸出:壓縮速度要儘可能的快,速度快的壓縮方法(Snappy)
  • Reduce輸出:
    • 如果輸出想要永久保存,選擇壓縮率最高的,但是壓縮速度會慢一些,比如Gzip
    • 如果輸出要作爲下一個MapReduce的輸入,要考慮支持切片的壓縮方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章