Todos os produtos
Search
Central de documentação

E-MapReduce:crie uma política de auto scaling personalizada

Última atualização: Sep 21, 2026

Se as cargas de trabalho do seu negócio flutuam e você compreende os padrões dessas cargas, ative o Auto Scaling configurando regras de dimensionamento. O E-MapReduce (EMR) adiciona ou remove nós de tarefa automaticamente com base nas mudanças de carga, garantindo a conclusão dos jobs e reduzindo custos. Este tópico descreve como configurar políticas personalizadas de Auto Scaling.

Pré-requisitos

  • Você criou um cluster DataLake, Dataflow, OLAP, DataServing ou Custom. Para mais informações, consulte crie um cluster.

  • Você criou um grupo de nós de tarefa que utiliza instâncias de pagamento conforme o uso ou preemptíveis no cluster. Para mais informações, consulte crie um grupo de nós.

Limitações

  • Para reduzir falhas de scale-out causadas por estoque insuficiente de ECS, especifique vários tipos de instância ao criar um grupo de nós. Selecione até 10 tipos de instância ECS como alternativas. O sistema tenta provisionar instâncias começando pelo primeiro tipo da sua lista. Se um tipo de instância estiver indisponível, o sistema passa automaticamente para o próximo até que a solicitação seja atendida. Os tipos de instância realmente adquiridos podem variar de acordo com as mudanças no estoque.

  • Apenas clusters com o serviço YARN implantado suportam regras de dimensionamento baseadas em carga.

Notas de uso

  • Quando uma regra é acionada, o grupo de nós dimensiona automaticamente com base na política predefinida. Sem regras, o Auto Scaling não ocorre.

  • O sistema encontra automaticamente instâncias compatíveis com os tipos de instância selecionados e as lista como candidatas. Selecione essas candidatas para ativar o dimensionamento usando esses tipos de instância.

Nota

Se várias regras de dimensionamento forem acionadas simultaneamente, o sistema as executará com base nas seguintes prioridades:

  • As regras de scale-out têm precedência sobre as regras de scale-in.

  • As regras baseadas em tempo e em carga são executadas na ordem em que são acionadas.

  • Para o dimensionamento baseado em carga, as regras são ordenadas pelo horário de acionamento da métrica.

  • No dimensionamento baseado em carga, as regras baseadas na mesma métrica são acionadas na ordem em que foram criadas.

Procedimento

