KZKY memo

自分用メモ.

hadoopチューニングのためのパラメータ関連のメモ.

象本参考

全体

  • 方針
    • shuffleにたくさんメモリを使ってspill to diskがなるべく起こらないようにする
    • mapreduceではなるべくメモリを使わないようにする.
  • パラメータ
    • mapred.child.java.opts: -Xmx200m : child JVMのメモリ
    • mapred.tasktracker.map.tasks.maximum: 2: map task数/タスクトラッカー
    • mapred.tasktracker.reduce.tasks.maximum: 2: reduce task数/タスクトラッカー

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の場合は,対応するパラメータが異なるので注意.