Quando você envia sua carga de trabalho do Spark, o Dataproc sem servidor para Spark pode escalonar dinamicamente os recursos de carga de trabalho, como o número de executores, para executá-la de maneira eficiente. O escalonamento automático sem servidor do Dataproc é o comportamento padrão e usa a alocação dinâmica de recursos do Spark para determinar se, como e quando escalonar sua carga de trabalho.
Escalonamento automático sem servidor do Dataproc V2
A versão 2 (V2) do escalonamento automático sem servidor do Dataproc adiciona recursos e melhorias à versão padrão 1 (V1) para ajudar você a gerenciar cargas de trabalho sem servidor do Dataproc, melhorar o desempenho delas e economizar custos:
- Redução assíncrona de nós: o escalonamento automático V2 substitui a redução síncrona da V1 pela redução assíncrona. Usando a redução 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 embaralhamento. Isso significa que os nós de cauda longa com reduzir escala vertical lenta não bloquearão o escalonamento vertical.
- Seleção inteligente de nós com escalonamento vertical: o escalonamento automático V2 substitui a seleção aleatória de nós da V1 por um algoritmo inteligente que identifica os melhores nós para reduzir escala vertical primeiro. Esse algoritmo considera fatores como o tamanho dos dados de embaralhamento e o tempo de inatividade do nó.
- Comportamento configurável de desativação de ativação e migração aleatória do Spark: o escalonamento automático V2 permite que você use propriedades padrão do Spark para configurar a desativação otimizada e a migração aleatória do Spark. Esse recurso pode ajudar você a manter a compatibilidade da migração com suas propriedades personalizadas do Spark.
Recursos de escalonamento automático sem servidor do Dataproc
Engenharia de | Escalonamento automático sem servidor do Dataproc V1 | Escalonamento automático sem servidor do Dataproc V2 |
Redução de escalonamento de nós | Síncrona | Assíncrona |
Seleção de nós para redução de escalonamento | Aleatória | Inteligente |
Desativação otimizada e migração aleatória do Spark | Não configurável | Configurável |
Propriedades de alocação dinâmica do Spark
A tabela a seguir lista as propriedades de alocação dinâmica do Spark que podem ser definidas ao enviar uma carga de trabalho em lote para controlar o escalonamento automático. Saiba como definir as propriedades do Spark.
Propriedade | Descrição | Padrão |
---|---|---|
spark.dataproc.scaling.version |
A versão de escalonamento automático do Spark sem servidor do Dataproc. Especifique
a versão 1 ou 2 . Consulte
Escalonamento automático sem servidor do Dataproc V2. |
1 |
spark.dynamicAllocation.enabled |
Indica se é necessário usar a alocação dinâmica de recursos, que escalona verticalmente o
número de executores com base na carga de trabalho.
Definir o valor como false desativa o escalonamento automático
da carga de trabalho. Padrão: true . |
true |
spark.dynamicAllocation.initialExecutors |
O número inicial de executores alocados à carga de trabalho. Após o início da
carga de trabalho, o escalonamento automático pode alterar 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 escalonar a carga de trabalho.
O valor máximo é 2000 . |
1000 |
spark.dynamicAllocation.executorAllocationRatio |
Personaliza o escalonamento vertical da carga de trabalho do Spark. Aceita um valor de
0 a 1 . Um valor de 1.0 fornece a capacidade máxima de escalonamento vertical e ajuda a atingir o paralelismo máximo. Um valor de 0.5 define o recurso de escalonamento vertical e o paralelismo como a metade do valor máximo. |
0.3 |
spark.reducer.fetchMigratedShuffle.enabled |
Quando definido como true , permite a busca do local de saída do embaralhamento no driver do Spark depois que uma busca falha de um executor desativado devido à alocação dinâmica do Spark. Isso reduz ExecutorDeadException erros causados pela migração de blocos de embaralhamento de executores desativados para executores em tempo real, além de reduzir novas tentativas de estágio causadas por FetchFailedException erros. Consulte FetchFailedException causado por ExecutorDeadException.
Essa propriedade está disponível nas versões de ambiente de execução do Spark sem servidor do Dataproc 1.1.12 e posteriores e 2.0.20 e posteriores. |
false |
Métricas de alocação dinâmica do Spark
As cargas de trabalho em lote do Spark geram as métricas listadas abaixo 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 satisfazer todas as tarefas em execução e pendentes. |
running |
O número de executores em execução que executam 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 embaralhamento é migrado para os executores em tempo real. No entanto, como a tarefa do redutor do Spark em um executor busca a saída embaralhada do local definido pelo driver do Spark quando a tarefa do redutor é iniciada, se um arquivo de embaralhamento for migrado, o redutor poderá continuar tentando buscar a saída do embaralhamento de um executor desativado, causando erros
ExecutorDeadException
eFetchFailedException
.Solução: ative a nova busca de local de embaralhamento definindo
spark.reducer.fetchMigratedShuffle.enabled
comotrue
ao executar a carga de trabalho em lote do Dataproc sem servidor 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 do embaralhamento do driver após a falha de uma busca de um executor desativado.