garbage-collection hadoop

garbage collection - "Se excedió el límite superior de GC" en el nodo de datos HODOP.20



garbage-collection hadoop (3)

El límite superior del GC indica que su (pequeño) montón está lleno.

Esto es lo que sucede a menudo en las operaciones de MapReduce cuando procesa una gran cantidad de datos. Prueba esto:

<propiedad>

<nombre> mapred.child.java.opts </ name>

<valor> -Xmx1024m -XX: -UseGCOverheadLimit </ value>

</ property>

Además, prueba estas cosas:

Utilice combinadores, los reductores no deberían obtener listas de más de un pequeño múltiplo de la cantidad de mapas

Al mismo tiempo, puede generar un volcado dinámico desde OOME y analizarlo con YourKit, etc. y analizarlo

He buscado y no he encontrado mucha información relacionada con los procesos de Hadoop Datanode que se han agotado debido a que se ha excedido el límite general de GC, así que pensé en publicar una pregunta.

Estamos realizando una prueba en la que necesitamos confirmar que nuestro clúster Hadoop puede manejar tener ~ 3 millones de archivos almacenados en él (actualmente un clúster de 4 nodos). Estamos utilizando una JVM de 64 bits y hemos asignado 8g al namenode. Sin embargo, como mi programa de prueba escribe más archivos en DFS, los nodos de datos comienzan a desaparecer con este error: Excepción en el hilo "DataNode: [/ var / hadoop / data / hadoop / data]" java.lang.OutOfMemoryError: límite superior de GC excedido

Vi algunas publicaciones sobre algunas opciones (GC paralelo?) Supongo que se puede establecer en hadoop-env.sh, pero no estoy muy seguro de la sintaxis y soy un novato, así que no me gustó nada. cómo está hecho. Gracias por cualquier ayuda aquí!


Intente aumentar la memoria para el nodo de datos usando esto: (se requiere reiniciar hadoop para que esto funcione)

export HADOOP_DATANODE_OPTS="-Xmx10g"

Esto establecerá el montón en 10 gb ... puede aumentar según su necesidad.

También puede pegar esto al inicio en el $HADOOP_CONF_DIR/hadoop-env.sh .


Si está ejecutando un mapa, reduzca el trabajo desde la línea de comando, puede aumentar el montón usando el parámetro -D ''mapreduce.map.java.opts=-Xmx1024m'' y / o''D mapreduce.reduce.java.opts = -Xmx1024m ''. Ejemplo:

hadoop --config /etc/hadoop/conf jar /usr/lib/hbase-solr/tools/hbase-indexer-mr-*-job.jar --conf /etc/hbase/conf/hbase-site.xml -D ''mapreduce.map.java.opts=-Xmx1024m'' --hbase-indexer-file $HOME/morphline-hbase-mapper.xml --zk-host 127.0.0.1/solr --collection hbase-collection1 --go-live --log4j /home/cloudera/morphlines/log4j.properties

Tenga en cuenta que en cierta documentación de Cloudera, todavía usan los parámetros anteriores mapred.child.java.opts , mapred.map.child.java.opts y mapred.reduce.child.java.opts . Estos parámetros ya no funcionan para Hadoop 2 (consulte ¿Cuál es la relación entre ''mapreduce.map.memory.mb'' y ''mapred.map.child.java.opts'' en Apache Hadoop YARN? ).