Método 1: Configurar regras para um cluster existente

  1. Acesse a página Auto Scaling.

    1. Faça login no EMR on ECS console.

    2. Na barra de navegação superior, selecione uma região e um resource group de acordo com suas necessidades.

    3. Clique no nome do cluster de destino.

    4. Na página exibida, clique na aba Auto Scaling.

  2. Configure as regras de dimensionamento.

    1. Na aba Configure Auto Scaling, na seção Configure Auto Scaling Rule, clique em Custom Auto Scaling Rule, selecione Reconfigure e, em seguida, clique em Edit na coluna Actions do grupo de nós de destino.

    2. No painel Configure Auto Scaling, configure os parâmetros.

      • Limits on Node Quantity of Current Node Group: Controla o número de nós no grupo para evitar que a quantidade fique muito grande ou muito pequena durante o Auto Scaling. Para alterar essa configuração, clique em Modify Limit.

        • Maximum Number of Instances: O número máximo de nós no grupo de nós atual. Quando esse limite é atingido, o grupo de nós para de fazer scale-out.

        • Minimum Number of Instances: O número mínimo de nós no grupo de nós atual. Quando esse limite é atingido, o grupo de nós para de fazer scale-in.

      • Trigger Rule: Exibe e permite configurar as regras de dimensionamento para o grupo de nós atual.

        • Dimensionamento baseado em tempo

          Se a carga de trabalho de computação do seu cluster tiver picos e vales previsíveis, defina um horário fixo diário, semanal ou mensal para fazer o scale-out de um número específico de nós de tarefa. Isso adiciona recursos de computação quando necessário, ajudando a garantir a conclusão dos jobs e economizando custos. As regras de dimensionamento são divididas em regras de scale-out e regras de scale-in.

          Importante

          Para evitar conflitos e garantir um dimensionamento tranquilo, não defina os horários de execução das regras de scale-out e scale-in para serem idênticos.

          Esta seção usa uma regra de scale-out como exemplo.

          Parâmetro

          Descrição

          Scale-out type

          Fazer scale-out por tempo.

          Rule Name

          Os nomes das regras de dimensionamento devem ser exclusivos dentro de um cluster.

          Frequency

          • Execute Repeatedly: A ação de dimensionamento é executada em um horário específico diariamente, semanalmente ou mensalmente.

          • Execute Only Once: A ação de dimensionamento é executada uma vez em um horário especificado.

          Execution Time

          O horário em que a regra é executada.

          Rule Expiration Time

          Se você definir Frequency como Execute Repeatedly, poderá definir um horário de expiração para a regra. A regra para de acionar atividades de dimensionamento após esse horário.

          Retry Time Range

          Uma ação pode não ser executada no horário agendado por vários motivos. Se definir um intervalo de nova tentativa, o sistema repetirá a ação a cada 30 segundos até o sucesso. O valor varia de 0 a 3.600 segundos.

          Por exemplo, se a ação A não puder ser executada porque a ação B está em andamento ou em cooldown, o sistema tentará novamente a cada 30 segundos. A ação será executada assim que as condições permitirem.

          Nodes for each scale-out

          O número de nós a serem adicionados quando a regra for acionada.

          Best-effort Delivery

          Recomendamos que você ative este recurso. Após ativar o best-effort delivery, o sistema entrega o número máximo possível de nós para garantir operações de negócios tranquilas.

          Por exemplo, você configura o sistema para fazer scale-out de 100 nós às 00:00 todos os dias. Se apenas 90 nós estiverem em estoque, o processo normalmente falharia. Com este recurso ativado, os 90 nós disponíveis são entregues.

        • Dimensionamento baseado em carga

          Nota

          Este recurso é suportado apenas quando o serviço YARN está implantado no cluster.

          Se não for possível prever os picos e vales da carga de trabalho de big data, mas você compreender bem o modelo de negócios, use o dimensionamento baseado em carga. As regras dividem-se em scale-out e scale-in. Esta seção usa uma regra de scale-out como exemplo.

          Parâmetro

          Descrição

          Scale-out type

          Fazer scale-out por carga.

          Rule Name

          Os nomes das regras de dimensionamento devem ser exclusivos dentro de um cluster.

          Load Metric-based Trigger Conditions

          As condições que acionam a regra de dimensionamento baseada em carga. Selecione uma ou mais métricas de carga definidas pelo sistema. Para selecionar várias métricas, clique em Add Metric. Os seguintes parâmetros estão incluídos:

          • Métrica de carga: O nome de uma métrica de carga suportada pelo sistema. Para mais informações sobre o mapeamento entre as métricas de Auto Scaling do E-MapReduce e as métricas do serviço YARN, consulte Mapping between E-MapReduce auto scaling metrics and YARN service metrics.

            Nota

            As métricas de carga suportadas variam de acordo com o tipo de cluster. As métricas reais exibidas no console prevalecem.

          • Método de agregação: O método (média, máximo ou mínimo) usado para avaliar a métrica de carga em relação a um limiar durante um período estatístico. A regra é acionada se o valor agregado atingir o limiar.

          Multi-metric Relationship

          Selecione All Metrics Meet the Conditions ou Any Metric Meets the Condition.

          Statistical Period

          A janela de tempo para coleta e agregação de métricas. Um período mais curto torna a regra mais sensível às mudanças de carga. Selecione um período estatístico razoável com base nas necessidades do seu negócio.

          Condition Repetition Threshold

          O número de períodos estatísticos consecutivos em que a métrica deve exceder o limiar antes que a regra seja acionada. Isso evita o dimensionamento devido a picos breves.

          Nodes for each scale-out

          O número de nós a serem adicionados quando a regra for acionada.

          Best-effort Delivery

          Se você ativar este recurso, o sistema entregará o número máximo possível de nós. Avalie se deve ativar este recurso para o dimensionamento baseado em carga. Ao contrário do dimensionamento baseado em tempo, onde a capacidade necessária é conhecida, o dimensionamento baseado em carga reage a métricas, e o atendimento parcial pode não ser desejável.

          Cooldown Time

          O intervalo entre o início de uma atividade de Auto Scaling e o momento em que outra pode começar. Durante esse período, todos os acionamentos de dimensionamento são ignorados. Após o término do cooldown, o sistema responderá apenas a novos acionamentos que atendam às condições de dimensionamento.

          Esse período de cooldown permite que a carga do sistema se estabilize após um evento de dimensionamento antes que outro seja iniciado.

          Effective Time Period

          Um parâmetro opcional que especifica o intervalo de tempo durante o qual uma regra de dimensionamento baseada em carga fica ativa. Por padrão, a regra fica ativa 24 horas por dia, 7 dias por semana. Se você definir um intervalo de tempo, as atividades de dimensionamento serão acionadas apenas dentro desse intervalo.

    3. Após concluir a configuração, clique em Save and Apply.

      Quando as condições são atendidas, as atividades de Auto Scaling são acionadas para o grupo de nós.

