Dataproc sem servidor para escalonamento automático do Spark

Este documento contém informações sobre o escalonamento automático do Dataproc sem servidor para Spark. Quando você envia sua carga de trabalho do Spark, o Dataproc Serverless para Spark pode escalonar dinamicamente os recursos da carga de trabalho, como o número de executores, para executar a carga de trabalho de maneira eficiente. O escalonamento automático do Dataproc Serverless é o comportamento padrão e usa a alocação dinâmica de recursos do Spark para determinar se, como e quando escalonar a carga de trabalho.

Escalonamento automático do Dataproc sem servidor V2

O escalonamento automático sem servidor do Dataproc versão 2 (V2) adiciona recursos e melhorias à versão 1 (V1) padrão para ajudar você a gerenciar cargas de trabalho sem servidor do Dataproc, melhorar o desempenho da carga de trabalho e economizar custos:

  • Redução assíncrona de nós: o escalonamento automático V2 substitui a redução síncrona da V1 por uma assíncrona. Usando a redução de escala assíncrona, o Dataproc sem servidor reduz os recursos de carga de trabalho sem esperar que todos os nós concluam a migração de shuffle. Isso significa que os nós de cauda longa que são reduzir escala vertical lentamente não bloqueiam o aumento de escala.
  • Seleção inteligente de redução de escala de nó: o escalonamento automático V2 substitui a seleção aleatória de nós do V1 por um algoritmo inteligente que identifica os melhores nós para reduzir escala vertical de escala primeiro. Esse algoritmo considera fatores como o tamanho dos dados de shuffle do nó e o tempo de inatividade.
  • Comportamento de desativação e migração de baralho configurável do Spark: o escalonamento automático V2 permite usar propriedades padrão do Spark para configurar a desativação gradual do Spark e a migração de baralho. Esse recurso pode ajudar a manter a compatibilidade da migração com suas propriedades personalizadas do Spark.

Recursos de escalonamento automático sem servidor do Dataproc

Recurso Escalonamento automático sem servidor do Dataproc V1 Escalonamento automático sem servidor do Dataproc V2
Redução de escala de nós Síncrona Assíncrono
Seleção de nós para redução de escala Aleatório Inteligente
Desativação otimizada do Spark e migração de baralho Não configurável Configurável

Propriedades de alocação dinâmica do Spark

A tabela a seguir lista as propriedades da alocação dinâmica do Spark que podem ser definidas ao enviar uma carga de trabalho em lote para controlar o escalonamento automático. Consulte como definir propriedades do Spark.

Propriedade Descrição Padrão
spark.dataproc.scaling.version A versão do escalonamento automático do Dataproc Serverless para Spark. Especifique a versão 1 ou 2 (consulte Escalonamento automático sem servidor do Dataproc V2). 1
spark.dynamicAllocation.enabled Se a alocação dinâmica de recursos será usada, o que aumenta e diminui o número de executores com base na carga de trabalho. Definir o valor como false desativa o escalonamento automático para a carga de trabalho. Padrão: true. true
spark.dynamicAllocation.initialExecutors O número inicial de executores alocados à carga de trabalho. Depois que a carga de trabalho começar, o escalonamento automático poderá mudar o número de executores ativos. O valor mínimo é 2, e o máximo é 500. 2
spark.dynamicAllocation.minExecutors O número mínimo de executores para reduzir a carga de trabalho. O valor mínimo é 2. 2
spark.dynamicAllocation.maxExecutors O número máximo de executores para dimensionar a carga de trabalho. O valor máximo é 2000. 1000
spark.dynamicAllocation.executorAllocationRatio Personaliza o escalonamento da carga de trabalho do Spark. Aceita um valor de 0 a 1. Um valor de 1.0 oferece capacidade máxima de escalonamento e ajuda a alcançar o paralelismo máximo. Um valor de 0.5 define o recurso de escalonamento e o paralelismo em metade do valor máximo. 0.3
spark.reducer.fetchMigratedShuffle.enabled Quando definido como true, permite buscar o local de saída do shuffle do driver do Spark depois que uma busca falha em um executor que foi desativado devido à alocação dinâmica do Spark. Isso reduz os erros ExecutorDeadException causados pela migração de blocos de shuffle de executores desativados para executores ativos e reduz as tentativas de repetição de estágio causadas por erros FetchFailedException. Consulte FetchFailedException causado por ExecutorDeadException. Essa propriedade está disponível no Dataproc sem servidor nas versões do ambiente de execução do Spark 1.1.12 e mais recentes e 2.0.20 e mais recentes. false

Métricas de alocação dinâmica do Spark

As cargas de trabalho em lote do Spark geram as seguintes métricas relacionadas à alocação dinâmica de recursos do Spark. Para mais informações sobre as métricas do Spark, consulte Monitoramento e instrumentação.

Métrica Descrição
maximum-needed O número máximo de executores necessários sob a carga atual para atender a todas as tarefas em execução e pendentes.
running O número de executores em execução que estão executando tarefas.

Problemas e soluções de alocação dinâmica do Spark

  • FetchFailedException causado por ExecutorDeadException

    Causa: quando a alocação dinâmica do Spark reduz um executor, o arquivo de ordenação é migrado para executores ativos. No entanto, como a tarefa do redutor do Spark em um executor busca a saída de shuffle do local definido pelo driver do Spark quando a tarefa do redutor é iniciada, se um arquivo de shuffle for migrado, o redutor poderá continuar tentando buscar a saída de shuffle de um executor desativado, causando erros ExecutorDeadException e FetchFailedException.

    Solução: ative a recuperação de localização de ordenação aleatória definindo spark.reducer.fetchMigratedShuffle.enabled como true ao executar a carga de trabalho em lote do Dataproc Serverless para Spark. Consulte Definir propriedades de carga de trabalho em lote do Spark. Quando essa propriedade está ativada, a tarefa do redutor recupera o local de saída da mistura do driver depois que uma busca de um executor desativado falha.