Dataproc Serverless para el ajuste de escala automático de Spark

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 y FetchFailedException.

    Solución: Para habilitar la recuperación de ubicaciones aleatorias, configura spark.reducer.fetchMigratedShuffle.enabled como true 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.