Método 2: Configurar regras durante a criação do cluster

  1. Faça login no EMR on ECS console.

  2. Na barra de navegação superior, selecione uma região e um resource group de acordo com suas necessidades.

  3. Clique em CREATE_CLUSTER. Para mais informações sobre os parâmetros, consulte crie um cluster.

    Nota

    Você deve adicionar um grupo de nós de tarefa de pagamento conforme o uso ao cluster antes de poder configurar as regras correspondentes.

  4. Configure o Cluster Scaling.

    1. Selecione Custom Auto Scaling Rule e clique em Edit na coluna Actions do grupo de nós de destino.

    2. No painel Configure Auto Scaling, configure os parâmetros. Para mais informações, consulte configure regras de dimensionamento.

    3. Após concluir a configuração, clique em Save and Apply.

  5. Confirme o pedido e crie o cluster.

    Após a criação do cluster, as atividades de dimensionamento são acionadas para o grupo de nós quando as condições da regra são atendidas.

Método 3: Configurar regras com um SDK

Ao criar um cluster ou grupo de nós, configure regras de dimensionamento personalizadas para o grupo de nós a fim de automatizar a criação e o gerenciamento de nós. Para mais informações, consulte crie um cluster e crie um grupo de nós. Você também pode configurar regras de dimensionamento personalizadas para um grupo de nós existente. Para mais informações, consulte crie políticas personalizadas de auto scaling.

O código Java a seguir fornece um exemplo de configuração de uma regra de scale-out baseada em carga.

Nota

Recomendamos que você use o método STS, que é mais seguro, para inicializar o cliente. Para mais informações sobre os métodos de autenticação, consulte gerencie credenciais de acesso.

// This file is auto-generated, don't edit it. Thanks.
package com.aliyun.sample;

import com.aliyun.tea.*;

public class Sample {

    /**
     * <b>description</b> :
     * <p>Use an AccessKey pair to initialize the client.</p>
     * @return Client
     * 
     * @throws Exception
     */
    public static com.aliyun.emr20210320.Client createClient() throws Exception {
        // Leaking source code may cause the AccessKey pair to be leaked, posing a threat to the security of all your resources. The following code is for reference only.
        // We recommend that you use the more secure STS method for authentication.
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set.
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set.
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // For the endpoint, see https://api.alibabacloud.com/product/Emr.
        config.endpoint = "emr.eu-central-1.aliyuncs.com";
        return new com.aliyun.emr20210320.Client(config);
    }

