Este documento fornece informações sobre a Google Cloud escala automática sem servidor para o Apache Spark. Quando envia a sua carga de trabalho do Spark, o Serverless para Apache Spark pode dimensionar dinamicamente os recursos da carga de trabalho, como o número de executores, para executar a carga de trabalho de forma eficiente. A escalabilidade automática sem servidor para o Apache Spark é o comportamento predefinido e usa a alocação dinâmica de recursos do Spark para determinar se, como e quando dimensionar a sua carga de trabalho.
Sem servidor para a escala automática do Apache Spark V2
A versão 2 (V2) do Serverless for Apache Spark com escalabilidade automática adiciona funcionalidades e melhorias à versão 1 (V1) predefinida para ajudar a gerir cargas de trabalho do Serverless for Apache Spark, melhorar o desempenho das cargas de trabalho e poupar custos:
- Redução de escala de nós assíncrona: a escalabilidade automática V2 substitui a redução de escala síncrona da V1 pela redução de escala assíncrona. Com a redução de escala assíncrona, o Serverless para Apache Spark reduz a escala dos recursos da carga de trabalho sem esperar que todos os nós terminem a migração aleatória. Isto significa que os nós de cauda longa que são reduzidos lentamente não bloqueiam o aumento da escala.
- Seleção inteligente de redução de nós: o dimensionamento 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 primeiro. Este algoritmo considera fatores como o tamanho dos dados de aleatorização e o tempo de inatividade do nó.
- Comportamento configurável de desativação e migração aleatória do Spark: O dimensionamento automático V2 permite-lhe usar propriedades padrão do Spark para configurar a desativação graciosa do Spark e a migração aleatória. Esta funcionalidade pode ajudar a manter a compatibilidade da migração com as suas propriedades do Spark personalizadas.
Funcionalidades de escala automática sem servidor para o Apache Spark
Funcionalidade | Escala automática do Apache Spark sem servidor V1 | Sem servidor para a escala automática do Apache Spark V2 |
Redução da escala de nós | Síncrono | Assíncrono |
Seleção de nós para redução da escala | Aleatório | Inteligente |
Desencadeie a desativação suave e a migração de ordenação aleatória do Spark | Não configurável | Configurável |
Propriedades de atribuição dinâmica do Spark
A tabela seguinte apresenta as propriedades de atribuição dinâmica do Spark que pode definir quando envia uma carga de trabalho em lote para controlar o dimensionamento automático (consulte como definir propriedades do Spark).
Propriedade | Descrição | Predefinição |
---|---|---|
spark.dataproc.scaling.version |
A versão de escala automática do Apache Spark sem servidor. Especifique a versão 1 ou 2 (consulte Escala automática sem servidor para o Apache Spark V2). |
1 |
spark.dynamicAllocation.enabled |
Se deve usar a atribuição dinâmica de recursos, que aumenta e diminui o número de executores com base na carga de trabalho.
Se definir o valor como false , desativa o ajuste de escala automático para a carga de trabalho. Predefinição: true . |
true |
spark.dynamicAllocation.initialExecutors |
O número inicial de executores atribuídos à carga de trabalho. Após o início da carga de trabalho, o dimensionamento automático pode alterar o número de executores ativos.
O valor mínimo é 2 e o valor 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 dimensionar a carga de trabalho.
O valor máximo é 2000 . |
1000 |
spark.dynamicAllocation.executorAllocationRatio |
Personaliza o aumento da escala da carga de trabalho do Spark. Aceita um valor de
0 a 1 . Um valor de 1.0
oferece a capacidade de expansão máxima e ajuda a alcançar o paralelismo
máximo. Um valor de 0.5 define a capacidade de expansão e o paralelismo a metade do valor máximo. |
0.3 |
spark.reducer.fetchMigratedShuffle.enabled |
Quando definido como true , permite obter a localização do resultado da aleatorização do controlador do Spark depois de uma obtenção falhar a partir de um executor que foi desativado devido à atribuição dinâmica do Spark. Isto reduz os erros ExecutorDeadException causados pela migração do bloco aleatório de executores desativados para executores ativos e reduz as novas tentativas de fases causadas por erros FetchFailedException (consulte FetchFailedException causado por ExecutorDeadException).
Esta propriedade está disponível no Serverless para Apache Spark
versões do tempo de execução do Spark
1.1.12 e posteriores e 2.0.20 e posteriores. |
false |
Métricas de atribuição dinâmica do Spark
As cargas de trabalho em lote do Spark geram as seguintes métricas relacionadas com a atribuição dinâmica de recursos do Spark (para mais informações sobre as métricas do Spark, consulte Monitorização 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 atribuição dinâmica do Spark
FetchFailedException causado por ExecutorDeadException
Causa: quando a atribuição dinâmica do Spark reduz a escala de um executor, o ficheiro de mistura é migrado para executores ativos. No entanto, uma vez que a tarefa de redução do Spark num executor obtém a saída de mistura aleatória da localização definida pelo controlador do Spark quando a tarefa de redução foi iniciada, se um ficheiro de mistura aleatória for migrado, o redutor pode continuar a tentar obter a saída de mistura aleatória de um executor desativado, o que causa erros
ExecutorDeadException
eFetchFailedException
.Solução: ative a nova obtenção aleatória da localização definindo
spark.reducer.fetchMigratedShuffle.enabled
comotrue
quando executar a carga de trabalho em lote sem servidor para o Apache Spark (consulte Definir propriedades da carga de trabalho em lote do Spark). Quando esta propriedade está ativada, a tarefa do redutor volta a obter a localização da saída da mistura aleatória do controlador depois de uma obtenção de um executor desativado falhar.