Dimensionar automaticamente os pools do Apache Spark do Azure Synapse Analytics
A funcionalidade de Dimensionamento Automático do conjunto do Apache Spark para o Azure Synapse Analytics aumenta e reduz verticalmente de forma automática o número de nós numa instância de cluster. Durante a criação de um novo pool do Apache Spark for Azure Synapse Analytics, um número mínimo e máximo de nós, até 200 nós, pode ser definido quando o Autoscale é selecionado. O Dimensionamento Automático monitoriza os requisitos de recursos da carga e aumenta e reduz verticalmente o número de nós. Não existe nenhum encargo adicional para esta funcionalidade.
Monitoramento de métricas
O dimensionamento automático monitora continuamente a instância do Spark e coleta as seguintes métricas:
Métrico | Description |
---|---|
Total de CPU pendente | O número total de núcleos necessários para iniciar a execução de todos os trabalhos pendentes. |
Total de memória pendente | A memória total (em MB) necessária para iniciar a execução de todos os trabalhos pendentes. |
CPU livre total | A soma de todos os núcleos não utilizados nos nós ativos. |
Memória livre total | A soma da memória não utilizada (em MB) nos nós ativos. |
Memória usada por nó | A carga em um nó. Um nó no qual 10 GB de memória é usado, é considerado sob mais carga do que um trabalhador com 2 GB de memória usada. |
As métricas acima são verificadas a cada 30 segundos. O dimensionamento automático toma decisões de aumento e redução de escala com base nessas métricas.
Condições de escala baseadas em carga
Quando as seguintes condições forem detetadas, o Autoscale emitirá uma solicitação de escala:
Aumento vertical | Redução de escala |
---|---|
O total de CPU pendente é maior do que o total de CPU livre por mais de 1 minuto. | O total de CPU pendente é inferior ao total de CPU livre por mais de 2 minutos. |
O total de memória pendente é maior do que o total de memória livre por mais de 1 minuto. | A memória total pendente é inferior à memória livre total por mais de 2 minutos. |
Para escalonamento, o serviço Azure Synapse Autoscale calcula quantos novos nós são necessários para atender aos requisitos atuais de CPU e memória e, em seguida, emite uma solicitação de expansão para adicionar o número necessário de nós.
Para redução de escala, com base no número de executores, mestres de aplicativos por nó, os requisitos atuais de CPU e memória, o Autoscale emite uma solicitação para remover um determinado número de nós. O serviço também deteta quais nós são candidatos para remoção com base na execução atual do trabalho. A operação de redução de escala primeiro descomissiona os nós e, em seguida, os remove do cluster.
Nota
Uma observação sobre como atualizar e forçar a aplicação da configuração de dimensionamento automático a um pool do Spark existente. Se Forçar nova configuração no portal do Azure ou ForceApplySetting
no PowerShell estiver habilitado, todas as sessões do Spark existentes serão encerradas e as alterações de configuração serão aplicadas imediatamente. Se essa opção não for selecionada, a configuração será aplicada às novas sessões do Spark e as sessões existentes não serão encerradas.
Começar agora
Crie um pool do Apache Spark sem servidor com Autoscaling
Para habilitar o recurso Dimensionamento automático, conclua as seguintes etapas como parte do processo normal de criação do pool:
Na guia Noções básicas, marque a caixa de seleção Habilitar dimensionamento automático.
Insira os valores desejados para as seguintes propriedades:
- Número mínimo de nós.
- Número máximo de nós.
O número inicial de nós será o mínimo. Esse valor define o tamanho inicial da instância quando ela é criada. O número mínimo de nós não pode ser inferior a três.
Opcionalmente, você pode habilitar a alocação dinâmica de executores em cenários em que os requisitos do executor são muito diferentes entre os estágios de um Spark Job ou o volume de dados processados flutua com o tempo. Ao habilitar a Alocação Dinâmica de Executores, podemos utilizar a capacidade conforme necessário.
Ao habilitar a alocação dinâmica, ele permite que o trabalho dimensione o número de executores dentro do número mínimo e máximo de executores especificados.
Apache Spark permite a configuração de alocação dinâmica de executores através de código como abaixo:
%%configure -f
{
"conf" : {
"spark.dynamicAllocation.maxExecutors" : "6",
"spark.dynamicAllocation.enabled": "true",
"spark.dynamicAllocation.minExecutors": "2"
}
}
Os padrões especificados através do código substituem os valores definidos através da interface do usuário.
Neste exemplo, se o seu trabalho requer apenas 2 executores, ele usará apenas 2 executores. Quando o trabalho requer mais, ele será dimensionado para até 6 executores (1 driver, 6 executores). Quando o trabalho não precisa dos executores, então ele descomissionará os executores. Se ele não precisar do nó, ele liberará o nó.
Nota
O maxExecutors reservará o número de executores configurados. Considerando o exemplo, mesmo que você use apenas 2, ele reservará 6.
Assim, ao habilitar a alocação dinâmica, os executores aumentam ou diminuem a escala com base na utilização dos executores. Isso garante que os Executores sejam provisionados de acordo com as necessidades do trabalho que está sendo executado.
Melhores práticas
Considere a latência das operações de aumento ou redução de escala
Pode levar de 1 a 5 minutos para que uma operação de dimensionamento seja concluída.
Prepare-se para reduzir a escala
Durante o processo de redução da instância, o Autoscale colocará os nós em estado de descomissionamento para que nenhum novo executor possa ser iniciado nesse nó.
Os trabalhos em execução continuarão a ser executados e concluídos. Os trabalhos pendentes aguardarão para serem agendados normalmente, com menos nós disponíveis.
Nota
Por padrão, spark.yarn.executor.decommission.enabled é definido como true, permitindo o desligamento automático de nós subutilizados para otimizar a eficiência de computação. Se for preferível reduzir a escala menos agressiva, essa configuração pode ser definida como false.
Próximos passos
Guia de início rápido para configurar um novo pool do Spark Criar um pool do Spark