    public static void main(String[] args_) throws Exception {
        java.util.List<String> args = java.util.Arrays.asList(args_);
        com.aliyun.emr20210320.Client client = Sample.createClient();
        com.aliyun.emr20210320.models.ScalingConstraints scalingConstraints = new com.aliyun.emr20210320.models.ScalingConstraints()
                .setMaxCapacity(10)
                .setMinCapacity(0);
        com.aliyun.emr20210320.models.TriggerCondition scalingRule0MetricsTriggerTriggerCondition0 = new com.aliyun.emr20210320.models.TriggerCondition()
                .setMetricName("yarn_resourcemanager_queue_AvailableVCoresPercentage")
                .setStatistics("AVG")
                .setComparisonOperator("LE")
                .setThreshold(15D);
        com.aliyun.emr20210320.models.TriggerCondition scalingRule0MetricsTriggerTriggerCondition1 = new com.aliyun.emr20210320.models.TriggerCondition()
                .setMetricName("yarn_resourcemanager_queue_AvailableMBPercentage")
                .setStatistics("AVG")
                .setComparisonOperator("LE")
                .setThreshold(15D);
        com.aliyun.emr20210320.models.MetricsTrigger scalingRule0MetricsTrigger = new com.aliyun.emr20210320.models.MetricsTrigger()
                .setTimeWindow(300)
                .setEvaluationCount(1)
                .setCoolDownInterval(300)
                .setConditionLogicOperator("Or")
                .setConditions(java.util.Arrays.asList(
                    scalingRule0MetricsTriggerTriggerCondition0,
                    scalingRule0MetricsTriggerTriggerCondition1
                ));
        com.aliyun.emr20210320.models.ScalingRule scalingRule0 = new com.aliyun.emr20210320.models.ScalingRule()
                .setRuleName("default")
                .setTriggerType("METRICS_TRIGGER")
                .setActivityType("SCALE_OUT")
                .setAdjustmentValue(1)
                .setMetricsTrigger(scalingRule0MetricsTrigger);
        com.aliyun.emr20210320.models.PutAutoScalingPolicyRequest putAutoScalingPolicyRequest = new com.aliyun.emr20210320.models.PutAutoScalingPolicyRequest()
                .setRegionId("cn-hangzhou")
                .setClusterId("c-xxxx")
                .setNodeGroupId("ng-xxx")
                .setScalingRules(java.util.Arrays.asList(
                    scalingRule0
                ))
                .setConstraints(scalingConstraints);
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        try {
            // Print the API return values on your own.
            client.putAutoScalingPolicyWithOptions(putAutoScalingPolicyRequest, runtime);
        } catch (TeaException error) {
            // The following code is for demonstration purposes only. We recommend that you handle exceptions with caution and do not ignore them in your project.
            // Error message
            System.out.println(error.getMessage());
            // Diagnosis address
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception exception) {
            TeaException error = new TeaException(exception.getMessage(), exception);
            // The following code is for demonstration purposes only. We recommend that you handle exceptions with caution and do not ignore them in your project.
            // Error message
            System.out.println(error.getMessage());
            // Diagnosis address
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }        
    }
}

Mapeamento entre o Auto Scaling do EMR e as métricas do YARN

Nota
  • Para métricas de Auto Scaling relacionadas a filas, especifique o parâmetro queue_name. O valor padrão é root. Filas personalizadas são suportadas.

  • Para métricas de Auto Scaling relacionadas a partições, você deve especificar o parâmetro partition_name.

Métrica do EMR

Serviço

Descrição

yarn_resourcemanager_queue_AvailableVCores

YARN

O número de núcleos de cpu virtuais disponíveis na fila especificada.

yarn_resourcemanager_queue_PendingVCores

YARN

O número de núcleos de cpu virtuais pendentes de alocação na fila especificada.

yarn_resourcemanager_queue_AllocatedVCores

YARN

O número de núcleos de cpu virtuais alocados na fila especificada.

yarn_resourcemanager_queue_ReservedVCores

YARN

O número de núcleos de cpu virtuais reservados na fila especificada.

yarn_resourcemanager_queue_AvailableMB

YARN

A quantidade de memória disponível na fila especificada.

yarn_resourcemanager_queue_PendingMB

YARN

A quantidade de memória pendente de alocação na fila especificada.

yarn_resourcemanager_queue_AllocatedMB

YARN

A quantidade de memória alocada na fila especificada.

yarn_resourcemanager_queue_ReservedMB

YARN

A quantidade de memória reservada na fila especificada.

yarn_resourcemanager_queue_AppsRunning

YARN

O número de aplicações em execução na fila especificada.

yarn_resourcemanager_queue_AppsPending

YARN

O número de aplicações pendentes na fila especificada.

yarn_resourcemanager_queue_AppsKilled

YARN

O número de aplicações encerradas na fila especificada.

yarn_resourcemanager_queue_AppsFailed

YARN

O número de aplicações que falharam na fila especificada.

yarn_resourcemanager_queue_AppsCompleted

YARN

O número de aplicações concluídas na fila especificada.

yarn_resourcemanager_queue_AppsSubmitted

YARN

O número de aplicações enviadas na fila especificada.

yarn_resourcemanager_queue_AllocatedContainers

YARN

O número de contêineres alocados na fila especificada.

