hadoop - spark - Error: espacio de almacenamiento dinámico de Java
hadoop wikipedia (4)
Al usar Hadoop 2.5.0-cdh5.2.0, esto me ayudó a cambiar el tamaño del montón del proceso java local (secuencial):
export HADOOP_HEAPSIZE=2900
hadoop jar analytics.jar .....
La razón por la que funcionó es que /usr/lib/hadoop/libexec/hadoop-config.sh tiene
# check envvars which might override default args
if [ "$HADOOP_HEAPSIZE" != "" ]; then
#echo "run with heapsize $HADOOP_HEAPSIZE"
JAVA_HEAP_MAX="-Xmx""$HADOOP_HEAPSIZE""m"
#echo $JAVA_HEAP_MAX
fi
En Ubuntu, cuando estoy ejecutando el ejemplo de hadoop:
$bin/hadoop jar hadoop-examples-1.0.4.jar grep input output ''dfs[a-z.]+''
$echo $HADOOP_HEAPSIZE
2000
En el registro, estoy recibiendo el error como:
Maped.JobClient INFO: Id. De la tarea: intento_201303251213_0012_m_000000_2, Estado: Error: Espacio de almacenamiento en Java 13/03/25 15:03:43 Mapred.JobClient INFO: Estado de la inspección de la información: Parche de la inspección de la información: event_201303251213_0012_m_000001_2. 15:04:28 INFO mapred.JobClient: trabajo fallido: # de tareas de mapa fallidas excedió el límite permitido. FailedCount: 1. LastFailedTask: task_201303251213_0012_m_000000 java.io.IOException: ¡Error en la tarea! en org.apache.hadoop.mapred.JobClient.runJob (JobClient.java:1265) en org.apache.hadoop.examples.Grep.run (Grep.java:69) en org.apache.hadoop.util.ToolRunner.run (ToolRunner.java:65) en org.apache.hadoop.examples.Grep.main (Grep.java:93)
Háganos saber cuál es el problema.
Claramente se ha quedado sin el tamaño de pila asignado a Java. Así que tratarás de aumentar eso.
Para eso puedes ejecutar lo siguiente antes de ejecutar el comando hadoop
:
export HADOOP_OPTS="-Xmx4096m"
Alternativamente, puede lograr lo mismo agregando la siguiente configuración permanente en su archivo mapred-site.xml
, este archivo se encuentra en HADOOP_HOME/conf/
:
<property>
<name>mapred.child.java.opts</name>
<value>-Xmx4096m</value>
</property>
Esto establecería su espacio de almacenamiento dinámico en java a 4096 MB (4 GB), incluso puede intentarlo con un valor más bajo primero si eso funciona. Si eso tampoco funciona, auméntelo más si su máquina lo admite, si no, muévase a una máquina que tenga más memoria y pruebe allí. Como el espacio del montón simplemente significa que no tiene suficiente RAM disponible para Java.
ACTUALIZACIÓN: para Hadoop 2+, realice los cambios en mapreduce.map.java.opts en su lugar.
Si agrega una propiedad en mapred-site.xml
<property>
<name>mapred.child.java.opts</name>
<value>-Xmx2048m</value>
</property>
A veces sucede otro porque es más que un límite de memoria virtual. En esta situación, debe agregar
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>4.2</value>
</property>
en yarn-site.xml
porque su predeterminado 2.1G a veces es demasiado pequeño.
<property>
<name>mapred.child.java.opts</name>
<value>-Xmx4096m</value>
</property>
Funciona para mi.
exportar HADOOP_OPTS = "- Xmx4096m"
no funciona