En este documento se proporciona información sobre el Google Cloud autoescalado de Serverless para Apache Spark. Cuando envías tu carga de trabajo de Spark, Serverless para Apache Spark puede escalar dinámicamente los recursos de la carga de trabajo, como el número de ejecutores, para ejecutarla de forma eficiente. El autoescalado de la opción sin servidor para Apache Spark es el comportamiento predeterminado y usa la asignación dinámica de recursos de Spark para determinar si, cómo y cuándo escalar tu carga de trabajo.
Autoescalado de Apache Spark sin servidor V2
La versión 2 (V2) del autoescalado de Serverless para Apache Spark añade funciones y mejoras a la versión 1 (V1) predeterminada para ayudarte a gestionar las cargas de trabajo de Serverless para Apache Spark, mejorar el rendimiento de las cargas de trabajo y ahorrar costes:
- Reducción de escala asíncrona de nodos: Autoscaling V2 sustituye la reducción de escala síncrona de V1 por una asíncrona. Con la reducción de escala asíncrona, Serverless para Apache Spark reduce los recursos de la carga de trabajo sin esperar a que todos los nodos finalicen la migración aleatoria. Esto significa que los nodos de cola larga que se reducen lentamente no bloquearán el aumento de escala.
- Selección de nodos con escalado inteligente: el escalado automático V2 sustituye la selección aleatoria de nodos de la versión V1 por un algoritmo inteligente que identifica los mejores nodos para reducir el escalado primero. Este algoritmo tiene en cuenta factores como el tamaño de los datos aleatorios y el tiempo de inactividad del nodo.
- Comportamiento configurable de la retirada gradual de Spark y de la migración aleatoria: Autoscaling V2 te permite usar propiedades estándar de Spark para configurar la retirada gradual de Spark y la migración aleatoria. Esta función puede ayudarte a mantener la compatibilidad de la migración con tus propiedades de Spark personalizadas.
Funciones de autoescalado de Apache Spark sin servidor
Función | Autoscaling V1 de Serverless para Apache Spark | Autoscaling V2 de Apache Spark sin servidor |
Reducción de los nodos | Síncrona | Asíncrono |
Selección de nodos para reducir la escala | Aleatoria | Inteligente |
Retirada suave de Spark y migración de shuffle | No se pueden configurar. | Se pueden configurar. |
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 definir al enviar una carga de trabajo por lotes para controlar el escalado automático (consulta cómo definir propiedades de Spark).
Propiedad | Descripción | Predeterminado |
---|---|---|
spark.dataproc.scaling.version |
La versión de autoescalado de Spark de Serverless para Apache Spark. Especifica la versión 1 o 2 (consulta Autoescalado de Serverless para Apache Spark V2). |
1 |
spark.dynamicAllocation.enabled |
Indica si se debe usar la asignación dinámica de recursos, que aumenta y reduce el número de ejecutores en función de la carga de trabajo.
Si se asigna el valor false , se inhabilita el escalado automático de la carga de trabajo. Valor predeterminado: true . |
true |
spark.dynamicAllocation.initialExecutors |
Número inicial de ejecutores asignados a la carga de trabajo. Una vez que se inicia la carga de trabajo, el escalado automático puede cambiar el número de ejecutores activos.
El valor mínimo es 2 y el máximo es 2000 . |
2 |
spark.dynamicAllocation.minExecutors |
Número mínimo de ejecutores al que se debe reducir la carga de trabajo.
El valor mínimo es 2 . |
2 |
spark.dynamicAllocation.maxExecutors |
Número máximo de ejecutores al que se puede escalar la carga de trabajo.
El valor máximo es 2000 . |
1000 |
spark.dynamicAllocation.executorAllocationRatio |
Personaliza el escalado vertical de la carga de trabajo de Spark. Acepta un valor de
0 a 1 . El valor 1.0
proporciona la máxima capacidad de ampliación y ayuda a conseguir el máximo
paralelismo. El valor 0.5 define la capacidad de ampliación y el paralelismo en la mitad del valor máximo. |
0.3 |
spark.reducer.fetchMigratedShuffle.enabled |
Si se define como true , se habilita la obtención de la ubicación de salida aleatoria del controlador de Spark después de que se produzca un error en la obtención de un ejecutor que se haya retirado debido a la asignación dinámica de Spark. De esta forma, se reducen los errores ExecutorDeadException causados por la migración de bloques aleatorios de ejecutores retirados a ejecutores activos, así como los reintentos de fases causados por errores FetchFailedException (consulta FetchFailedException caused by ExecutorDeadException).
Esta propiedad está disponible en las versiones del tiempo de ejecución de Spark
1.1.12 y posteriores, y 2.0.20 y posteriores de Serverless para Apache Spark. |
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 más información sobre las métricas de Spark, consulta Monitorización e instrumentación).
Métrica | Descripción |
---|---|
maximum-needed |
El número máximo de ejecutores necesarios con la carga actual para satisfacer todas las tareas en curso y pendientes. |
running |
Número de ejecutores que están ejecutando tareas. |
Problemas y soluciones de la 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 aleatorización se migra a ejecutores activos. Sin embargo, como la tarea de reducción de Spark de un ejecutor obtiene la salida de la mezcla de la ubicación definida por el controlador de Spark cuando se inicia la tarea de reducción, si se migra un archivo de mezcla, el reductor puede seguir intentando obtener la salida de la mezcla de un ejecutor retirado, lo que provoca errores
ExecutorDeadException
yFetchFailedException
.Solución: habilita la recuperación de la ubicación aleatoria configurando
spark.reducer.fetchMigratedShuffle.enabled
entrue
cuando ejecutes tu carga de trabajo por lotes de Serverless para Apache Spark (consulta Definir propiedades de cargas de trabajo por lotes de Spark). Cuando esta propiedad está habilitada, la tarea de reducción vuelve a obtener la ubicación de salida aleatoria del controlador después de que falle una obtención de un ejecutor retirado.