En esta página, se proporciona información sobre los errores de falta de memoria (OOM) de las VMs de Dataproc en Compute Engine y se explican los pasos que puedes seguir para solucionar y resolver estos errores.
Efectos de los errores de OOM
Cuando las VMs de Dataproc en Compute Engine encuentran errores de memoria insuficiente (OOM), los efectos incluyen las siguientes condiciones:
Las VMs principales y de trabajador se congelan durante un período.
Los errores de OOM de las VMs principales provocan que los trabajos fallen con errores de "tarea no adquirida".
Los errores de OOM de la VM de trabajador provocan la pérdida del nodo en YARN HDFS, lo que retrasa la ejecución del trabajo de Dataproc.
Controles de memoria de YARN
Apache YARN proporciona los siguientes tipos de controles de memoria:
- Basado en sondeos (heredado)
- Estricto
- Elastic
De forma predeterminada, Dataproc no establece yarn.nodemanager.resource.memory.enabled
para habilitar los controles de memoria de YARN por los siguientes motivos:
- El control estricto de la memoria puede provocar la finalización de los contenedores cuando hay suficiente memoria si los tamaños de los contenedores no están configurados correctamente.
- Los requisitos de control de memoria elástica pueden afectar de forma adversa la ejecución de trabajos.
- Los controles de memoria de YARN pueden fallar y no evitar los errores de OOM cuando los procesos consumen memoria de forma agresiva.
Protección de memoria de Dataproc
Cuando una VM del clúster de Dataproc está bajo presión de memoria, la protección de memoria de Dataproc finaliza los procesos o contenedores hasta que se quita la condición de OOM.
Dataproc proporciona protección de memoria para los siguientes nodos de clúster en las siguientes versiones de imágenes de Dataproc en Compute Engine:
Rol | 1.5 | 2.0 | 2.1 | 2.2 |
---|---|---|---|---|
VM principal | 1.5.74+ | 2.0.48+ | todos | todos |
VM de trabajador | No disponible | 2.0.76+ | 2.1.24+ | todos |
VM del grupo de conductores | No disponible | 2.0.76+ | 2.1.24+ | todos |
Identifica y confirma las finalizaciones de la protección de memoria
Puedes usar la siguiente información para identificar y confirmar las finalizaciones de trabajos debido a la presión de memoria.
Finalizaciones de procesos
Los procesos que finaliza la protección de memoria de Dataproc salen con el código
137
o143
.Cuando Dataproc finaliza un proceso debido a la presión de la memoria, pueden ocurrir las siguientes acciones o condiciones:
- Dataproc incrementa la métrica acumulativa
dataproc.googleapis.com/node/problem_count
y establecereason
enProcessKilledDueToMemoryPressure
. Consulta Recopilación de métricas de recursos de Dataproc. - Dataproc escribe un registro
google.dataproc.oom-killer
con el mensaje:"A process is killed due to memory pressure: process name
. Para ver estos mensajes, habilita el registro y, luego, usa el siguiente filtro de registro:resource.type="cloud_dataproc_cluster" resource.labels.cluster_name="CLUSTER_NAME" resource.labels.cluster_uuid="CLUSTER_UUID" jsonPayload.message:"A process is killed due to memory pressure:"
- Dataproc incrementa la métrica acumulativa
Finalización de trabajos de grupos de nodos principales o de controladores
Cuando un nodo principal de Dataproc o un trabajo de grupo de nodos de controlador finaliza debido a la presión en la memoria, el trabajo falla con el código de error
Driver received SIGTERM/SIGKILL signal and exited with INT
. Para ver estos mensajes, habilita el registro y, luego, usa el siguiente filtro de registro:resource.type="cloud_dataproc_cluster" resource.labels.cluster_name="CLUSTER_NAME" resource.labels.cluster_uuid="CLUSTER_UUID" jsonPayload.message:"Driver received SIGTERM/SIGKILL signal and exited with"
- Verifica el registro
google.dataproc.oom-killer
odataproc.googleapis.com/node/problem_count
para confirmar que la Protección de memoria de Dataproc finalizó el trabajo (consulta Finalización de procesos).
Soluciones:
- Si el clúster tiene un grupo de controladores, aumenta
driver-required-memory-mb
al uso real de memoria del trabajo. - Si el clúster no tiene un grupo de controladores, vuelve a crearlo y reduce la cantidad máxima de trabajos simultáneos que se ejecutan en el clúster.
- Usa un tipo de máquina de nodo principal con mayor memoria.
- Verifica el registro
Finalizaciones de contenedores YARN de nodos trabajadores
Dataproc escribe el siguiente mensaje en el administrador de recursos de YARN:
container id exited with code EXIT_CODE
. Para ver estos mensajes, habilita el registro y, luego, usa el siguiente filtro de registro:resource.type="cloud_dataproc_cluster" resource.labels.cluster_name="CLUSTER_NAME" resource.labels.cluster_uuid="CLUSTER_UUID" jsonPayload.message:"container" AND "exited with code" AND "which potentially signifies memory pressure on NODE
Si un contenedor salió con
code INT
, consulta el registrogoogle.dataproc.oom-killer
o eldataproc.googleapis.com/node/problem_count
para confirmar que la Protección de memoria de Dataproc finalizó el trabajo (consulta Finalización de procesos).Soluciones:
- Verifica que los tamaños de los contenedores estén configurados correctamente.
- Considera reducir
yarn.nodemanager.resource.memory-mb
. Esta propiedad controla la cantidad de memoria que se usa para programar contenedores de YARN. - Si los contenedores de trabajos fallan de forma constante, verifica si la asimetría de los datos está provocando un mayor uso de contenedores específicos. Si es así, vuelve a particionar el trabajo o aumenta el tamaño del trabajador para satisfacer los requisitos de memoria adicionales.