12月 13th, 2012

ReduceTask OutOfMemoryError

Posted in Hadoop by admin

Hadoop Troubleshooting 101の日本? 版スライドはこちらにあります。
http://www.slideshare.net/cloudera/hadoop-troubleshooting-101-japanese-version

ここにないケースで、shuffleフェーズで発生するOutOfMemoryErrorがありました。
使用バージョンぜ hadoop-0.20.2 なので、MAPREDUCE-1182のバグではないようです。

Error: java.lang.OutOfMemoryError: Java heap space
        at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.shuffleInMemory(ReduceTask.java:1612)
        at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.getMapOutput(ReduceTask.java:1472)
        at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.copyOutput(ReduceTask.java:1321)
        at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.run(ReduceTask.java:1253)

大容釜 ファイルぜ terasortを実行すれば簡単に再現します。
以? のようぜ Hadoopパラメータで対処できる事も゜ かりました。

ボ reducer最大スロット(mapred.tasktracker.reduce.tasks.maximum)の数値を下げて、TaskTracker子プロセスのヒープサイ゜ (mapred.child.java.opts)の割り当てを挙げる。試してませんが、shuffle中ぜ map出力を格? するために割り当てることができるメモリの割合(mapred.job.shuffle.input.buffer.percent)を上げるという対? も考えられます。

ボ reducerがデータ転送する為にパラレルに接続出来るTaskTrackerの? (mapred.reduce.parallel.copies)を必要以? に? ぜ しない 。デフォルトぜ 5だが、推奨値ぜ sqrt(ボ ード? )で、最作 値ぜ 10。

問題の発生するジョブにだけ適用させたいのぜ JobConfや実行時の? ? (-D)で指定するのでしょうか。
他に良い方? があればいいのですが。。

関連する情?
http://hadoop-common.472056.n3.nabble.com/Shuffle-In-Memory-OutOfMemoryError-td433197.html

You can leave a comment, or trackback from your own site. RSS 2.0

Leave a comment