“GC Généraux limite dépassée” sur Hadoop .20 datanode
J'ai cherché mais pas trouver de nombreuses informations liées à Hadoop Datanode processus de mourir en raison de GC généraux limite dépassée, donc je pensais que je poste une question.
Nous sommes exécution d'un test où nous devons confirmer notre cluster Hadoop peuvent prendre en charge ~3millions fichiers stockés sur elle (actuellement 4 nœud de cluster). Nous sommes à l'aide d'une JVM 64 bits et nous avons alloué 8g pour le namenode. Cependant, comme mon programme de test écrit plus de fichiers DFS, les datanodes commencent à mourir avec cette erreur:
Exception in thread "DataNode: [/var/hadoop/data/hadoop/données]" java.lang.OutOfMemoryError: GC généraux limite dépassée
J'ai vu quelques posts au sujet de certaines options (parallèle GC?) Je suppose que ce qui peut être mis en hadoop-env.sh mais je ne suis pas trop sûr de la syntaxe et je suis un peu un newbie, donc je n'ai pas assez grok comment c'est fait.
Merci pour toute l'aide ici!
- Juste une mise à jour ici pour les gens: @1,5 million de fichiers dfs, quand mon JVM 64 bits était à 1g (par défaut), les données des nœuds commencent à mourir avec cette erreur. Quand je l'ai fait monter à la 2g, il s'en alla jusqu'à ce que j'ai environ 3 millions de fichiers. Je me demandais si ce type de mémoire ballonnement est un problème connu ou non et, dans l'affirmative, quelles autres recommandations puis-je essayer de le réparer?
- comme Tejas Patil mentionné, la taille de bloc par défaut est de 64 mo. Hadoop charge des métadonnées pour chaque fichier dans la mémoire à chaque fois qu'il s'exécute. Les fichiers plus vous avez, plus de mémoire qu'elle va prendre. Si ces fichiers sont beaucoup plus petits que la taille de bloc par défaut et vous avez la possibilité de le faire, essayez de combiner les fichiers en fichiers plus gros de magasin de HDFS. juste une pensée 🙂
Vous devez vous connecter pour publier un commentaire.
Essayez d'augmenter la mémoire de datanode en utilisant ce: (hadoop redémarrage nécessaire pour faire ce travail)
Ceci permettra de définir le segment de 10 go...vous pouvez augmenter selon votre besoin.
Vous pouvez également les coller au départ de
$HADOOP_CONF_DIR/hadoop-env.sh
fichier.Si vous utilisez une carte de réduire le travail à partir de la ligne de commande, vous pouvez augmenter le tas à l'aide du paramètre
-D 'mapreduce.map.java.opts=-Xmx1024m'
et/ou -D 'mapreduce.réduire.java.opts=-Xmx1024m'. Exemple:Noter que dans certains Cloudera de la documentation, ils utilisent toujours les anciens paramètres
mapred.child.java.opts
,mapred.map.child.java.opts
etmapred.reduce.child.java.opts
. Ces paramètres ne fonctionnent plus pour Hadoop 2 (voir Quelle est la relation entre " mapreduce.carte.de la mémoire.mo' et 'mapred.carte.enfant.java.opte pour Apache Hadoop YARN?).Ce post résolu le problème pour moi.
Donc, la clé est de "Ajouter que la variable d'environnement" (1er temps vu ce linux syntaxe de la commande 🙂 )
GC généraux limite indique que votre (petit) segment de mémoire est pleine.
C'est ce qui arrive souvent dans MapReduce opérations lorsque u processus d'un grand nombre de données. Essayez ceci:
Aussi, essayez ces choses suivantes:
Utiliser les multiplexeurs, les réducteurs ne devriez pas faire des listes plus qu'un petit multiple du nombre de cartes
Dans le même temps, vous pouvez générer des tas de vidage de OOME et d'analyser avec YourKit, etc adn analyser