En esta página, se proporciona información sobre los errores de falta de memoria (OOM) de Dataproc en VMs de Compute Engine y se explican los pasos que puedes seguir para solucionarlos.
Efectos del error de OOM
Cuando Dataproc en VMs de Compute Engine encuentra errores de falta de memoria (OOM), los efectos incluyen las siguientes condiciones:
Las VMs principal y de trabajo se bloquean durante un período.
Los errores de OOM de las VMs principales hacen que las tareas fallen con errores de "task not acquired".
Los errores de OOM de la VM del trabajador provocan la pérdida del nodo en HDFS de YARN, lo que retrasa la ejecución de trabajos de Dataproc.
Controles de memoria de YARN
Apache YARN proporciona los siguientes tipos de controles de memoria:
- Basado en encuestas (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 memoria suficiente si los tamaños de los contenedores no se configuran correctamente.
- Los requisitos de control de memoria elástica pueden afectar negativamente la ejecución de trabajos.
- Los controles de memoria de YARN pueden no evitar errores de OOM cuando los procesos consumen memoria de manera agresiva.
Protección de la memoria de Dataproc
Cuando una VM de 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 controladores | No disponible | 2.0.76+ | 2.1.24+ | todos |
Identifica y confirma las terminaciones de protección de la memoria
Puedes usar la siguiente información para identificar y confirmar los cierres de trabajos debido a la presión de memoria.
Finalizaciones de procesos
Los procesos que finaliza la protección de la 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
Cierres de trabajos del grupo de nodos del nodo principal o del controlador
Cuando se finaliza un trabajo de grupo de nodos de controlador o nodo principal de Dataproc debido a la presión de 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 Finalizaciones de procesos).
Soluciones:
- Si el clúster tiene un grupo de controladores, aumenta
driver-required-memory-mb
al uso real de memoria de la tarea. - 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 él.
- Usa un tipo de máquina de nodo principal con más memoria.
- Verifica el registro
Desactivaciones de contenedores de YARN en nodos de trabajo
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 finalizó con
code INT
, verifica el registrogoogle.dataproc.oom-killer
odataproc.googleapis.com/node/problem_count
para confirmar que la Protección de memoria de Dataproc finalizó el trabajo (consulta Finalizaciones de procesos).Soluciones:
- Verifica que los tamaños de los contenedores estén configurados de forma correcta.
- Considera bajar
yarn.nodemanager.resource.memory-mb
. Esta propiedad controla la cantidad de memoria que se usa para programar contenedores de YARN. - Si los contenedores de trabajo fallan de forma constante, verifica si la distorsión de datos está causando un mayor uso de contenedores específicos. Si es así, vuelve a particionar la tarea o aumenta el tamaño del trabajador para satisfacer los requisitos de memoria adicionales.