fuera de error de memoria en Hadoop

Intenté instalar Hadoop siguiendo este http://hadoop.apache.org/common/docs/stable/single_node_setup.html documento. Cuando intenté ejecutar esto

bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[az.]+' 

Estoy recibiendo la siguiente excepción

 java.lang.OutOfMemoryError: Java heap space 

Sugiera una solución para que pueda probar el ejemplo. La excepción completa se enumera a continuación. Soy nuevo en Hadoop, podría haber hecho algo tonto. Cualquier sugerencia será muy apreciada.

 anuj@anuj-VPCEA13EN:~/hadoop$ bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[az.]+' 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.(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) 

Puede asignar más memoria editando el archivo conf / mapred-site.xml y agregando la propiedad:

   mapred.child.java.opts -Xmx1024m  

Esto iniciará las JVM hadoop con más espacio en montón.

Para cualquiera que use paquetes RPM o DEB, la documentación y el consejo común es engañoso. Estos paquetes instalan archivos de configuración de hadoop en / etc / hadoop. Estos tendrán prioridad sobre otras configuraciones.

El /etc/hadoop/hadoop-env.sh establece la memoria máxima del montón de Java para Hadoop, por defecto es:

  exportar HADOOP_CLIENT_OPTS = "- Xmx128m $ HADOOP_CLIENT_OPTS" 

Esta configuración de Xmx es demasiado baja, simplemente cámbiela a esto y vuelva a ejecutar

  exportar HADOOP_CLIENT_OPTS = "- Xmx2048m $ HADOOP_CLIENT_OPTS" 

Otra posibilidad es editar hadoop-env.sh , que contiene la export HADOOP_CLIENT_OPTS="-Xmx128m $HADOOP_CLIENT_OPTS" . Cambiar 128m a 1024m ayudó en mi caso (Hadoop 1.0.0.1 en Debian).

Después de probar tantas combinaciones, finalmente concluí que el mismo error en mi entorno (Ubuntu 12.04, Hadoop 1.0.4) se debe a dos problemas.

  1. Igual que Zach Gamer mencionado anteriormente.
  2. no te olvides de ejecutar “ssh localhost” primero. ¡Créelo o no! Sin ssh arrojaría también un mensaje de error en el espacio de montón de Java.

Puede resolver este problema editando el archivo /etc/hadoop/hadoop-env.sh .

Hadoop le estaba dando prioridad al directorio config / etc / hadoop sobre el directorio conf.

También me encontré con la misma situación.

Debes hacer ajustes en mapreduce.{map|reduce}.java.opts y también en mapreduce.{map|reduce}.memory.mb .

Por ejemplo:

  hadoop jar   \ -Dmapreduce.map.memory.mb=4096 \ -Dmapreduce.map.java.opts=-Xmx3686m 

aquí hay un buen recurso con respuesta a esta pregunta

Ejecute su trabajo como el siguiente:

 bin/hadoop jar hadoop-examples-*.jar grep -D mapred.child.java.opts=-Xmx1024M input output 'dfs[az.]+' 

El espacio de almacenamiento dynamic está configurado de forma predeterminada en 32 MB o 64 MB. Puede boost el espacio de almacenamiento dynamic en el archivo de propiedades, como señaló Tudor, o puede cambiarlo para este trabajo en particular estableciendo esta propiedad para este trabajo en particular.

Instalé hadoop 1.0.4 del alquitrán binario y tuve el problema de falta de memoria. Probé las soluciones de Tudor, Zach Garner, Nishant Nagwani y Andris Birkmanis, pero ninguna de ellas funcionó para mí.

Editando bin / hadoop para ignorar $ HADOOP_CLIENT_OPTS funcionó para mí:

 ... elif [ "$COMMAND" = "jar" ] ; then CLASS=org.apache.hadoop.util.RunJar #Line changed this line to avoid out of memory error: #HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS" # changed to: HADOOP_OPTS="$HADOOP_OPTS " ... 

Supongo que hay una mejor manera de hacerlo pero no pude encontrarlo.

La misma excepción con Ubuntu, Hadoop 1.1.1. La solución fue simple: edite la variable de shell $ HADOOP_CLIENT_OPTS establecida por algún script de inicio. Pero llevó mucho tiempo encontrarlo = (

Nos enfrentamos a la misma situación.

La modificación de hadoop-env.sh funcionó para mí.

EXPORT HADOOP_HEAPSIZE se comentará, EXPORT HADOOP_HEAPSIZE comentario y proporcione el tamaño que desee.

Por defecto HEAPSIZE asignado es 1000MB.

Exportar las variables ejecutando el siguiente comando funcionó para mí:

 . conf/hadoop-env.sh 

En Ubuntu usando la instalación de DEB (al menos para Hadoop 1.2.1) hay un enlace simbólico /etc/profile.d/hadoop-env.sh creado a /etc/hadoop/hadoop-env.sh que hace que se cargue cada vez que inicie sesión. En mi experiencia, esto no es necesario ya que el envoltorio /usr/bin/hadoop lo llamará finalmente (a través de /usr/libexec/hadoop-config.sh ). En mi sistema eliminé el enlace simbólico y ya no tengo problemas cuando cambio el valor de -Xmx en HADOOP_CLIENT_OPTIONS (porque cada vez que se hadoop-env.sh script hadoop-env.sh , la variable de entorno de las opciones del cliente se actualiza, aunque manteniendo el valor antiguo)

Terminé con un problema muy similar la semana pasada. Mi archivo de entrada que estaba usando tenía una línea grande que no podía ver. Esa línea era casi el 95% de mi tamaño de archivo (¡el 95% de 1 gb! ¡Imagínenlo!). Sugeriría que primero eche un vistazo a sus archivos de entrada. Es posible que esté teniendo un archivo de entrada con formato incorrecto que desee examinar. Intente boost el espacio de stack después de comprobar el archivo de entrada.

Asegúrese de que mapreduce.child.java.opts tenga memoria suficiente para ejecutar el trabajo mapred. Asegúrese también de que mapreduce.task.io.sort.mb sea ​​menor que mapreduce.child.java.opts .

Ejemplo:

  mapreduce.child.java.opts=Xmx2048m mapreduce.task.io.sort.mb=100 

De lo contrario, aparecerá el problema OOM incluso HADOOP_CLIENT_OPTS en hadoop-env.sh tendrá suficiente memoria si está configurado.