En esta página, se enumeran las causas comunes de las demoras en la programación de trabajos de Managed Service para Apache Spark, con información que puede ayudarte a evitarlas.
Descripción general
Estos son los motivos comunes por los que se retrasa (limita) un trabajo de Managed Service para Apache Spark:
- Demasiados trabajos en ejecución
- Uso elevado de la memoria del sistema
- No hay suficiente memoria libre
- Se superó el límite de frecuencia
Por lo general, el mensaje de demora del trabajo se emitirá en el siguiente formato:
Awaiting execution [SCHEDULER_MESSAGE]"
En las siguientes secciones, se proporcionan posibles causas y soluciones para situaciones específicas de demora de trabajos.
Demasiados trabajos en ejecución
Mensaje del programador:
Throttling job ### (and maybe others): Too many running jobs (current=xx max=xx)
Causas:
Se superó la cantidad máxima de trabajos simultáneos según la memoria de la VM principal (el controlador de trabajos se ejecuta en la instancia principal del clúster de Managed Service para Apache Spark). De forma predeterminada, Managed Service para Apache Spark reserva 3.5 GB de memoria para las aplicaciones y permite 1 trabajo por GB.
Ejemplo: El tipo de máquina n1-standard-4 tiene 15GB de memoria. Con 3.5GB reservados para la sobrecarga,
11.5GB quedan. Si se redondea a un número entero, 11GB están disponibles para hasta 11 trabajos simultáneos.
Soluciones:
Supervisa las métricas de registro, como el uso de CPU y la memoria, para estimar los requisitos del trabajo.
Cuando creas un clúster de trabajos, haz lo siguiente:
Usa un tipo de máquina con más memoria para la VM principal del clúster.
Si
1GBpor trabajo es más de lo que necesitas, establece la propiedad del clústerdataproc:dataproc.scheduler.driver-size-mben un valor inferior a1024.Establece la propiedad del
dataproc:dataproc.scheduler.max-concurrent-jobsclúster en un valor adecuado para los requisitos de tu trabajo.
Memoria del sistema alta 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 Managed Service para Apache Spark limita el envío de trabajos cuando
el uso de la memoria alcanza el 90% (0.9). Cuando se alcanza este límite, no se pueden
programar trabajos nuevos.
La cantidad de memoria libre necesaria para programar otro trabajo en el clúster no es suficiente.
Solución:
Cuando creas un clúster, haz lo siguiente:
- Aumenta el valor de la
dataproc:dataproc.scheduler.max-memory-usedpropiedad del clúster. Por ejemplo, establécelo por encima del valor predeterminado0.90a0.95. - Aumenta el valor de la
dataproc.scheduler.min-free-memory.mbpropiedad del clúster. El valor predeterminado es256MB.
- Aumenta el valor de la
Se superó el límite de frecuencia de trabajos
Mensaje del programador:
Throttling job xxx__JOBID___xxx (and maybe others): Rate limit
Causas:
El agente de Managed Service para Apache Spark alcanzó el límite de frecuencia de envío de trabajos.
Soluciones:
- De forma predeterminada, el envío de trabajos del agente de Managed Service para Apache Spark está limitado a
1.0 QPS, que puedes establecer en un valor diferente cuando creas un clúster con ladataproc:dataproc.scheduler.job-submission-ratepropiedad del clúster.
Ver el estado de un trabajo
Para ver el estado y los detalles del trabajo, consulta Supervisión y depuración de trabajos.