Я сталкиваюсь с довольно распространенной проблемой при настройке кластера 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
По мере того, как я провел дополнительные исследования, стало ясно, что увеличение пределов размера файла сильно зависит от системы [ 118] (даже в Ubuntu; здесь , здесь и здесь ), поэтому я хотел посмотреть, что такое метод Ubuntu. Кто-нибудь знает, как увеличить эти лимиты в Ubuntu 10.04?
Я определенно предпочитаю решения, которые не увеличивают лимиты для всех пользователей, но на этом этапе я был бы готов попробовать что угодно. Спасибо за вашу помощь!
Для установления этих пределов я сделал комбинацию вещей, найденных здесь и здесь. Так как я хочу ограничить эти пределы файла hdfs
и mapred
пользователи, я добавил каждого из этих пользователей к hadoop
группа в моей системе и отредактированный /etc/security/limits.conf
включать строку:
@hadoop hard nofile 16384
который позволяет обоим пользователям открывать целых 16 384 файла сразу, который по-видимому важен в псевдораспределенном режиме. Я также должен был добавить следующую строку к /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
Затем вы должны перезагрузить компьютер.