集羣描述
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
![在這裏輸入圖片標題 輸入圖片說明](http://static.javashuo.com/static/loading.gif)
示例
如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空閒)。