最近在做報表統計,跑hadoop任務。
之前也跑過map/reduce但是數據量不大,遇到某些map/reduce執行時間特別長的問題。
執行時間長有幾種可能性:
1. 單個map/reduce任務處理的任務大。
需要注意每個任務的數據處理量大小不至於偏差太大。可以切割部分大文件。
2. map數量過多, reduce拉取各方數據慢
這種情況,可以在中間加一輪map過程A。
即map -> mapA - > reduce,來減少reduce拉取數據的源頭的個數。
3. 遇到了執行慢節點
hadoop 可以執行推測執行。對於某些耗時長的任務,如果集群有多余的slot可以啟動額外的任務執行。
如果對於同一個map(或者reduce),有任何一個相同map執行完成。則其他任務會被kill, 該map(或者reduce)執行完成。
這種情況完全避免了,慢節點問題。
推測執行參數: mapred.map.tasks.speculative.execution 和 mapred.reduce.tasks.speculative.execution 默認開啟。
map/reduce官方默認參數: https://hadoop.apache.org/docs/r1.0.4/mapred-default.html