mapreduce.job.reduce.slowstart.completedmaps

集羣描述

YARN狀況以下:圖片

  • NodeManager個數爲20
  • 每一個Nodemanager分配內存爲104G左右。
  • 每一個container內存設置爲4G,可生成約520個container。
  • 資源調度方式爲fair scheduler。

加工數據

加工數據爲1T的gzip壓縮數據,解壓約爲3至4T數據,個數爲1000個。ip

負載任務

任務執行狀況以下:內存

  • 每一個任務:map1000+,reduce1000+
  • 若是集羣只運行單個任務,則單個計算時間可控制在10分鐘左右。
  • 最多同時運行10至20個任務,每一個任務可分配到使用的contianer個數爲30-50個。

問題描述

問題現象

  • 大部分任務的Map剩餘部分Pending
  • 任務的Reduce已經啓動顯示爲Running
  • 集羣CPU負載幾乎爲0

輸入圖片說明 輸入圖片說明

示例

如20個任務,每一個任務剩餘10-100個的Map在Pending狀態,每一個任務的Reduce獲取了約25個container顯示爲Running狀態。所以,整個集羣的任務都在等待其餘任務釋放container,然而各自任務的Reduce佔用了container卻不釋放,所有任務都處於等待狀態。資源

解決思路

參數調整

將產生Map較多的任務參數mapreduce.job.reduce.slowstart.completedmaps設置爲1.0。避免Map和Reduce過多的任務出現Map未執行完,Reduce任務先開始執行,過多任務並行時所需資源相互等待的窘境。這是客戶端參數it

不利影響

  • 當集羣負載比較空閒時,少數任務中Map接近執行完畢,而Reduce任務不啓動致使的container閒置,集羣資源浪費。若Map任務處理數據出現不平均的狀況,這種狀況會更加嚴重。
  • 從集羣資源負載監控會出現Map和Reduce任務出現兩個波峯,中間出現波谷(Cpu空閒)。
相關文章
相關標籤/搜索