hadoopチューニングのためのパラメータ関連のメモ.
象本参考
全体
- 方針
- shuffleにたくさんメモリを使ってspill to diskがなるべく起こらないようにする
- mapreduceではなるべくメモリを使わないようにする.
map
- 方針
- mapタスクのspillがなるべく少なくなるようにする.
- 単純には以下のパラメータの値変更
- mapred.child.java.optsを増やす
- mapred.map.tasksを増やす
- mapred.reduce.tasksを増やす
- mapred.tasktracker.map.tasks.maximumを増やす
- mapred.tasktracker.reduce.tasks.maximumを増やす
- io.sort.mbを増やす
- mapred.job.reduce.input.buffer.percentを増やす
- パラメータ
- io.sort.mb: 100: map outputのsort時に使用するメモリ(mb)
- io.sort.spill.percent: 0.80: spill時のbuffer対する割合のしきい値
- io.sort.factor: 10: spillをマージ/ソートするときに一度にマージするファイル数
- io.sort.record.percent: 0.05: 1.x以降はremovedらしい
reduce
- 方針
- 中間データがdiskに吐き出されずに常にメモリ上に存在するようにする.
- 単純には以下のパラメータの値変更
- mapred.inmem.merge.threshold=0
- mapred.job.reduce.input.buffer.percent=1.0
- パラメータ
- mapred.inmem.merge.threshold: 1000: mapoutput数がこの数に達するとspill
- io.sort.factor: 10: spillをマージ/ソートするときに一度にマージするファイル数
- mapred.job.reduce.input.buffer.percent: 0.0: mapouputを保持するメモリサイズで,JVMのheapサイズに対する割合.
- mapred.job.shuffle.input.buffer.percent: 0.70: copyフェーズのシャッフルに使用されるメモリで,JVMのheapサイズに対する割合.
- mapred.job.shuffle.merge.percent: 0.66: spill to diskになるしきい値で,mapred.job.shuffle.input.buffer.percentで決まるメモリサイズに対する割合.
MRv1に対応しているので,MRv2/YARNの場合は,対応するパラメータが異なるので注意.
参考URL
- http://www.hpcs.cs.tsukuba.ac.jp/~mikami/pukiwiki/index.php?Hadoop%20%E3%81%AE%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6 (default parameter関連)
- http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDH4/latest/CDH4-Installation-Guide/cdh4ig_topic_11_6.html
- http://blog.father.gedow.net/2012/07/07/yarn-capacity-scheduler-memory-parallel/
- http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/ClusterSetup.html