yarn_resourcemanager_queue_PendingContainers

YARN

O número de contêineres pendentes de alocação na fila especificada.

yarn_resourcemanager_queue_ReservedContainers

YARN

O número de contêineres reservados na fila especificada.

yarn_resourcemanager_queue_AvailableMBPercentage

YARN

A porcentagem de recursos de memória disponíveis na fila especificada. MemoryAvailablePercentage = AvailableMemory / TotalMemory.

Nota

Esta métrica é suportada nas versões EMR-3.43.0 e posteriores e EMR-5.9.0 e posteriores.

yarn_resourcemanager_queue_PendingContainersRatio

YARN

A proporção entre o número de contêineres pendentes e o número de contêineres alocados na fila especificada. ContainerPendingRatio = PendingContainers / AllocatedContainers.

Nota

Esta métrica é suportada nas versões EMR-3.43.0 e posteriores e EMR-5.9.0 e posteriores.

yarn_resourcemanager_queue_AvailableVCoresPercentage

YARN

A porcentagem de núcleos de cpu virtuais disponíveis na fila especificada. AvailableVCoresPercentage = AvailableVCores / (ReservedVCores + AvailableVCores + AllocatedVCores) * 100

Nota

Esta métrica é suportada nas versões EMR-3.43.0 e posteriores e EMR-5.9.0 e posteriores.

yarn_cluster_numContainersByPartition

YARN

O número de contêineres na partição especificada. O parâmetro partition_name especifica o nome da partição.

Nota

Esta métrica é suportada nas versões EMR-3.44.0 e posteriores e EMR-5.10.0 e posteriores.

yarn_cluster_usedMemoryMBByPartition

YARN

O uso de memória da partição especificada. O parâmetro partition_name especifica o nome da partição.

Nota

Esta métrica é suportada nas versões EMR-3.44.0 e posteriores e EMR-5.10.0 e posteriores.

yarn_cluster_availMemoryMBByPartition

YARN

A memória disponível da partição especificada. O parâmetro partition_name especifica o nome da partição.

Nota

Esta métrica é suportada nas versões EMR-3.44.0 e posteriores e EMR-5.10.0 e posteriores.

yarn_cluster_usedVirtualCoresByPartition

YARN

O número de núcleos de cpu virtuais usados na partição especificada. O parâmetro partition_name especifica o nome da partição.

Nota

Esta métrica é suportada nas versões EMR-3.44.0 e posteriores e EMR-5.10.0 e posteriores.

yarn_cluster_availableVirtualCoresByPartition

YARN

O número de núcleos de cpu virtuais disponíveis na partição especificada. O parâmetro partition_name especifica o nome da partição.

Nota

Esta métrica é suportada nas versões EMR-3.44.0 e posteriores e EMR-5.10.0 e posteriores.

FAQ

Por que as operações de scale-out do cluster EMR falham? Como posso melhorar a taxa de sucesso do scale-out?

Causas raiz

  1. Estoque insuficiente de recursos ECS: Uma operação de scale-out pode falhar se o número solicitado de instâncias ECS de um tipo específico exceder o estoque disponível na zona de disponibilidade atual. Os recursos subjacentes do ECS são dinâmicos e podem estar temporariamente escassos devido à alta demanda.

  2. Limitação de tipo de instância única: Se a sua configuração de Auto Scaling especificar apenas um tipo de instância ECS, e esse tipo estiver escasso, o processo de scale-out falhará.

Soluções

  • Recomendamos que você ative o best-effort delivery ativando a opção Best-effort Delivery ao configurar uma regra de dimensionamento. Isso garante que, mesmo que alguns recursos estejam indisponíveis, o sistema provisione o máximo de recursos possível em vez de abandonar completamente a solicitação de scale-out.

  • Configure vários tipos de instância: Para aumentar a taxa de sucesso, recomendamos que você configure vários tipos de instância ECS para o grupo de nós de tarefa. Para mais informações, consulte crie um grupo de nós. Durante um scale-out, o sistema tenta provisionar uma instância do primeiro tipo da sua lista. Se estiver indisponível, o sistema tenta automaticamente o próximo tipo, continuando até que a solicitação seja atendida.

Essas medidas podem melhorar significativamente a taxa de sucesso de scale-out do seu cluster EMR.