Soluciona problemas de errores de memoria insuficiente de la VM

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 o 143.

  • 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 establece reason en ProcessKilledDueToMemoryPressure. 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:"
      

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 o dataproc.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.

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 registro google.dataproc.oom-killer o dataproc.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.