Falta de error de memoria en Hadoop

5 minutos de lectura

avatar de usuario
Anuj

Intenté instalar Hadoop siguiendo esto 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[a-z.]+' 

Recibo 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[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)

  • ¿Qué contiene su archivo de entrada?

    – Tudor

    11 de diciembre de 2011 a las 14:12

  • También sospecho que el archivo tiene una línea enorme

    – David Gruzmán

    11 de diciembre de 2011 a las 20:04

  • Tengo este mismo problema con Hadoop 1.0.0, la entrada es según la página wiki de inicio: wiki.apache.org/hadoop/GettingStartedWithHadoop. Probé las tres soluciones aquí, ninguna de las cuales parece tener ningún impacto.

    – tbroberg

    7 de febrero de 2012 a las 8:45

  • Resolvió mi problema. hadoop estaba dando prioridad al directorio de configuración /etc/hadoop sobre el directorio conf, lo que me arruinó todo. Lo depuré modificando el script bin/hadoop para imprimir la línea de comando de Java en la parte inferior en lugar de ejecutarlo.

    – tbroberg

    8 de febrero de 2012 a las 2:57

avatar de usuario
dosrec

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

Por ejemplo:

  hadoop jar <jarName> <fqcn> \
      -Dmapreduce.map.memory.mb=4096 \
      -Dmapreduce.map.java.opts=-Xmx3686m

aquí es un buen recurso con la respuesta a esta pregunta

  • ¡Tuve este problema y “ssh localhost” funcionó para mí! ¿Por qué Hadoop necesita ejecutarse en ssh para una operación independiente?

    – calvin

    04/08/2013 a las 18:31

Asegúrate que mapreduce.child.java.opts tener suficiente memoria necesaria para ejecutar el trabajo asignado. También asegúrese de que mapreduce.task.io.sort.mb debe ser menor que mapreduce.child.java.opts.

Ejemplo:

 mapreduce.child.java.opts=Xmx2048m

 mapreduce.task.io.sort.mb=100

De lo contrario, se encontrará con el problema de OOM, incluso HADOOP_CLIENT_OPTS en hadoop-env.sh tiene suficiente memoria si está configurado.

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

  <property>
    <name>mapred.child.java.opts</name>
    <value>-Xmx1024m</value>
  </property>

Esto iniciará las JVM de Hadoop con más espacio de almacenamiento dinámico.

avatar de usuario
Me gusta la comida

Para cualquiera que use paquetes RPM o DEB, la documentación y los consejos comunes son engañosos. Estos paquetes instalan archivos de configuración de hadoop en /etc/hadoop. Estos tendrán prioridad sobre otros ajustes.

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

   export HADOOP_CLIENT_OPTS="-Xmx128m $HADOOP_CLIENT_OPTS"

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

   export HADOOP_CLIENT_OPTS="-Xmx2048m $HADOOP_CLIENT_OPTS"

  • Acabo de tener exactamente el mismo problema que el OP y estaba usando el paquete RPM. Esto solucionó el problema. Votado a favor.

    – Aarón Burke

    12 de agosto de 2013 a las 20:13

  • También se podría establecer la propiedad como final en mapred-site.xml y eso no se sobrescribirá. <property> <name>mapred.child.java.opts</name> <value>-Xmx1024m</value> <final>true</final> </property>

    – sufinawaz

    30 de septiembre de 2013 a las 14:13


  • En Hadoop 2.xx, hadoop-env.sh se puede encontrar en /etc/hadoop/conf/hadoop-env.sh

    – Pradeep

    23 de diciembre de 2013 a las 7:47

  • @Zach Como desarrollador, no podemos tener acceso para realizar cambios en ningún archivo conf. ¿Hay alguna forma en la que podamos establecer estas propiedades en la llamada de trabajo de Hadoop?

    – Indrajeet Gour

    15 de enero de 2016 a las 12:21

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad