como aumentar os limites de arquivos abertos (nofile e epoll) em 10.04?

2

Estou me deparando com um problema bastante comum na configuração um cluster de hadoop (na verdade, ele está usando cluster de pseudo-distribuição do Cloudera em uma única máquina), onde o número de arquivos que o hadoop está abrindo está excedendo os limites do sistema de arquivos. Cloudera recomenda adicionar as seguintes linhas a /etc/security/limits.conf :

hdfs hard nofile 16384 # hdfs is my 'hadoop' user equivalent

e, desde que eu estou rodando o kernel 2.6.32, também editando /etc/sysctl.conf :

fs.epoll.max_user_instances = 4096

Depois de fazer essas alterações e reiniciar meu servidor, ainda estou recebendo o mesmo erro! Ainda parece que os limites de arquivos abertos do hdfs não foram aumentados além do padrão 1024:

[bash]$ sudo lsof | awk '{print }' | 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

Como fiz mais pesquisas, fique claro que aumentar os limites de tamanho de arquivo é altamente dependente do sistema (mesmo dentro do Ubuntu; aqui , aqui , e aqui ), então eu queria ver o que é o método Ubuntu. Alguém sabe como aumentar esses limites no Ubuntu 10.04?

Eu definitivamente prefiro soluções que não aumentem os limites para todos os usuários, mas neste momento eu estaria disposto a tentar qualquer coisa. Obrigado pela ajuda!

    
por dino 11.07.2012 / 13:47

2 respostas

2

Para definir esses limites, eu fiz uma combinação de coisas encontradas aqui e aqui . Como desejo restringir esses limites de arquivo aos usuários hdfs e mapred , adicionei cada um desses usuários ao grupo hadoop em meu sistema e editei /etc/security/limits.conf para incluir a linha:

@hadoop hard nofile 16384

que permite que ambos os usuários abram até 16384 arquivos de uma vez, o que aparentemente é importante no modo pseudo-distribuído. Eu também tive que adicionar a seguinte linha a /etc/pam.d/common-session :

session required pam_limits.so

que faz com que esses limites de arquivo persistam nos processos daemon, como hdfs e mapred. Depois de reiniciar o servidor, tudo parece estar funcionando perfeitamente, pois o hdfs tem atualmente mais arquivos do que o número padrão (1024) aberto:

[dsftar01 ~]$ sudo lsof | awk '{if(NR>1) print }' | 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
    
por dino 12.07.2012 / 01:53
1

adicione ulimit -n 16384 aos usuários hdfs .bashrc (ou /etc/profile isso definirá o valor para todos os usuários]

Se o usuário não tiver um diretório inicial, anexe ulimit -n 16384 a /etc/profile

Então você precisa reiniciar o computador.

    
por Manula Waidyanatha 11.07.2012 / 14:05