Este documento fornece informações sobre o escalonamento automático do Managed Service for Apache Spark. Ao enviar sua carga de trabalho do Spark, o Managed Service for Apache Spark pode escalonar dinamicamente os recursos da carga de trabalho, como o número de executores, para executar sua carga de trabalho de maneira eficiente. O escalonamento automático do Managed Service for Apache Spark é 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 do Managed Service for Apache Spark V2
O escalonamento automático do Managed Service for Apache Spark versão 2 (V2) adiciona recursos e melhorias à versão 1 (V1) padrão para ajudar você a gerenciar cargas de trabalho do Managed Service for Apache Spark, melhorar a performance 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 do V1 por uma redução assíncrona. Usando a redução assíncrona, o Managed Service for Apache Spark reduz os recursos da 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 que são reduzir escala vertical vertical lentamente não vão bloquear o aumento.
- Seleção inteligente de nós para redução de escala vertical: o escalonamento automático V2 substitui a seleção aleatória de nós do V1's 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 do nó e o tempo de inatividade.
- Comportamento configurável de desativação otimizada e migração de embaralhamento do Spark: o escalonamento automático V2 permite usar propriedades padrão do Spark para configurar a desativação otimizada e a migração de embaralhamento do Spark. Esse recurso pode ajudar você a manter a compatibilidade da migração com as propriedades personalizadas do Spark.
Recursos de escalonamento automático do Managed Service for Apache Spark
| Recurso | Escalonamento automático do Managed Service for Apache Spark V1 | Escalonamento automático do Managed Service for Apache Spark V2 |
| Redução de nós | Síncrona | Assíncrona |
| Seleção de nós para redução | Aleatória | Inteligente |
| Desativação otimizada e migração de embaralhamento 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 (consulte Como definir propriedades do Spark).
| Propriedade | Descrição | Padrão |
|---|---|---|
spark.dataproc.scaling.version |
A versão de escalonamento automático do Managed Service for Apache Spark. Especifique
a versão 1 ou 2 (consulte
Escalonamento automático do Managed Service for Apache Spark V2). |
1 |
spark.dynamicAllocation.enabled |
Se a alocação dinâmica de recursos, que aumenta e diminui o
número de executores com base na carga de trabalho, será usada.
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 para a carga de trabalho. Depois que a
carga de trabalho é iniciada, o escalonamento automático pode mudar o número de executores ativos.
O valor mínimo é 2 e o máximo é 2000. |
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 aumentar a carga de trabalho.
O valor máximo é 2000. |
1000 |
spark.dynamicAllocation.executorAllocationRatio |
Personaliza o aumento da carga de trabalho do Spark. Aceita um valor de
0 a 1. Um valor de 1.0
oferece capacidade máxima de aumento e ajuda a alcançar o
paralelismo máximo. Um valor de 0.5 define a capacidade de aumento 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 de embaralhamento do driver do Spark depois que uma busca falha em 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 ativos e reduz as novas tentativas de estágio
causadas por FetchFailedException
erros (consulte
FetchFailedException causada por
ExecutorDeadException).
Essa propriedade está disponível nas versões
do ambiente de execução do Spark
1.1.12 e posteriores e 2.0.20 e posteriores do Managed Service for Apache Spark. |
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 na carga atual para atender a todas as tarefas em execução e pendentes. |
running |
O número de executores em execução. |
Problemas e soluções de alocação dinâmica do Spark
FetchFailedException causada por ExecutorDeadException
Causa: quando a alocação dinâmica do Spark reduz um executor, o arquivo de embaralhamento é migrado para executores ativos. No entanto, como a tarefa do redutor do Spark em um executor busca a saída de embaralhamento do local definido pelo driver do Spark quando a tarefa do redutor foi iniciada, se um arquivo de embaralhamento for migrado, o redutor poderá continuar tentando buscar a saída de embaralhamento de um executor desativado, causando erros
ExecutorDeadExceptioneFetchFailedException.Solução: ative a busca de novo local de embaralhamento definindo o
spark.reducer.fetchMigratedShuffle.enabledcomotrueao executar a carga de trabalho em lote do Managed Service for Apache Spark (consulte Definir propriedades de carga de trabalho em lote do Spark). Quando essa propriedade está ativada, a tarefa do redutor busca novamente o local de saída de embaralhamento do driver depois que uma busca de um executor desativado falha.