Solucionar problemas de retrasos en los trabajos

En esta página se enumeran las causas habituales de los retrasos en la programación de trabajos de Dataproc y se incluye información que puede ayudarte a evitarlos.

Información general

Estos son algunos de los motivos habituales por los que se retrasa (se limita) un trabajo de Dataproc:

  • Demasiados trabajos en ejecución
  • Uso elevado de la memoria del sistema
  • No hay suficiente memoria libre
  • Se ha superado el límite de frecuencia

Normalmente, el mensaje de retraso de la tarea se emitirá con el siguiente formato:

Awaiting execution [SCHEDULER_MESSAGE]"

En las siguientes secciones se indican las posibles causas y soluciones para casos específicos de retraso en los trabajos.

Demasiados trabajos en ejecución

Mensaje del programador:

Throttling job ### (and maybe others): Too many running jobs (current=xx max=xx)

Causas:

Se ha superado el número máximo de trabajos simultáneos en función de la memoria de la VM maestra (el controlador de trabajos se ejecuta en la VM maestra del clúster de Dataproc). De forma predeterminada, Dataproc reserva 3,5 GB de memoria para las aplicaciones y permite 1 trabajo por GB.

Por ejemplo, el tipo de máquina n1-standard-4 tiene 15GB de memoria. Con 3.5GB reservado para gastos generales, quedan 11.5GB. Si se redondea a un número entero, 11GB está disponible para un máximo de 11 tareas simultáneas.

Soluciones:

  1. Monitoriza las métricas de registro, como el uso de CPU y la memoria, para estimar los requisitos de los trabajos.

  2. Cuando creas un clúster de trabajos, ocurre lo siguiente:

    1. Usa un tipo de máquina con más memoria para la VM maestra del clúster.

    2. Si el valor de 1GB por trabajo es superior al que necesitas, asigna a la propiedad de clúster dataproc:dataproc.scheduler.driver-size-mb un valor inferior a 1024.

    3. Asigna a la dataproc:dataproc.scheduler.max-concurrent-jobs propiedad del clúster un valor que se adapte a los requisitos de tu tarea.

Mucha memoria del sistema o no hay suficiente memoria libre

Mensaje del programador:

Throttling job xxx_____JOBID_____xxx (and maybe others): High system memory usage (current=xx%)

Throttling job xxx_____JOBID_____xxx (and maybe others): Not enough free memory (current=xx min=xx)

Causas:

De forma predeterminada, el agente de Dataproc limita el envío de trabajos cuando el uso de memoria alcanza el 90% (0.9)). Cuando se alcanza este límite, no se pueden programar nuevos trabajos.

No hay suficiente memoria libre para programar otro trabajo en el clúster.

Solución:

  1. Cuando creas un clúster, ocurre lo siguiente:

    1. Aumenta el valor de la propiedad de clúster dataproc:dataproc.scheduler.max-memory-used . Por ejemplo, puedes cambiar el valor predeterminado 0.90 a 0.95.
    2. Aumenta el valor de la propiedad de clúster dataproc.scheduler.min-free-memory.mb . El valor predeterminado es 256 MB.

Se ha superado el límite de frecuencia de las tareas

Mensaje del programador:

Throttling job xxx__JOBID___xxx (and maybe others): Rate limit

Causas:

El agente de Dataproc ha alcanzado el límite de frecuencia de envío de trabajos.

Soluciones:

  1. De forma predeterminada, el envío de trabajos del agente de Dataproc está limitado a 1.0 QPS, que puede cambiar al crear un clúster con la dataproc:dataproc.scheduler.job-submission-rate propiedad de clúster.

Ver el estado de la tarea

Para ver el estado y los detalles de un trabajo, consulta Monitorización y depuración de trabajos.