Hadoop MapReduce在實際場景中的優化

2021-10-24 16:05:22 字數 2187 閱讀 4496

mapreduce程式效率瓶頸:

cpu、記憶體、磁碟健康、網路

資料傾斜

map和reduce數設定不合理

map執行時間太長,導致reduce等待太久

小檔案過多

大量的不可分塊的超大檔案

spill次數過多

merge次數過多

mapreduce優化方法主要從六個方面考慮:

資料輸入

map階段

reduce階段

io傳輸

資料傾斜問題

常用的調優引數

使用sequencefile二進位制檔案

減少資料傾斜的方法

抽樣和範圍分割槽——可以通過對原始資料進行抽樣得到的結果集來預設分割槽邊界值

自定義分割槽——基於輸出鍵的背景知識進行自定義分割槽。例如,如果map輸出鍵的單詞**於一本書。且其中某幾個專業詞彙較多。那麼就可以自定義分割槽將這這些專業詞彙傳送給固定的一部分reduce例項。而將其他的都傳送給剩餘的reduce例項

combine——使用combine可以大量地減小資料傾斜。在可能的情況下, combine的目的就是聚合並精簡資料

採用map join,盡量避免reduce join

配置引數

引數說明

mapreduce.map.memory.mb

乙個maptask可使用的資源上限(單位:mb),預設為1024。如果maptask實際使用的資源量超過該值,則會被強制殺死。

mapreduce.reduce.memory.mb

乙個reducetask可使用的資源上限(單位:mb),預設為1024。如果reducetask實際使用的資源量超過該值,則會被強制殺死。

mapreduce.map.cpu.vcores

每個maptask可使用的最多cpu core數目,預設值: 1

mapreduce.reduce.cpu.vcores

每個reducetask可使用的最多cpu core數目,預設值: 1

mapreduce.reduce.shuffle.parallelcopies

每個reduce去map中取資料的並行數。預設值是5

mapreduce.reduce.shuffle.merge.percent

buffer中的資料達到多少比例開始寫入磁碟。預設值0.66

mapreduce.reduce.shuffle.input.buffer.percent

buffer大小佔reduce可用記憶體的比例。預設值0.7

mapreduce.reduce.input.buffer.percent

指定多少比例的記憶體用來存放buffer中的資料,預設值是0.0

配置引數

引數說明

yarn.scheduler.minimum-allocation-mb

給應用程式container分配的最小記憶體,預設值:1024

yarn.scheduler.maximum-allocation-mb

給應用程式container分配的最大記憶體,預設值:8192

yarn.scheduler.minimum-allocation-vcores

每個container申請的最小cpu核數,預設值:1

yarn.scheduler.maximum-allocation-vcores

每個container申請的最大cpu核數,預設值:32

yarn.nodemanager.resource.memory-mb

給containers分配的最大物理記憶體,預設值:8192

配置引數

引數說明

mapreduce.map.maxattempts

每個map task最大重試次數,一旦重試引數超過該值,則認為map task執行失敗,預設值:4

mapreduce.reduce.maxattempts

每個reduce task最大重試次數,一旦重試引數超過該值,則認為map task執行失敗,預設值:4

mapreduce.task.timeout

hadoop map reduce 階段筆記

shuffle and sort mr 框架保證 每個 reducer 的輸入都是按照 key 鍵排過序的。shuffle 將map輸出結果送到reducer和排序的功能。1 map 每個map task將結果輸出到環形記憶體緩衝區,當到達一定閾值,則啟動乙個後台程序將快取中的資料 1 按照 red...

Hadoop MapReduce 效能優化

我們時常談論說到mapreduce時,我們都會說它是離線計算框架,磁碟io開銷大,job執行比較慢等等。這一篇部落格,南國系統回顧下mr程式執行慢的原因,以及如何優化mr程式。我們都知道mapreduce是離線計算框架,不同於spark記憶體計算框架模型。乙個標準的mr程式由map方法和reduce...

九 hadoop mapreduce分割槽

一 什麼時候分割槽?1 分割槽的實現 通過繼承partitioner類,實現getpartition方法。public int getpartition key key,value value,int reducetasknumber map結束後得到的每個key value都呼叫該方法,並把key...