hadoopクラスターの設定でかなり一般的な問題 (実際には、 Clouderaの擬似分散クラスター を単一のマシンで使用)に遭遇しています。ファイルシステムの制限を超えています。 Clouderaが推奨/etc/security/limits.conf
に次の行を追加します。
hdfs hard nofile 16384 # hdfs is my 'hadoop' user equivalent
そして、カーネル2.6.32を実行しているので、/etc/sysctl.conf
も編集しています:
fs.epoll.max_user_instances = 4096
これらの変更を行ってサーバーを再起動した後も、同じエラーが表示されます! hdfsのオープンファイル制限は、デフォルトの1024を超えて増加していないようです。
[bash]$ Sudo lsof | awk '{print $3}' | sort | uniq -c | sort -nr
2145 root
1495 hdfs
610 mapred
359 www-data
305 rdm
116 mysql
83 rabbitmq
32 messagebus
30 snmp
25 ntp
23 syslog
16 daemon
1 USER
さらに調査を行った結果、 ファイルサイズの制限を大きくすることはシステムに大きく依存しています (Ubuntu内でも here 、 here 、および here )ので、Ubuntuの方法を確認したかったのです。 Ubuntu 10.04でこれらの制限を増やす方法を知っている人はいますか?
私は間違いなく、すべてのユーザーの制限を引き上げないソリューションを好みますが、この時点で何でも試してみたいと思います。ご協力いただきありがとうございます!
これらの制限を設定するために、 here と here の組み合わせを行いました。これらのファイル制限をhdfs
およびmapred
ユーザーに制限するため、これらの各ユーザーをシステムのhadoop
グループに追加し、/etc/security/limits.conf
を編集して、ライン:
@hadoop hard nofile 16384
これにより、両方のユーザーが最大16384個のファイルを一度に開くことができます。これは、擬似分散モードでは明らかに重要です。また、/etc/pam.d/common-session
に次の行を追加する必要がありました。
session required pam_limits.so
これにより、これらのファイル制限は、hdfsやmapredなどのデーモンプロセス全体で持続します。サーバーを再起動すると、hdfsは現在デフォルトの数(1024)を超えるファイルを開いているため、すべてが完全に機能しているように見えます。
[dsftar01 ~]$ Sudo lsof | awk '{if(NR>1) print $3}' | sort | uniq -c | sort -nr
1972 root
1530 hdfs
608 mapred
360 www-data
166 rdm
97 mysql
83 rabbitmq
41 nobody
35 syslog
31 messagebus
30 snmp
25 ntp
16 daemon
ulimit -n 16384
をhdfsユーザーに追加.bashrc
(または/etc/profile
これはすべてのユーザーの値を設定します]
ユーザーにホームディレクトリがない場合は、ulimit -n 16384
を/etc/profile
に追加します
その後、コンピューターを再起動する必要があります。