【Hadoop離線基礎總結】MapReduce參數優化


MapReduce參數優化


資源相關參數

  • 這些參數都需要在mapred-site.xml中配置

    mapreduce.map.memory.mb
    一個 MapTask 可使用的資源上限(單位:MB),默認為1024
    如果 MapTask 實際使用的資源量超過該值,則會被強制殺死。

    mapreduce.reduce.memory.mb
    一個 ReduceTask 可使用的資源上限(單位:MB),默認為1024
    如果 ReduceTask 實際使用的資源量超過該值,則會被強制殺死。

    mapred.child.java.opts
    配置每個 map 或者 reduce 使用的內存的大小,默認是200M

    mapreduce.map.cpu.vcores
    每個 MapTask 可使用的最多 CPU Core 數目, 默認值: 1

    mapreduce.reduce.cpu.vcores
    每個 ReduceTask 可使用的最多 CPU Core 數目, 默認值: 1
    最后兩個vcores指的是virtual core/虛擬核處理器

    剩下兩個參數要在yarn集群啟動之前配置
    mapreduce.task.io.sort.mb
    shuffle的環形緩沖區大小,默認 100M

    mapreduce.map.sort.spill.percent
    環形緩沖區溢出的閾值,默認 80%

  • 這些參數都需要在yarn-site.xml中配置(在yarn集群啟動之前進行配置)

    yarn.scheduler.minimum-allocation-mb
    給應用程序container分配的最小內存,默認 1024M

    yarn.scheduler.maximum-allocation-mb
    給應用程序container分配的最大內存,默認 8192M

    yarn.scheduler.minimum-allocation-vcores
    container最小的虛擬內核的個數,默認 1

    yarn.scheduler.maximum-allocation-vcores
    container最大的虛擬內核的個數,默認 32

    yarn.nodemanager.resource.memory-mb
    給每個nodemanager的內存資源,默認 8192M


容錯相關參數

  • mapreduce.map.maxattempts
    每個Map Task最大重試次數,一旦重試參數超過該值,則認為Map Task運行失敗,默認值:4
  • mapreduce.reduce.maxattempts
    每個Reduce Task最大重試次數,一旦重試參數超過該值,則認為Map Task運行失敗,默認值:4
  • mapreduce.job.maxtaskfailures.per.tracker
    當失敗的 MapTask 失敗比例超過該值時,整個作業則失敗,默認值為 0
    如果你的應用程序允許丟棄部分輸入數據,則該該值設為一個大於0的值。
    比如5,表示如果有低於5%的MapTask失敗,整個作業仍認為成功。
  • mapreduce.task.timeout
    Task超時時間,默認值為600000毫秒(經常需要設置的一個參數)
    該參數表達的意思為:如果一個task在一定時間內沒有任何進入,即不會讀取新的數據,也沒有輸出數據,則認為該task處於block狀態,可能是卡住了
    為了防止因為用戶程序永遠block住不退出,則強制設置了一個該超時時間。如果你的程序對每條輸入數據的處理時間過長(比如會訪問數據庫,通過網絡拉取數據等),建議將該參數調大.
    該參數過小常出現的錯誤提示AttemptID:attempt_14267829456721_123456_m_000224_0 Timed out after 300 secsContainer killed by the ApplicationMaster.
  • 一般一個任務長時間沒有完成,可能是因為數據傾斜造成的
    數據傾斜:大量的數據都涌到同一個reduceTask里面去,造成一個reduceTask里面處理得數據量太大,遲遲不能完成。比如,reduceTakss完成80%就不動了,很有可能就是發生了數據傾斜。

效率和穩定性相關參數

  • mapreduce.map.speculative
    是否為Map Task打開推測執行機制,默認為true。
    如果Map執行時間比較長,那么集群就會推測這個Map已經卡住了,會重新啟動同樣的Map進行並行的執行,哪個先執行完了,就采取哪個的結果來作為最終結果
  • mapreduce.reduce.speculative
    是否為Reduce Task打開推測執行機制,默認為true。
    如果reduce執行時間比較長,那么集群就會推測這個reduce已經卡住了,會重新啟動同樣的reduce進行並行的執行,哪個先執行完了,就采取哪個的結果來作為最終結果

推測執行並不能解決數據傾斜的問題,反而會更加浪費內存資源,所以一般關掉


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM