2017-01-02 4 views
1

J'ai configuré un cluster à 2 nœuds avec hadoop et installé hbase. Il fonctionnait correctement et j'ai exécuté quelques tâches de base de la carte pour réduire les tâches dans hadoop et j'ai pu créer et lister certaines tables dans hbase aussi. Cependant j'ai peu de données dans hdfs/hbase et il n'y avait pas de travail en cours d'exécution. Après un certain temps j'ai commencé à obtenir "Java.net.Socket: Too many open files" erreur dans les journaux hbase.Pourquoi trop de fichiers ouverts dans Hbase

J'ai cherché des solutions mais il y a surtout des réponses à propos de l'augmentation de la limite. Cependant, je suis curieux de savoir pourquoi il y a trop de fichiers ouverts. Ce cluster n'est utilisé par aucun autre programme et je n'ai exécuté aucun travail autre que de simples tâches de réduction de map dans les didacticiels. Pourquoi pourrait-il en être ainsi?

Pourquoi?

EDIT

Après Andrzej suggéré, j'ai couru cette commande (lsof | grep java) et je l'ai constaté qu'il ya beaucoup de connexion dans différents ports qui sont en attente d'être fermé. Ceci est juste quelques ligne de la sortie de la commande

java  29872  hadoop 151u  IPv6   158476883  0t0  TCP os231.myIP:44712->os231.myIP:50010 (CLOSE_WAIT) 
java  29872  hadoop 152u  IPv6   158476885  0t0  TCP os231.myIP:35214->os233.myIP:50010 (CLOSE_WAIT) 
java  29872  hadoop 153u  IPv6   158476886  0t0  TCP os231.myIP:39899->os232.myIP:50010 (CLOSE_WAIT) 
java  29872  hadoop 155u  IPv6   158476892  0t0  TCP os231.myIP:44717->os231.myIP:50010 (CLOSE_WAIT) 
java  29872  hadoop 156u  IPv6   158476895  0t0  TCP os231.myIP:44718->os231.myIP:50010 (CLOSE_WAIT) 

Maintenant, la question est, pourquoi ne pas fermer automatiquement si la connexion est maintenant inutile? S'ils ne sont pas automatiquement interrompus, est-il possible de les fermer avec un script crontab ou quelque chose de similaire?

Merci

+0

Vous avez une limite dans le noyau, une limite dans SELinux et limitez les fichiers ouverts pour le service. Voir https://www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open-files/ ou https://naveensnayak.wordpress.com/2015/09/17/increasing-file -descriptors-et-open-files-limit-centos-7/Cela dépend de votre système d'exploitation. –

+0

Je connais la limite. Mais je me demande pourquoi il y a eu autant de dossiers ouverts. augmenter la limite peut être une solution temporaire. Y a-t-il des fichiers ouverts qui auraient dû être fermés, etc.? –

+2

Si vous utilisez linux appelez 'lsof | grep java'. –

Répondre

0

... Je suis curieux de savoir pourquoi il y a trop de fichiers ouverts? ...

HBase conserve ouvrir tous les fichiers tout le temps. Voici un exemple. Si vous avez 10 tables avec 3 familles de colonnes, chacune avec une moyenne de 3 fichiers par famille de colonnes et 100 régions par serveur de région par table, il y aura 10 * 3 * 3 * 100 = 9000 descripteurs de fichiers ouverts. Ce calcul ne prend pas en compte les fichiers JAR, les fichiers temporaires, etc.

La valeur suggérée pour ulimit est 10240, mais vous souhaiterez peut-être la définir sur une valeur correspondant mieux à votre cas.