如何在 10.04 中增加打开文件限制(nofile 和 epoll)?

如何在 10.04 中增加打开文件限制(nofile 和 epoll)?

我遇到了一个配置Hadoop集群时相当常见的问题(实际上,它使用Cloudera的伪分布式集群在单台机器上,hadoop 打开的文件数量超出了文件系统的限制。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 中;这里这里, 和这里),所以想看看 Ubuntu 的方法是什么。有人知道如何在 Ubuntu 10.04 中增加这些限制吗?

我当然更喜欢不增加所有用户限制的解决方案,但目前我愿意尝试任何方法。感谢您的帮助!

答案1

为了设定这些限制,我做了一些事情这里这里。因为我想将这些文件限制限制在hdfsmapred用户,所以我将每个用户添加到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

答案2

添加ulimit -n 16384到 hdfs 用户.bashrc(或者/etc/profile这将为所有用户设置值)

如果用户没有主目录附加ulimit -n 16384/etc/profile

然后你必须重新启动计算机。

相关内容