Escalonamento automático do Managed Service for Apache Spark

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 ExecutorDeadException e FetchFailedException.

    Solução: ative a busca de novo local de embaralhamento definindo o spark.reducer.fetchMigratedShuffle.enabled como true ao 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.