En Hadoop v1, he asignado cada 7 ranuras de mapeador y reductor con un tamaño de 1GB, mis mapeadores y reductores funcionan bien. Mi máquina tiene memoria 8G, procesador 8. Ahora con YARN, cuando ejecuto la misma aplicación en la misma máquina, obtengo un error de contenedor. Por defecto, tengo esta configuración:
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>8192</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>8192</value>
</property>
Me dio error:
Container [pid=28920,containerID=container_1389136889967_0001_01_000121] is running beyond virtual memory limits. Current usage: 1.2 GB of 1 GB physical memory used; 2.2 GB of 2.1 GB virtual memory used. Killing container.
Luego intenté establecer el límite de memoria en mapred-site.xml:
<property>
<name>mapreduce.map.memory.mb</name>
<value>4096</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>4096</value>
</property>
Pero todavía aparece el error:
Container [pid=26783,containerID=container_1389136889967_0009_01_000002] is running beyond physical memory limits. Current usage: 4.2 GB of 4 GB physical memory used; 5.2 GB of 8.4 GB virtual memory used. Killing container.
Estoy confundido por qué la tarea del mapa necesita tanta memoria. Según tengo entendido, 1 GB de memoria es suficiente para mi tarea de mapa / reducción. ¿Por qué a medida que asigno más memoria al contenedor, la tarea consume más? ¿Es porque cada tarea tiene más divisiones? Siento que es más eficiente disminuir un poco el tamaño del contenedor y crear más contenedores, de modo que se ejecuten más tareas en paralelo. El problema es ¿cómo puedo asegurarme de que a cada contenedor no se le asignen más divisiones de las que puede manejar?
Respuestas:
También debe configurar correctamente las asignaciones máximas de memoria para MapReduce. De este tutorial de HortonWorks :
Para resumirlo:
mapreduce
configuraciones, nomapred
las. EDITAR: Este comentario ya no es aplicable ahora que ha editado su pregunta.java.opts
ajustes enumerados anteriormente.Finalmente, es posible que desee verificar esta otra pregunta SO que describe un problema similar (y una solución).
fuente
mapreduce.map.java.opts
ymapreduce.reduce.java.opts
resolviendo mi problema. ¿Sabe si la memoria real asignada a la tarea solo está definida pormapreduce.map/reduce.memory.mb
? ¿Cómoyarn.scheduler.minimum-allocation-mb
afecta la asignación de memoria real?Hay una marca de verificación en el nivel de hilo para la tasa de uso de memoria física y virtual. El problema no es solo que la máquina virtual no tiene suficiente memoria física. Pero es porque el uso de la memoria virtual es más de lo esperado para una memoria física determinada.
Nota : Esto está sucediendo en Centos / RHEL 6 debido a su asignación agresiva de memoria virtual.
Puede resolverse mediante:
Deshabilite la verificación de uso de memoria virtual estableciendo yarn.nodemanager.vmem-check-enabled en false ;
Aumente la relación VM: PM estableciendo yarn.nodemanager.vmem-pmem-ratio en un valor más alto.
Referencias :
https://issues.apache.org/jira/browse/HADOOP-11364
http://blog.cloudera.com/blog/2014/04/apache-hadoop-yarn-avoiding-6-time-consuming-gotchas/
Agregue la siguiente propiedad en yarn-site.xml
fuente
Tuve un problema muy similar al usar HIVE en EMR. Ninguna de las soluciones existentes funcionó para mí, es decir, ninguna de las configuraciones de mapreduce funcionó para mí; y tampoco lo hizo el poner
yarn.nodemanager.vmem-check-enabled
en falso.Sin embargo, lo que terminó funcionando fue la configuración
tez.am.resource.memory.mb
, por ejemplo:Otro ajuste a considerar es
yarn.app.mapreduce.am.resource.mb
fuente
No puedo comentar sobre la respuesta aceptada, debido a la baja reputación. Sin embargo, me gustaría agregar, este comportamiento es por diseño. NodeManager está matando su contenedor. Parece que está intentando utilizar la transmisión de hadoop, que se ejecuta como un proceso secundario de la tarea de reducción de mapas. El NodeManager monitorea todo el árbol de procesos de la tarea y si consume más memoria que el máximo establecido en mapreduce.map.memory.mb o mapreduce.reduce.memory.mb respectivamente, esperaríamos que Nodemanager elimine la tarea, de lo contrario su tarea es robar la memoria que pertenece a otros contenedores, que no desea.
fuente
Mientras trabajaba con Spark en EMR estaba teniendo el mismo problema y la configuración
maximizeResourceAllocation=true
funcionó; Espero que ayude a alguien. Tienes que configurarlo cuando creas el clúster. De los documentos EMR:Donde myConfig.json debería decir:
fuente
También enfrentamos este problema recientemente. Si el problema está relacionado con la memoria del mapeador, me gustaría sugerir un par de cosas que se deben verificar.
fuente
Ejecutando yarn en el subsistema de Windows Linux con Ubunto OS, error "corriendo más allá de los límites de memoria virtual, contenedor de destrucción" Lo resolví desactivando la verificación de memoria virtual en el archivo yarn-site.xml
fuente
No lo he comprobado personalmente, pero los errores de hadoop-yarn-container-virtual-memory-comprensión-y-solución-contenedor-se está ejecutando-más allá de los límites de la memoria virtual suena muy razonable
Resolví el problema cambiando
yarn.nodemanager.vmem-pmem-ratio
a un valor más alto y estaría de acuerdo en que:fuente