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
eFetchFailedException
.Solução: ative a recuperação de localização de ordenação aleatória definindo
spark.reducer.fetchMigratedShuffle.enabled
comotrue
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.