En este documento, se proporciona información sobre Google Cloud el ajuste de escala automático de Serverless for Apache Spark. Cuando envías tu carga de trabajo de Spark, Serverless for Apache Spark puede ajustar de forma dinámica la escala de los recursos de la carga de trabajo, como la cantidad de ejecutores, para ejecutarla de manera eficaz. El ajuste de escala automático de Serverless for Apache Spark es el comportamiento predeterminado y usa la asignación dinámica de recursos de Spark para determinar si se debe ajustar la escala de tu carga de trabajo, cómo y cuándo.
Ajuste de escala automático de Serverless for Apache Spark V2
La versión 2 (V2) del ajuste de escala automático de Serverless for Apache Spark agrega funciones y mejoras a la versión 1 (V1) predeterminada para ayudarte a administrar las cargas de trabajo de Serverless for Apache Spark, mejorar el rendimiento de las cargas de trabajo y ahorrar costos:
- Reducción de escala asíncrona de nodos: El ajuste de escala automático V2 reemplaza la reducción de escala síncrona de V1 por una asíncrona. Con la reducción de escala asíncrona, Serverless for Apache Spark reduce la escala de los recursos de la carga de trabajo sin esperar a que todos los nodos finalicen la migración de ordenamiento aleatorio. Esto significa que los nodos de cola larga que se reducen lentamente no bloquearán el aumento de escala.
- Selección inteligente de nodos para la reducción de escala: El ajuste de escala automático V2 reemplaza la selección aleatoria de nodos de 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 ordenamiento aleatorio del nodo y el tiempo de inactividad.
- Retiro de servicio ordenado y comportamiento de migración de ordenamiento aleatorio de Spark configurables: El ajuste de escala automático V2 te permite usar propiedades estándar de Spark para configurar el retiro de servicio ordenado y la migración de ordenamiento aleatorio de Spark. Esta función puede ayudar te a mantener la compatibilidad de la migración con tus propiedades de Spark personalizadas.
Funciones de ajuste de escala automático de Serverless for Apache Spark
| Función | Ajuste de escala automático de Serverless for Apache Spark V1 | Ajuste de escala automático de Serverless for Apache Spark V2 |
| Reducción de escala de nodos | Síncrona | Asíncrona |
| Selección de nodos para la reducción de escala | Aleatorio | Inteligente |
| Retiro de servicio ordenado y migración de ordenamiento aleatorio de Spark | No configurable | Configurable |
Propiedades de asignación dinámica de Spark
En la siguiente tabla, se enumeran las propiedades de 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 | Predeterminada |
|---|---|---|
spark.dataproc.scaling.version |
La versión del ajuste de escala automático de Spark de Serverless for Apache Spark. Especifica
versión 1 o 2 (consulta
Ajuste de escala automático de Serverless for Apache Spark V2). |
1 |
spark.dynamicAllocation.enabled |
Indica si se debe usar la asignación dinámica de recursos, que aumenta y disminuye la
cantidad de ejecutores según la carga de trabajo.
Si se establece el valor en false, se inhabilita el ajuste de escala automático
para la carga de trabajo. Valor predeterminado: true. |
true |
spark.dynamicAllocation.initialExecutors |
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 valor máximo es 2000. |
2 |
spark.dynamicAllocation.minExecutors |
La cantidad mínima de ejecutores a la que se debe reducir la escala de la carga de trabajo.
El valor mínimo es 2. |
2 |
spark.dynamicAllocation.maxExecutors |
La cantidad máxima de ejecutores a la que se debe aumentar la escala de la carga de trabajo.
El valor máximo es 2000. |
1000 |
spark.dynamicAllocation.executorAllocationRatio |
Personaliza el aumento de escala de la carga de trabajo de Spark. Acepta un valor de
0 a 1. Un valor de 1.0
proporciona la capacidad máxima de aumento de escala y ayuda a lograr el
paralelismo máximo. Un valor de 0.5 establece la capacidad de aumento de escala y
el paralelismo en la mitad del valor máximo. |
0.3 |
spark.reducer.fetchMigratedShuffle.enabled |
Cuando se establece en true, permite recuperar la ubicación de salida de ordenamiento aleatorio del controlador de Spark después de que falla una recuperación de un ejecutor que se retiró debido a la asignación dinámica de Spark. Esto reduce
ExecutorDeadException errores causados por la migración de bloques de ordenamiento aleatorio
de ejecutores retirados a ejecutores activos y reduce los reintentos de etapa
causados por FetchFailedException
errores (consulta
FetchFailedException causada por
ExecutorDeadException).
Esta propiedad está disponible en las versiones del entorno de ejecución de Spark de Serverless for Apache Spark
1.1.12 y posteriores, y 2.0.20 y posteriores. |
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 dinámica de recursos de Spark (para obtener información adicional sobre las métricas de Spark, consulta Supervisión y generación de registros).
| Métrica | Descripción |
|---|---|
maximum-needed |
La cantidad máxima de ejecutores necesarios en la carga actual para satisfacer todas las tareas en ejecución y pendientes. |
running |
La cantidad de ejecutores en ejecución que ejecutan tareas. |
Problemas y soluciones de asignación dinámica de Spark
FetchFailedException causada por ExecutorDeadException
Causa: Cuando la asignación dinámica de Spark reduce la escala de un ejecutor, el archivo de ordenamiento aleatorio se migra a ejecutores activos. Sin embargo, dado que la tarea de reducción de Spark en un ejecutor recupera la salida de ordenamiento aleatorio de la ubicación establecida por el controlador de Spark cuando se inició la tarea de reducción, si se migra un archivo de ordenamiento aleatorio, el reductor puede seguir intentando recuperar la salida de ordenamiento aleatorio de un ejecutor retirado, lo que causa errores
ExecutorDeadExceptionyFetchFailedException.Solución: Habilita la recuperación de la ubicación de ordenamiento aleatorio estableciendo
spark.reducer.fetchMigratedShuffle.enabledentruecuando ejecutes tu carga de trabajo por lotes de Serverless for Apache Spark (consulta Establece propiedades de cargas de trabajo por lotes de Spark). Cuando esta propiedad está habilitada, la tarea de reducción recupera la ubicación de salida de ordenamiento aleatorio del controlador después de que falla una recuperación de un ejecutor retirado.