Je rencontre un problème assez courant lors de la configuration d'un cluster hadoop (en fait, il utilise le cluster pseudo distribué de Cloudera sur une seule machine), où le nombre de fichiers son ouverture dépasse les limites du système de fichiers. Cloudera recommande ajouter les lignes suivantes à /etc/security/limits.conf
:
hdfs hard nofile 16384 # hdfs is my 'hadoop' user equivalent
et, comme je suis en train d’exécuter le noyau 2.6.32, édite également /etc/sysctl.conf
:
fs.epoll.max_user_instances = 4096
Après avoir effectué ces modifications et redémarré mon serveur, je reçois toujours la même erreur! Il semble toujours que les limites de fichiers ouverts de hdfs n’ont pas été augmentées au-delà de la valeur par défaut de 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
Au fur et à mesure de mes recherches, il est devenu évident que l’augmentation de la taille du fichier dépend fortement du système (même sous Ubuntu; ici , ici , et ici ), je voulais donc voir quelle est la méthode Ubuntu. Est-ce que quelqu'un sait comment augmenter ces limites dans Ubuntu 10.04?
Je préfère définitivement les solutions qui n'augmentent pas les limites pour tous les utilisateurs, mais pour le moment, je serais prêt à tout essayer. Merci de votre aide!
Afin de définir ces limites, j'ai fait une combinaison de choses trouvées ici et ici . Puisque je veux limiter ces limites de fichiers aux utilisateurs hdfs
et mapred
, j’ai ajouté chacun de ces utilisateurs au groupe hadoop
de mon système et modifié /etc/security/limits.conf
pour inclure le ligne:
@hadoop hard nofile 16384
qui permet aux deux utilisateurs d'ouvrir jusqu'à 16384 fichiers à la fois, ce qui est apparemment important en mode pseudo-distribué. J'ai aussi dû ajouter la ligne suivante à /etc/pam.d/common-session
:
session required pam_limits.so
ce qui fait que ces limites de fichiers persistent dans les processus de démon tels que hdfs et mapred. Après le redémarrage du serveur, tout semble fonctionner parfaitement car hdfs a actuellement plus que le nombre de fichiers ouverts par défaut (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
ajouter ulimit -n 16384
aux utilisateurs hdfs .bashrc
(ou /etc/profile
, cela définira la valeur pour tous les utilisateurs]
Si l'utilisateur ne dispose pas d'un répertoire personnel, ajoutez ulimit -n 16384
à /etc/profile
.
Ensuite, vous devez redémarrer l'ordinateur.