As regras personalizadas de auto scaling permitem que o EMR adicione ou remova nós de tarefa automaticamente em resposta a flutuações de carga de trabalho, mantendo os jobs em execução sem provisionar recursos em excesso.
Pré-requisitos
Antes de começar, verifique se você possui:
Um cluster DataLake, Dataflow, processamento analítico online (OLAP), DataServing ou personalizado
Um grupo de nós de tarefa com instâncias de pagamento conforme o uso ou preemptíveis no cluster. Para obter detalhes, consulte Criar um grupo de nós
Limitações
É possível adicionar até 10 tipos de instância do Elastic Compute Service (ECS) por grupo de nós. Durante o scale-out do cluster, o EMR tenta cada tipo de instância em ordem, começando pelo primeiro. Caso um tipo de instância esteja indisponível, o EMR utiliza o próximo tipo da lista como fallback.
Apenas clusters com o serviço YARN implantado oferecem suporte a regras de dimensionamento baseadas em carga.
Observações de uso
As regras de auto scaling são aplicadas por grupo de nós. Se nenhuma regra for configurada para um determinado grupo, ele nunca será dimensionado automaticamente.
O EMR localiza e lista automaticamente os tipos de instância ECS que correspondem às especificações definidas por você. Selecione pelo menos um tipo de instância na lista para permitir que o cluster realize o dimensionamento com base nesse tipo.
Quando várias regras estão configuradas e suas condições de acionamento são atendidas simultaneamente, o EMR as executa na seguinte ordem: 1. As regras de scale-out têm precedência sobre as regras de scale-in. 2. As regras baseadas em tempo e em carga são executadas na ordem em que são acionadas. 3. As regras baseadas em carga acionadas pela mesma métrica seguem a ordem de configuração.
Não defina regras de scale-out e scale-in para execução no mesmo horário. A sobreposição de horários pode causar conflitos que impedem a conclusão das operações de dimensionamento.
Escolher um tipo de dimensionamento
Antes de configurar as regras, identifique qual tipo de dimensionamento melhor se adapta à sua carga de trabalho:
|
Tipo de dimensionamento |
Quando usar |
Exemplo |
|
Dimensionamento baseado em tempo |
Cargas de trabalho seguem cronogramas previsíveis |
Adicionar nós às 08:00 e removê-los às 20:00 em dias úteis; reduzir um cluster de desenvolvimento após o horário comercial |
|
Dimensionamento baseado em carga |
Flutuações de carga de trabalho são imprevisíveis |
Picos no processamento de pedidos que variam conforme o horário do dia ou a demanda dos usuários |
Apenas clusters com YARN implantado oferecem suporte ao dimensionamento baseado em carga. Se o seu cluster não possuir o YARN, utilize o dimensionamento baseado em tempo.
Configurar regras de auto scaling
Método 1: Adicionar regras a um cluster existente
Faça logon no console do EMR.
Na barra de navegação superior, selecione uma região e um grupo de recursos.
Na página EMR on ECS, clique em Cluster ID/Name.
Clique em Auto Scaling.
Na seção Configure Auto Scaling Rule, clique em Configure Auto Scaling e, em seguida, clique em Custom Auto Scaling Rule. Na caixa de diálogo Modify Auto Scaling Rule, clique em Reconfigure.
Localize o grupo de nós desejado e clique em Edit na coluna Actions.
No painel Configure Auto Scaling, defina os parâmetros. Consulte Parâmetros de auto scaling.
Clique em Save And Apply. As atividades de scale-out serão acionadas para o grupo de nós quando as condições configuradas forem atendidas.
Método 2: Adicionar regras durante a criação de um cluster
Faça logon no console do EMR.
Na barra de navegação superior, selecione uma região e um grupo de recursos.
-
Clique em Create Cluster. Para obter detalhes, consulte Criar um cluster.
Adicione um grupo de nós de tarefa de pagamento conforme o uso antes de configurar as regras de auto scaling.
Na seção Cluster Scaling, clique em Custom Auto Scaling Rule. Localize o grupo de nós desejado e clique em Edit na coluna Actions.
No painel Configure Auto Scaling, defina os parâmetros. Consulte Parâmetros de auto scaling.
Clique em Save And Apply. Após a criação do cluster, as atividades de dimensionamento serão acionadas quando as condições configuradas forem atendidas.
Método 3: Configurar regras com o SDK
Chame as seguintes operações de API para configurar regras de auto scaling programaticamente:
|
Operação |
Descrição |
|
Criar um cluster com regras de auto scaling |
|
|
Criar um grupo de nós de tarefa com regras de auto scaling |
|
|
Configurar ou atualizar regras de auto scaling para um grupo de nós de tarefa existente |
O exemplo Java a seguir configura uma regra de scale-out baseada em carga usando PutAutoScalingPolicy.
Utilize um token do Security Token Service (STS) para inicializar o cliente de credenciais. Os tokens STS fornecem acesso de curta duração e são mais seguros do que credenciais de longo prazo. Para obter detalhes, consulte Gerenciar credenciais de acesso .
// This file is auto-generated, don't edit it. Thanks.
package com.aliyun.sample;
import com.aliyun.tea.*;
public class Sample {
/**
* description
Parâmetros de auto scaling
Limites de contagem de nós
Defina os limites superior e inferior para o número de nós no grupo de nós. Para modificar esses limites, clique em Modify Limit.
|
Parâmetro |
Descrição |
|
Maximum Number Of Instances |
O grupo de nós interrompe o scale-out ao atingir esta contagem. |
|
Minimum Number Of Instances |
O grupo de nós interrompe o scale-in ao atingir esta contagem. |
Parâmetros de dimensionamento baseado em tempo
Regras baseadas em tempo adicionam ou removem um número fixo de nós em horários agendados — diariamente, semanalmente ou mensalmente. Configure tanto as regras de scale-out quanto as de scale-in para gerenciar todo o ciclo de dimensionamento.
As regras de scale-out e scale-in não devem compartilhar o mesmo horário de execução.
A tabela a seguir descreve os parâmetros da regra de scale-out. As regras de scale-in utilizam os mesmos parâmetros.
|
Parâmetro |
Descrição |
|
Scale Out Type |
Selecione Scale Out by Time. |
|
Rule Name |
Um nome exclusivo para a regra dentro do cluster. |
|
Frequency |
Execute Repeatedly: aciona no mesmo horário todos os dias, semanas ou meses. Execute Only Once: aciona uma única vez no horário especificado. |
|
Execution Time |
O horário em que a regra é acionada. |
|
Rule Expiration Time |
A data após a qual a regra deixa de ser acionada. Disponível apenas quando Frequency está definido como Execute Repeatedly. |
|
Retry Time Range |
Duração das tentativas do EMR caso o dimensionamento falhe no horário agendado. Valores válidos: 0–3600 segundos. O EMR tenta novamente a cada 30 segundos dentro desta janela. Por exemplo, se outra operação de dimensionamento estiver em execução ou em período de resfriamento (cooldown) no horário agendado, o EMR continuará tentando até que a janela expire ou as condições sejam atendidas. |
|
Nodes For Each Scale Out |
Quantidade de nós a serem adicionados cada vez que a regra for acionada. |
|
Best-effort Delivery |
Quando ativado, o EMR entrega todos os nós provisionados com sucesso, mesmo que a quantidade total solicitada não esteja disponível. Por exemplo, se você solicitar 100 nós e apenas 90 estiverem disponíveis, o EMR entregará 90 em vez de falhar toda a operação. Ative esta opção para maximizar o sucesso do scale-out. |
Parâmetros de dimensionamento baseado em carga
O dimensionamento baseado em carga requer o serviço YARN.
Regras baseadas em carga são acionadas quando as métricas de recursos do YARN ultrapassam um limiar. Isso permite que o cluster responda à pressão real da carga de trabalho, em vez de seguir um cronograma fixo.
A tabela a seguir descreve os parâmetros da regra de scale-out. As regras de scale-in utilizam os mesmos parâmetros.
|
Parâmetro |
Descrição |
|
Scale Out Type |
Selecione Scale Out by Load. |
|
Rule Name |
Um nome exclusivo para a regra dentro do cluster. |
|
Load Metric-based Trigger Conditions |
Selecione pelo menos uma métrica de carga do YARN e configure seu limiar. Clique em Add Metric para adicionar várias métricas. Para ver as métricas disponíveis, consulte Métricas de carga do YARN. |
|
Multi-metric Relationship |
All Metrics Meet the Conditions: todas as métricas selecionadas devem ultrapassar seus limiares para acionar a regra. Any Metric Meets the Condition: qualquer métrica individual que ultrapasse seu limiar aciona a regra. |
|
Statistical Period |
Janela de avaliação para cada métrica. O EMR coleta dados, agrega-os (média, máximo ou mínimo) e compara o resultado com o limiar. Um período mais curto torna a regra mais sensível a picos. |
|
Repetitions That Trigger Scale Out |
Número de períodos de avaliação consecutivos nos quais a métrica deve ultrapassar o limiar antes que a regra seja acionada. |
|
Nodes For Each Scale Out |
Quantidade de nós a serem adicionados cada vez que a regra for acionada. |
|
Best-effort Delivery |
Quando ativado, o EMR entrega todos os nós provisionados com sucesso, mesmo que a quantidade total solicitada não esteja disponível. Decida com base na aceitabilidade de um scale-out parcial para sua carga de trabalho. |
|
Cooldown Time |
Intervalo mínimo entre duas atividades consecutivas de scale-out. Durante o cooldown, as condições de scale-out são monitoradas, mas nenhuma ação é tomada. Após o término do cooldown, a próxima violação do limiar aciona um novo scale-out. |
|
Effective Time Period |
Janela de tempo em que a regra permanece ativa. Fora dessa janela, a regra não é acionada, mesmo que as condições sejam atendidas. Deixe em branco para manter a regra ativa 24 horas por dia. |
Descrições das métricas de auto scaling do EMR correspondentes às métricas de carga do YARN
Para métricas relacionadas a filas,queue_nameespecifica o nome da fila. O valor padrão éroot. Especifique um nome de fila personalizado conforme necessário.
Para métricas relacionadas a partições, partition_name especifica o nome da partição. Este campo não pode ficar em branco.
| Métrica de auto scaling do EMR | Serviço | Descrição |
|---|---|---|
| yarn_resourcemanager_queue_AvailableVCores | YARN | Número de núcleos virtuais de CPU disponíveis para a fila especificada. |
| yarn_resourcemanager_queue_PendingVCores | YARN | Número de núcleos virtuais de CPU pendentes para a fila especificada. |
| yarn_resourcemanager_queue_AllocatedVCores | YARN | Número de núcleos virtuais de CPU alocados para a fila especificada. |
| yarn_resourcemanager_queue_ReservedVCores | YARN | Número de núcleos virtuais de CPU reservados para a fila especificada. |
| yarn_resourcemanager_queue_AvailableMB | YARN | Quantidade de memória disponível para a fila especificada. |
| yarn_resourcemanager_queue_PendingMB | YARN | Quantidade de memória pendente para a fila especificada. |
| yarn_resourcemanager_queue_AllocatedMB | YARN | Quantidade de memória alocada para a fila especificada. |
| yarn_resourcemanager_queue_ReservedMB | YARN | Quantidade de memória reservada para a fila especificada. |
| yarn_resourcemanager_queue_AppsRunning | YARN | Número de jobs em execução na fila especificada. |
| yarn_resourcemanager_queue_AppsPending | YARN | Número de jobs suspensos na fila especificada. |
| yarn_resourcemanager_queue_AppsKilled | YARN | Número de jobs interrompidos na fila especificada. |
| yarn_resourcemanager_queue_AppsFailed | YARN | Número de jobs com falha na fila especificada. |
| yarn_resourcemanager_queue_AppsCompleted | YARN | Número de jobs concluídos na fila especificada. |
| yarn_resourcemanager_queue_AppsSubmitted | YARN | Número de jobs enviados na fila especificada. |
| yarn_resourcemanager_queue_AllocatedContainers | YARN | Número de contêineres alocados na fila especificada. |
| yarn_resourcemanager_queue_PendingContainers | YARN | Número de contêineres pendentes na fila especificada. |
| yarn_resourcemanager_queue_ReservedContainers | YARN | Número de contêineres reservados na fila especificada. |
| yarn_resourcemanager_queue_AvailableMBPercentage | YARN | Porcentagem de memória disponível na fila especificada. Calculado como: AvailableMemory / Total Memory. Nota Disponível para EMR V3.43.0, V5.9.0 e versões menores posteriores. |
| yarn_resourcemanager_queue_PendingContainersRatio | YARN | Proporção de contêineres pendentes em relação aos contêineres alocados na fila especificada. Calculado como: PendingContainers / AllocatedContainers. Nota Disponível para EMR V3.43.0, V5.9.0 e versões menores posteriores. |
| yarn_resourcemanager_queue_AvailableVCoresPercentage | YARN | Porcentagem de núcleos de CPU disponíveis na fila especificada. Calculado como: AvailableVCores / (ReservedVCores + AvailableVCores + AllocatedVCores) * 100. Nota Disponível para EMR V3.43.0, V5.9.0 e versões menores posteriores. |
| yarn_cluster_numContainersByPartition | YARN | Número de contêineres para a partição especificada. Nota Disponível para EMR V3.44.0, V5.10.0 e versões menores posteriores. |
| yarn_cluster_usedMemoryMBByPartition | YARN | Quantidade de memória utilizada para a partição especificada. Nota Disponível para EMR V3.44.0, V5.10.0 e versões menores posteriores. |
| yarn_cluster_availMemoryMBByPartition | YARN | Quantidade de memória disponível para a partição especificada. Nota Disponível para EMR V3.44.0, V5.10.0 e versões menores posteriores. |
| yarn_cluster_usedVirtualCoresByPartition | YARN | Número de núcleos de CPU utilizados para a partição especificada. Nota Disponível para EMR V3.44.0, V5.10.0 e versões menores posteriores. |
| yarn_cluster_availableVirtualCoresByPartition | YARN | Número de núcleos de CPU disponíveis para a partição especificada. Nota Disponível para EMR V3.44.0, V5.10.0 e versões menores posteriores. |
Solução de problemas
O scale-out falha ou tem sucesso apenas parcial
As falhas de scale-out geralmente têm duas causas:
Escassez de recursos ECS: O tipo de instância solicitado possui estoque insuficiente na zona selecionada. A disponibilidade de recursos ECS é dinâmica e pode se esgotar temporariamente durante períodos de alta demanda.
Apenas um tipo de instância configurado: Se somente um tipo de instância estiver definido para o grupo de nós e esse tipo se esgotar, toda a solicitação de scale-out falhará.
Para melhorar a confiabilidade do scale-out:
Enable Best-effort Delivery: Quando apenas algumas das instâncias solicitadas estiverem disponíveis, o EMR entregará essas instâncias em vez de falhar toda a operação.
Configurar vários tipos de instância: Adicione até 10 tipos de instância ao grupo de nós de tarefa. O EMR tenta cada tipo em ordem — se o primeiro estiver indisponível, ele usa o próximo como fallback. Para obter detalhes sobre como adicionar tipos de instância, consulte Criar um grupo de nós.
Próximos passos
Para monitorar a atividade de dimensionamento, verifique a aba Auto Scaling do seu cluster.
Para criar ou modificar o grupo de nós de tarefa onde as regras são aplicadas, consulte Criar um grupo de nós.
Para gerenciar políticas de auto scaling programaticamente, consulte PutAutoScalingPolicy.