Erreur de Mémoire insuffisante dans Hadoop
J'ai essayé d'installer Hadoop suite à cette http://hadoop.apache.org/common/docs/stable/single_node_setup.html document.
Quand j'ai essayé de l'exécution de cette
bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+'
Je suis l'Exception suivante
java.lang.OutOfMemoryError: Java heap space
S'il vous plaît suggérer une solution pour que je puisse essayer de le exemple. L'ensemble de l'Exception est indiquée ci-dessous. Je suis nouveau sur Hadoop j'ai peut-être fait quelque chose de stupide . Toute suggestion sera fortement appréciée.
anuj@anuj-VPCEA13EN:~/hadoop$ bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+'
11/12/11 17:38:22 INFO util.NativeCodeLoader: Loaded the native-hadoop library
11/12/11 17:38:22 INFO mapred.FileInputFormat: Total input paths to process : 7
11/12/11 17:38:22 INFO mapred.JobClient: Running job: job_local_0001
11/12/11 17:38:22 INFO util.ProcessTree: setsid exited with exit code 0
11/12/11 17:38:22 INFO mapred.Task: Using ResourceCalculatorPlugin : org.apache.hadoop.util.LinuxResourceCalculatorPlugin@e49dcd
11/12/11 17:38:22 INFO mapred.MapTask: numReduceTasks: 1
11/12/11 17:38:22 INFO mapred.MapTask: io.sort.mb = 100
11/12/11 17:38:22 WARN mapred.LocalJobRunner: job_local_0001
java.lang.OutOfMemoryError: Java heap space
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.<init>(MapTask.java:949)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:428)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:372)
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:212)
11/12/11 17:38:23 INFO mapred.JobClient: map 0% reduce 0%
11/12/11 17:38:23 INFO mapred.JobClient: Job complete: job_local_0001
11/12/11 17:38:23 INFO mapred.JobClient: Counters: 0
11/12/11 17:38:23 INFO mapred.JobClient: Job Failed: NA
java.io.IOException: Job failed!
at org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:1257)
at org.apache.hadoop.examples.Grep.run(Grep.java:69)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
at org.apache.hadoop.examples.Grep.main(Grep.java:93)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.hadoop.util.ProgramDriver$ProgramDescription.invoke(ProgramDriver.java:68)
at org.apache.hadoop.util.ProgramDriver.driver(ProgramDriver.java:139)
at org.apache.hadoop.examples.ExampleDriver.main(ExampleDriver.java:64)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.hadoop.util.RunJar.main(RunJar.java:156)
- Que fait votre fichier d'entrée contient-il?
- Je soupçonne aussi que les fichiers ont une énorme ligne
- Je vais avoir le même problème avec Hadoop 1.0.0, l'entrée est selon la prise en main de la page wiki - wiki.apache.org/hadoop/GettingStartedWithHadoop. Essayé tous les trois solutions ici, aucun ne semble avoir aucun impact du tout.
- Résolu mon problème. hadoop est donnant /etc/hadoop répertoire config priorité sur le répertoire conf qui a sali moi tous. J'ai débogué en modifiant la bin/hadoop script pour imprimer la ligne de commande java en bas au lieu de l'exécuter.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez attribuer plus de mémoire en modifiant le conf/mapred-site.xml fichier et l'ajout de la propriété:
Cela va démarrer le hadoop machines virtuelles avec plus d'espace de tas.
Pour toute personne à l'aide de RPM ou DEB paquets, de la documentation et de la commune de conseils est trompeuse. Ces packages à installer hadoop des fichiers de configuration dans /etc/hadoop. Ces aura la priorité sur les autres paramètres.
L' /etc/hadoop/hadoop-env.sh définit le nombre maximum de java segment de mémoire pour Hadoop, par Défaut c'est:
Ce Xmx réglage est trop faible, il suffit de le changer à cela et réexécutez
<property> <name>mapred.child.java.opts</name> <value>-Xmx1024m</value> <final>true</final> </property>
Une autre possibilité est l'édition
hadoop-env.sh
, qui contientexport HADOOP_CLIENT_OPTS="-Xmx128m $HADOOP_CLIENT_OPTS"
.Changement de 128m de 1024m aidé dans mon cas (Hadoop 1.0.0.1 sur Debian).
Après avoir essayé de nombreuses combinaisons, enfin, j'ai conclu la même erreur sur mon environnement (Ubuntu 12.04, Hadoop 1.0.4) est due à deux questions.
Vous besoin de faire des ajustements à
mapreduce.{map|reduce}.java.opts
et aussi àmapreduce.{map|reduce}.memory.mb
.Par exemple:
ici est une bonne ressource à la réponse à cette question
Vous pouvez résoudre ce problème par la modification du fichier
/etc/hadoop/hadoop-env.sh
.Hadoop est donnant /etc/hadoop répertoire config priorité sur le répertoire conf.
J'ai également rencontré la même situation.
Exécuter votre travail comme celui ci-dessous:
Le segment de l'espace, est réglée par défaut à 32 mo ou 64 mo. Vous pouvez augmenter l'espace de segment de mémoire dans le fichier de propriétés comme, Tudor a souligné, ou vous pouvez le modifier pour ce travail particulier par la définition de cette propriété pour ce travail particulier.
J'ai installé hadoop 1.0.4 de la binaire de goudron et de a la de problème de mémoire. J'ai essayé Tudor, Zach Garner, Nishant Nagwani et Andris Birkmanis solutions, mais aucune n'a fonctionné pour moi.
Édition de la bin/hadoop ignorer $HADOOP_CLIENT_OPTS fonctionné pour moi:
Je suis en supposant qu'il existe une meilleure façon de faire cela, mais je ne pouvais pas le trouver.
La même exception avec Ubuntu, Hadoop 1.1.1. La solution est simple - modifier la variable d'environnement $HADOOP_CLIENT_OPTS établies par les scripts d'initialisation. Mais il a fallu longtemps pour le trouver =(
Nous avons été confrontés à la même situation.
La modification de la
hadoop-env.sh
fonctionné pour moi.EXPORT HADOOP_HEAPSIZE
serait commenté, décommenter & fournir à la taille de votre choix.Par défaut
HEAPSIZE
est attribuée en 1000MB.D'exporter les variables en exécutant la commande suivante a fonctionné pour moi:
Sur Ubuntu à l'aide de DEB à installer (au moins pour Hadoop 1.2.1) il y a un
/etc/profile.d/hadoop-env.sh
lien symbolique créé pour/etc/hadoop/hadoop-env.sh
qui entraîne qu'il se charge chaque fois que vous vous connectez. Dans mon expérience, ce n'est pas nécessaire que le/usr/bin/hadoop
wrapper lui-même finira par l'appeler (par/usr/libexec/hadoop-config.sh
). Sur mon système, j'ai supprimé le lien et je n'ai plus de problèmes bizarres lors de la modification de la valeur pour-Xmx
dansHADOOP_CLIENT_OPTIONS
(parce qu'à chaque fois quehadoop-env.sh
script est exécuté, le client options de la variable d'environnement est mis à jour, bien que gardant l'ancienne valeur)J'ai fini avec un très même problème la semaine dernière. Mon fichier d'entrée que j'ai utilisé avait un gros cul ligne et dans lequel je ne pouvais pas voir. Cette ligne a été près de 95% de ma taille de fichier(ic à 95% de 1 go! imaginez un peu!). Je vous conseille de prendre un coup d'oeil à vos fichiers en entrée en premier. Vous pourriez avoir un mal formé fichier d'entrée que vous voulez examiner. Essayez d'augmenter la mémoire une fois que vous vérifiez le fichier d'entrée.
Assurez-vous que le
mapreduce.child.java.opts
disposer de suffisamment de mémoire nécessaire pour exécuter mapred travail. Également veiller à ce quemapreduce.task.io.sort.mb
doit être inférieure àmapreduce.child.java.opts
.Exemple:
Sinon, vous serez frappé de la question OOM même le HADOOP_CLIENT_OPTS dans hadoop-env.sh la mémoire est suffisante si elle est configurée.