Cuando envías tu carga de trabajo de Spark, Dataproc Serverless para Spark puede escalar dinámicamente los recursos de cargas de trabajo, como la cantidad de ejecutores, para ejecutar la carga de trabajo de manera eficiente. El ajuste de escala automático sin servidores de Dataproc es el comportamiento predeterminado y usa la asignación dinámica de recursos de Spark para determinar si escalar tu carga de trabajo, cómo y cuándo hacerlo.
Ajuste de escala automático sin servidores de Dataproc V2
La versión 2 (V2) del ajuste de escala automático sin servidores de Dataproc agrega funciones a la versión predeterminada 1 (V1) para ayudarte a administrar las cargas de trabajo de Dataproc Serverless, mejorar su rendimiento y ahorrar costos:
- Reducción de escala síncrona de nodos: el ajuste de escala automático V2 reemplaza el escalamiento descendente síncrona de V1 con un escalamiento descendente asíncrono Con el ajuste de escala vertical asíncrono, Dataproc Serverless reduce la escala de los recursos de las cargas de trabajo sin esperar a que todos los nodos terminen la migración aleatoria. Esto significa que los nodos de cola larga cuya escala se reduce lentamente no bloqueará el escalamiento vertical.
- Selección inteligente de nodos para reducir la escala verticalmente: el ajuste de escala automático V2 reemplaza la selección aleatoria de nodos de V1 con un algoritmo inteligente que identifica los mejores nodos para reducir la escala verticalmente primero. Este algoritmo tiene en cuenta factores como el tamaño de los datos de Shuffle y el tiempo de inactividad del nodo.
- Retiro de gracia configurable de Spark y comportamiento de migración aleatoria: el ajuste de escala automático V2 te permite usar las propiedades estándar de Spark para configurar el retiro de servicio ordenado y la migración aleatoria de Spark. Esta función puede ayudarte a mantener la compatibilidad de migración con tus propiedades personalizadas de Spark.
Funciones de ajuste de escala automático sin servidores de Dataproc
Atributo | Ajuste de escala automático sin servidores de Dataproc V1 | Ajuste de escala automático sin servidores de Dataproc V2 |
Escalamiento descendente de nodos | Síncrona | Asíncrona |
Selección de nodos para reducir la escala | Aleatorio | Inteligente |
Spark: retiro de servicio ordenado y migración aleatoria | 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 configurar cuando envías una carga de trabajo por lotes para controlar el ajuste de escala automático (consulta cómo configurar las propiedades de Spark).
Propiedad | Descripción | Predeterminado |
---|---|---|
spark.dataproc.scaling.version |
La versión de ajuste de escala automático de Dataproc Serverless Spark. Especifica la versión 1 o 2 (consulta Ajuste de escala automático sin servidores de Dataproc V2). |
1 |
spark.dynamicAllocation.enabled |
Indica si se debe usar la asignación dinámica de recursos, que aumenta o reduce la escala verticalmente
de 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
de 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 |
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 escala la carga de trabajo.
El valor máximo es 2000 . |
1000 |
spark.dynamicAllocation.executorAllocationRatio |
Personaliza el escalamiento vertical 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 escalamiento vertical y ayuda a lograr el paralelismo máximo. Un valor de 0.5 establece la capacidad de escalamiento vertical y el paralelismo a la mitad del valor máximo. |
0.3 |
spark.reducer.fetchMigratedShuffle.enabled |
Cuando se configura en true , permite recuperar la ubicación de salida de Shuffle desde el controlador de Spark después
de que falla una recuperación de un ejecutor que se retiró de servicio debido a la asignación dinámica de Spark. Esto reduce los errores ExecutorDeadException causados por la migración de bloques de Shuffle de ejecutores fuera de servicio a ejecutores activos y reduce los reintentos de etapa causados por errores FetchFailedException (consulta FetchFailedException causado por ExecutorDeadException).
Esta propiedad está disponible en las versiones del entorno de ejecución de Spark
1.1.12 y posteriores en Dataproc Serverless, y en 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 métricas que se enumeran a continuación relacionadas con la asignación dinámica de recursos de Spark (para obtener información adicional sobre las métricas de Spark, consulta Instrumentación y supervisión).
Métrica | Descripción |
---|---|
maximum-needed |
La cantidad máxima de ejecutores necesarios bajo la carga actual para satisfacer todas las tareas en ejecución y pendientes. |
running |
La cantidad de ejecutores en ejecución que ejecutan tareas. |
Spark problemas y soluciones de asignación dinámica
FetchFailedException causada por ExecutorDeadException
Causa: Cuando la asignación dinámica de Spark reduce la escala de un ejecutor, el archivo aleatorio se migra a ejecutores activos. Sin embargo, dado que la tarea del reductor de Spark en un ejecutor recupera los resultados aleatorios de la ubicación que establece el controlador de Spark cuando se inicia la tarea del reductor, si se migra un archivo de Shuffle, el reductor puede seguir intentando recuperar resultados aleatorios de un ejecutor fuera de servicio, lo que causa errores
ExecutorDeadException
yFetchFailedException
.Solución: Para habilitar la recuperación de ubicaciones aleatorias, configura
spark.reducer.fetchMigratedShuffle.enabled
comotrue
cuando ejecutes tu carga de trabajo por lotes de Dataproc Serverless para Spark (consulta Configura las 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 de Shuffle del controlador después de que falla la recuperación de un ejecutor de fuera de servicio.