6
votes

java.lang.outofMemoryloryError: Impossible de créer un nouveau thread natif pour le grand jeu de données

J'ai exécuté une requête de ruche qui fonctionnant bien pour le petit jeu de données. Mais je suis en cours d'exécution pour 250 millions d'enregistrements, je reçois des erreurs ci-dessous dans les journaux xxx

besoin d'aide sur ceci.


1 commentaires

J'ai vu cela avant d'où vous n'avez plus d'espace disque sur le nœud Tracker de la tâche exécutant la tâche (carte ou réduire). Quelle est la taille de votre cluster, et quel est l'espace libre disponible sur chaque nœud de cluster (sur la partition où mapred stocke les fichiers TEMP)


3 Réponses :


1
votes

Si votre travail échoue à cause de l'OutOfMemory sur les nœuds, vous pouvez tendre votre numéro de max mapes et réducteurs et la JVM opte pour chacun. mapred.child.java.opts (la valeur par défaut est 200xmx) doit généralement être augmenté en fonction de vos nœuds de données.


0 commentaires

8
votes

J'ai vécu cela avec Mapraduce en général. Dans mon expérience, ce n'est pas en réalité une erreur de mémoire de mémoire - le système est à court de descripteurs de fichier pour démarrer les threads, c'est pourquoi il est indiqué "Impossible de créer un nouveau fil natif".

Le correctif pour nous (sur Linux) était d'augmenter l'ulimit, qui a été réglé sur 1024, à 2048 via: ulimit -n 2048 . Vous devrez avoir des autorisations pour le faire - soit le sudo, soit un accès root, soit une limite difficile de 2048 ou plus, de sorte que vous puissiez la définir comme votre propre utilisateur sur le système. Vous pouvez le faire dans votre .profile ou .bstrucc paramètres.

Vous pouvez vérifier vos paramètres actuels avec ulimit -a . Voir cette référence pour plus de détails: https://stackoverflow.com/a/34645/871012

J'ai aussi vu beaucoup d'autres parler de la modification du fichier /etc/security/limits.conf , mais je n'ai pas encore eu à le faire. Voici un lien qui en parle: https://stackoverflow.com/a/8285278/871012


0 commentaires

-1
votes

Merci tout .. vous êtes correct. C'est en raison du descripteur de fichier, car mon programme générait beaucoup de fichier dans la table cible. en raison de la structure de partition multiple.

J'ai augmenté l'ulimit et aussi la propriété Xceivers. Cela a aidé. mais toujours dans notre situation, ces limites ont également été croisées

Ensuite, nous avons décidé de distribuer des données conformément aux partitions, puis nous n'obtenons qu'un seul fichier par partition.

Cela a fonctionné pour nous. Nous avons mis à l'échec notre système à 50 + milliards d'enregistrements et cela a fonctionné pour nous


2 commentaires

Bonjour, je reçois cette erreur dans hive.log comme une sous-déclaration de nombreuses exceptions. Avons-nous besoin de redémarrer la machine exécutant le Hiveerver et / ou le métastore après la définition ulimit ?


C'est plus comme un commentaire qu'une vraie réponse.