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.
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
-
Acesse a página Auto Scaling.
Faça login no EMR on ECS console.
Na barra de navegação superior, selecione uma região e um resource group de acordo com suas necessidades.
Clique no nome do cluster de destino.
Na página exibida, clique na aba Auto Scaling.
-
Configure as regras de dimensionamento.
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.
-
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.
ImportantePara 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
NotaEste 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.
NotaAs 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.
-
-
-
-
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
Faça login no EMR on ECS console.
Na barra de navegação superior, selecione uma região e um resource group de acordo com suas necessidades.
-
Clique em CREATE_CLUSTER. Para mais informações sobre os parâmetros, consulte crie um cluster.
NotaVocê deve adicionar um grupo de nós de tarefa de pagamento conforme o uso ao cluster antes de poder configurar as regras correspondentes.
-
Configure o Cluster Scaling.
Selecione Custom Auto Scaling Rule e clique em Edit na coluna Actions do grupo de nós de destino.
No painel Configure Auto Scaling, configure os parâmetros. Para mais informações, consulte configure regras de dimensionamento.
Após concluir a configuração, clique em Save and Apply.
-
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.
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
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. 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. 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. 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. |