hadoop 調優1

逸卿發表於2014-05-07

Hadoop調優

mapred.tasktracker.map.tasks.maximum

 

官方解釋:The maximum number of map tasks that will be run  simultaneously by a task tracker.

 

我的理解:一個tasktracker最多可以同時執行的map任務數量

 

預設值:2

 

優化值:mapred.tasktracker.map.tasks.maximum = cpu數量

 

cpu數量 = 伺服器CPU總核數 / 每個CPU的核數
伺服器CPU總核數 = more /proc/cpuinfo | grep 'processor' | wc -l
每個CPU的核數 = more /proc/cpuinfo | grep 'cpu cores'

mapred.map.tasks

官方的解釋:The default number of map tasks per job

 

我的解釋:一個Job會使用task tracker的map任務槽數量,這個值 ≤ mapred.tasktracker.map.tasks.maximum

 

預設值:2

 

優化值:

  1. CPU數量 (我們目前的實踐值)
  2. (CPU數量 > 2) ? (CPU數量 * 0.75) : 1  (mapr的官方建議)

 

注意:map任務的數量是由input spilit決定的,和上面兩個引數無關

mapred.tasktracker.reduce.tasks.maximum

 

官方解釋:The maximum number of reduce tasks that will be run  simultaneously by a task tracker.

 

我的理解:一個task tracker最多可以同時執行的reduce任務數量

 

預設值:2

 

優化值: (CPU數量 > 2) ? (CPU數量 * 0.50): 1 (mapr的官方建議)

mapred.reduce.tasks

 

官方解釋:The default number of reduce tasks per job. Typically set to 99%  of the cluster's reduce capacity, so that if a node fails the reduces can  still be executed in a single wave.

 

我的理解:一個Job會使用task tracker的reduce任務槽數量

 

預設值:1

 

優化值:

  • 0.95 * mapred.tasktracker.tasks.maximum

理由:啟用95%的reduce任務槽執行task, recude task執行一輪就可以完成。剩餘5%的任務槽永遠失敗任務,重新執行

  • 1.75 * mapred.tasktracker.tasks.maximum

理由:因為reduce task數量超過reduce槽數,所以需要兩輪才能完成所有reduce task。具體快的原理我沒有完全理解,上原文:

 

    hadoop官方wiki: 寫道

At 1.75 the faster nodes will finish their first round of reduces and launch a second round of reduces doing a much better job of load balancing.

 

環境變數

disable ipv6配置,修改bin/hadoop,新增下行:

 

HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true"
 

Hive調優:

 

mapred.reduce.tasks

 

官方 寫道
The default number of reduce tasks per job. Typically set
to a prime close to the number of available hosts. Ignored when
mapred.job.tracker is "local". Hadoop set this to 1 by default, whereas hive uses -1 as its default value.
By setting this property to -1, Hive will automatically figure out what should be the number of reducers.

 

 

我的理解
tasktracker執行hive job的reduce任務數,設定為"-1"hive將自動設定該值,策略如下:

1. hive.exec.reducers.bytes.per.reducer(預設為1GB)
2. hive.exec.reducers.max(預設為999)

mapred.reduce.tasks = min ( 引數2,總輸入資料量/引數1 )
 

預設值:-1

 

優化值:顯式設定為Hadoop配置中mapred.reduce.tasks值,參考上文。

相關文章