読者です 読者をやめる 読者になる 読者になる

生物物理計算化学者の雛

主に科学に関する諸々を書き留めています。

Hadoopをコア数の多いマシンで使う場合はユーザプロセス数上限も増やす必要あり

Hadoop

先日導入した 24 CPUコア搭載マシン(
Xeon E5-2697v2 搭載24コアマシンの性能と消費電力をチェック - 生物物理計算化学者の雛
)で Map スロット数 24 でHadoopジョブを流したところ、Map処理21本は正常に流れるが、残り3本はエラーで停止してブラックリスト入りする状態になってしまいました。

エラーメッセージは以下の通りです。(CentOS 6.2、Hadoop version 0.21.0)

java.lang.Throwable: Child Error at org.apache.hadoop.mapred.TaskRunner.run(TaskRunner.java:249) Caused by: java.io.IOException: Task process exit with nonzero status of 134. at org.apache.hadoop.mapred.TaskRunner.run(TaskRunner.java:236) ,
java.lang.Throwable: Child Error at org.apache.hadoop.mapred.TaskRunner.run(TaskRunner.java:249) Caused by: java.io.IOException: Task process exit with nonzero status of 1. at org.apache.hadoop.mapred.TaskRunner.run(TaskRunner.java:236)

何度繰り返しても21本は動いて3本はエラーになるため、設定に問題があると考えいろいろ試行錯誤したところ、ユーザプロセス数を増やすことで期待通り24本のMap処理が走るようになることがわかりました。

なお、ファイルディスクリプタについては既にデフォルトの1024から増やしてありました。(参考:
Hadoopクラスタでulimitを設定するときの注意点 - tagomorisのメモ置き場、/etc/security/limits.confのnofileプロパティを増やせばよい)


ユーザプロセス数の設定は /etc/security/limits.d/90-nproc.conf ファイルを書き換ることでできます。

# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.

*          soft    nproc     1024

デフォルトでは上限が1024になっているので、これを8192のように大きな値に書き換え、マシンを再起動(再起動しなくても再ログインでもOKかも?)することでユーザプロセス数上限を増やすことができました。


上限値が変更されているかどうかはルート権限で「ulimit -a」を実行することで以下のように確認できます。

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 256445
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 32768      # ファイルディスクリプタ、デフォルト1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) unlimited
cpu time               (seconds, -t) unlimited
max user processes              (-u) 8192       # ユーザプロセス数、デフォルト1024
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited