MapReduce超時緣由(Time out after 300 secs)

  目前碰到過三種緣由致使 Time out after 300 secs。正則表達式

1. 死循環spa

  這是最多見的緣由。顯式的死循環很容易定位,隱式的死循環就比較麻煩了,好比正則表達式。曾經用一個網上抄來的郵箱正則表達式匹配百億條數據,最終致使一個map階段的attempt頻繁超時重試,最後本身重寫了一個簡化版的表達式,問題解決。對象

 

2. 頻繁GCip

      程序中生成了過多的全局對象會致使頻繁GC。好比reduce階段依賴一個不斷增大的ArrayList變量,而ArrayList在增大過程當中涉及到不斷的copyOf,造成額外的時間和空間開銷,最終致使任務超時。解決方法:任務提交時動態配置 -D mapreduce.reduce.memory.mb=5120 參數,增大reduce階段內存。內存

 

3. 節點崩潰class

  這種比較少見,並且通常會出如今reduce階段。由於map階段的中間結果是保存在計算節點本地的,所以數據只有單一備份。若是reduce階段時某個節點崩潰,會致使reduce計算節點沒法獲取該map節點的數據,形成Bad response ERROR for block。解決辦法很簡單,從新跑一次就行了。變量

 

補充:若是容許丟掉部分異常數據的話,能夠設置 mapreduce.map.skip.maxrecords 和 mapreduce.reduce.skip.maxgroups 兩個參數,分別表示map階段能夠跳過的最大錯誤記錄數和reduce階段能夠跳過的最大錯誤組數。配置

相關文章
相關標籤/搜索