En este documento, se proporciona información sobre el ajuste de escala automático de Dataproc Serverless para Spark. Cuando envías tu carga de trabajo de Spark, Dataproc Serverless para Spark puede escalar de forma dinámica los recursos de la carga de trabajo, como la cantidad de ejecutores, para ejecutarla de manera eficaz. El ajuste de escala automático de Dataproc sin servidores es el comportamiento predeterminado y usa la asignación de recursos dinámica de Spark para determinar si se debe escalar la carga de trabajo, cómo y cuándo hacerlo.
V2 del ajuste de escala automático de Dataproc sin servidores
La versión 2 (V2) del ajuste de escala automático de Dataproc sin servidores agrega funciones y mejoras a la versión 1 (V1) predeterminada para ayudarte a administrar las cargas de trabajo de Dataproc sin servidores, mejorar el rendimiento de las cargas de trabajo y ahorrar costos:
- Reducción asíncrona de nodos: El ajuste de escala automático V2 reemplaza la reducción síncrona de V1 por una reducción asíncrona. Con la reducción de escala asíncrona, Dataproc Serverless reduce los recursos de la carga de trabajo sin esperar a que todos los nodos terminen la migración de shuffle. Esto significa que los nodos de cola larga que se reducen lentamente no bloquearán la escalamiento.
- Selección inteligente de nodos para reducir la escala: El ajuste de escala automático V2 reemplaza la selección aleatoria de nodos de la V1 por un algoritmo inteligente que identifica los mejores nodos para reducir la escala primero. Este algoritmo considera factores como el tamaño de los datos de shuffle del nodo y el tiempo inactivo.
- Comportamiento configurable de migración y baja gradual de Spark: El ajuste de escala automático V2 te permite usar propiedades estándar de Spark para configurar la migración y la baja gradual de Spark. Esta función puede ayudarte a mantener la compatibilidad de migración con tus propiedades de Spark personalizadas.
Funciones de ajuste de escala automático de Dataproc Serverless
Atributo | V1 del ajuste de escala automático de Dataproc sin servidores | V2 del ajuste de escala automático sin servidores de Dataproc |
Reducción de escala de nodos | Síncrona | Asíncrono |
Selección de nodos para reducir la escala | Aleatorio | Inteligente |
Retiro de servicio ordenado y migración aleatoria de Spark | No configurable | Configurable |
Propiedades de asignación dinámica de Spark
En la siguiente tabla, se enumeran las propiedades de la asignación dinámica de Spark que puedes establecer cuando envías una carga de trabajo por lotes para controlar el ajuste de escala automático (consulta cómo establecer propiedades de Spark).
Propiedad | Descripción | Predeterminado |
---|---|---|
spark.dataproc.scaling.version |
La versión del ajuste de escala automático de Spark de Dataproc sin servidores Especifica la versión 1 o 2 (consulta Ajuste de escala automático V2 de Dataproc sin servidores). |
1 |
spark.dynamicAllocation.enabled |
Si se debe usar la asignación de recursos dinámica, que escala la cantidad de ejecutores según la carga de trabajo
Si estableces el valor en false , se inhabilita el ajuste de escala automático para la carga de trabajo. Predeterminado: true . |
true |
spark.dynamicAllocation.initialExecutors |
Es la cantidad inicial de ejecutores asignados a la carga de trabajo. Después de que se inicia la carga de trabajo, el ajuste de escala automático puede cambiar la cantidad de ejecutores activos.
El valor mínimo es 2 y el máximo es 500 . |
2 |
spark.dynamicAllocation.minExecutors |
Es la cantidad mínima de ejecutores a los que se reducirá la carga de trabajo.
El valor mínimo es 2 . |
2 |
spark.dynamicAllocation.maxExecutors |
Es la cantidad máxima de ejecutores hasta la que se escalará la carga de trabajo.
El valor máximo es 2000 . |
1000 |
spark.dynamicAllocation.executorAllocationRatio |
Personaliza el escalamiento de la carga de trabajo de Spark. Acepta un valor de 0 a 1 . Un valor de 1.0 proporciona la máxima capacidad de escalamiento y ayuda a lograr el máximo paralelismo. Un valor de 0.5 establece la capacidad de escalamiento y el paralelismo en la mitad del valor máximo. |
0.3 |
spark.reducer.fetchMigratedShuffle.enabled |
Cuando se establece en true , habilita la recuperación de la ubicación de salida desordenada del controlador de Spark después de que falle una recuperación de un ejecutor que se dio de baja debido a la asignación dinámica de Spark. Esto reduce los errores de ExecutorDeadException causados por la migración de bloques aleatorios de ejecutores dados de baja a ejecutores activos, y reduce las reintentos de etapa causados por errores de FetchFailedException (consulta FetchFailedException caused by ExecutorDeadException).
Esta propiedad está disponible en las versiones del entorno de ejecución de Spark
1.1.12 y posteriores, y 2.0.20 y posteriores de Dataproc Serverless. |
false |
Métricas de asignación dinámica de Spark
Las cargas de trabajo por lotes de Spark generan las siguientes métricas relacionadas con la asignación de recursos dinámica de Spark (para obtener información adicional sobre las métricas de Spark, consulta Supervisión y instrumentación).
Métrica | Descripción |
---|---|
maximum-needed |
Es la cantidad máxima de ejecutores necesarios con la carga actual para satisfacer todas las tareas en ejecución y pendientes. |
running |
Es la cantidad de ejecutores en ejecución que ejecutan tareas. |
Problemas y soluciones de la asignación dinámica de Spark
FetchFailedException causado por ExecutorDeadException
Causa: Cuando la asignación dinámica de Spark reduce un ejecutor, el archivo de mezcla se migra a los ejecutores activos. Sin embargo, como la tarea del reductor de Spark en un ejecutor recupera el resultado de la mezcla de la ubicación que estableció el controlador de Spark cuando se inició la tarea del reductor, si se migra un archivo de mezcla, el reductor puede seguir intentando recuperar el resultado de la mezcla de un ejecutor dado de baja, lo que genera errores
ExecutorDeadException
yFetchFailedException
.Solución: Habilita la actualización de la ubicación de shuffle configurando
spark.reducer.fetchMigratedShuffle.enabled
comotrue
cuando ejecutes tu carga de trabajo por lotes de Dataproc sin servidores para Spark (consulta Cómo configurar propiedades de la carga de trabajo por lotes de Spark). Cuando esta propiedad está habilitada, la tarea del reductor vuelve a recuperar la ubicación de salida del shuffle del controlador después de que falla una recuperación de un ejecutor dado de baja.