Uso do ajuste de escala automático com uma política personalizada para grupos de instâncias no Amazon EMR
O ajuste de escala automático com uma política personalizada no Amazon EMR versões 4.0 e posteriores permite aumentar ou reduzir a escala horizontalmente dos nós centrais e dos nós de tarefa de maneira programática com base em uma métrica do CloudWatch e em outros parâmetros que você especifica em uma política de ajuste de escala. A escalabilidade automática com uma política personalizada está disponível com a configuração de grupos de instâncias e não está disponível ao usar frotas de instâncias. Para obter mais informações sobre os grupos de instâncias e frotas de instâncias, consulte Criação de um cluster do Amazon EMR com frotas de instâncias ou grupos de instâncias uniformes.
nota
Para usar o ajuste de escala automático com um atributo de política personalizada no Amazon EMR, é necessário definir true para o parâmetro VisibleToAllUsers ao criar um cluster. Para obter mais informações, consulte SetVisibleToAllUsers.
A política de escalabilidade é parte da configuração de um grupo de instâncias. Você pode especificar uma política durante a configuração inicial de um grupo de instâncias ou pode modificar um grupo de instâncias de um cluster existente, mesmo que esse grupo de instâncias esteja ativo. Cada grupo de instâncias em um cluster, com exceção do grupo de instâncias primário, pode ter sua própria política de ajuste de escala, que consiste em regras de aumento ou redução da escala na horizontal. As regras de expansão e redução podem ser configuradas de forma independente, com parâmetros diferentes para cada regra.
Você pode configurar políticas de ajuste de escala usando o Console de gerenciamento da AWS, a AWS CLI ou a API do Amazon EMR. Ao usar a AWS CLI ou a API do Amazon EMR, você especifica a política de ajuste de escala no formato JSON. Além disso, usando a AWS CLI ou com a API do Amazon EMR, você pode especificar métricas personalizadas do CloudWatch. As métricas personalizadas não estão disponíveis para seleção ao usar o Console de gerenciamento da AWS. Quando você cria inicialmente uma política de ajuste de escala usando o console, uma política padrão adequada para muitas aplicações é pré-configurada para ajudar você a começar. Você pode excluir ou modificar as regras padrão.
Apesar de o Auto Scaling permitir que a capacidade do cluster do EMR seja ajustada imediatamente, você ainda deve considerar os requisitos básicos da workload e planejar as configurações do nó e do grupo de instâncias. Para obter mais informações, consulte Cluster configuration guidelines.
nota
Para a maioria das workloads, a configuração de ambas as regras de expansão e redução é desejável para otimizar a utilização de recursos. Definir uma regra sem a outra significa que você precisaria manualmente redimensionar o número de instâncias após uma ação de escalabilidade. Em outras palavras, isso definiria uma política "unidirecional" automática de expansão ou redução com uma reinicialização manual.
Criar o perfil do IAM para ajuste de escala automático
O ajuste de escala automático no Amazon EMR requer um perfil do IAM com permissões para adicionar e terminar instâncias quando as ações de ajuste de escala são iniciadas. Uma função padrão EMR_AutoScaling_DefaultRole, configurada com as políticas de função e de confiança adequadas, está disponível para esse objetivo. Quando você cria um cluster com uma política de ajuste de escala usando o Console de gerenciamento da AWS, o Amazon EMR cria o perfil padrão e anexa a política gerenciada padrão para permissões, AmazonElasticMapReduceforAutoScalingRole.
Quando você cria um cluster com uma política de ajuste de escala automático usando a AWS CLI, você deve primeiro garantir que exista o perfil do IAM padrão ou que você tenha um perfil do IAM personalizado com uma política anexada que fornece as devidas permissões. Para criar a função padrão, você pode executar o comando create-default-roles antes de criar um cluster. Em seguida, você pode especificar a opção --auto-scaling-role
EMR_AutoScaling_DefaultRole ao criar um cluster. Como alternativa, você pode criar uma função personalizada de escalabilidade automática e, em seguida, especificá-la ao criar um cluster, por exemplo, --auto-scaling-role
. Se você criar um perfil personalizado de ajuste de escala automático para o Amazon EMR, recomendamos basear as políticas de permissão para o perfil personalizado com base na política gerenciada. Para obter mais informações, consulte Configurar perfis de serviço do IAM para permissões do Amazon EMR aos serviços e recursos da AWS.MyEMRAutoScalingRole
Noções básicas sobre as regras de ajuste de escala automático
Quando uma regra de aumento da escala da horizontal aciona uma ação de ajuste de escala para um grupo de instâncias, as instâncias do Amazon EC2 são adicionadas ao grupo de instâncias, de acordo com as suas regras. Novos nós podem ser usados por aplicações como o Apache Spark, o Apache Hive e o Presto assim que a instância do Amazon EC2 entra no estado InService. Você também pode configurar uma regra de redução que encerra as instâncias e remove os nós. Para obter mais informações sobre o ciclo de vida das instâncias do Amazon EC2 que podem escalar automaticamente, consulte Auto Scaling lifecycle no Guia do usuário do Amazon EC2 Auto Scaling.
Você pode configurar como um cluster terminará as instâncias do Amazon EC2. Você pode optar por terminar no limite instância-hora do Amazon EC2 para o faturamento ou após a conclusão da tarefa. Esta configuração se aplica tanto ao Auto Scaling quanto ao redimensionamento manual de operações. Para obter mais informações sobre essa configuração, consulte Opções de redução vertical da escala para os clusters do Amazon EMR.
Os parâmetros a seguir se referem às regras das políticas e determinam o comportamento do Auto Scaling.
nota
Os parâmetros listados aqui usam como base o Console de gerenciamento da AWS para o Amazon EMR. Quando você usa a AWS CLI ou a API do Amazon EMR, existem opções adicionais de configuração avançada disponíveis. Para obter mais informações sobre as opções avançadas, consulte SimpleScalingPolicyConfiguration na Amazon EMR API Reference.
-
Números máximo e mínimo de instâncias. A restrição Máximo de instâncias especifica o número máximo de instâncias do Amazon EC2 que podem estar no grupo de instâncias e se aplica a todas as regras de aumento da escala na horizontal. Da mesma forma, a restrição Mínimo de instâncias especifica o número mínimo de instâncias do Amazon EC2 e se aplica a todas as regras de redução da escala na horizontal.
-
O Rule name (Nome da regra), que deve ser único dentro da política.
-
O scaling adjustment (ajuste de escalabilidade), que determina o número de instâncias do EC2 a serem adicionadas (para regras de expansão) ou encerradas (para regras de redução) durante a ação de escalabilidade acionada pela regra.
-
A CloudWatch metric (Métrica CloudWatch), que é observada para detectar uma condição de alarme.
-
Um comparison operator (operador de comparação), que é usado para comparar a métrica do CloudWatch com o valor de Threshold (Limite) e determinar uma condição de acionamento.
-
Um evaluation period (período de avaliação), em incrementos de cinco minutos, para o qual a métrica do CloudWatch deve estar em uma condição de acionamento antes que a ação de escalabilidade seja acionada.
-
Um Cooldown period (Desaquecimento), que determina a quantidade de tempo que deve se passar entre uma ação de escalabilidade iniciada por uma regra e o início da próxima ação de escalabilidade, independentemente da regra que o aciona. Quando um grupo de instâncias conclui uma ação de ajuste de escala e atinge o estado pós-escala, o período de esfriamento fornece uma oportunidade para as métricas do CloudWatch, que podem acionar atividades subsequentes de ajuste de escala para estabilizar. Para obter mais informações, consulte Auto Scaling cooldowns no Guia do usuário do Amazon EC2 Auto Scaling.
Considerações e limitações
-
As métricas do Amazon CloudWatch são essenciais para a operação do ajuste de escala automático do Amazon EMR. É recomendável monitorar atentamente as métricas do Amazon CloudWatch para garantir que os dados não estejam ausentes. Para obter mais informações sobre como configurar os alarmes do Amazon CloudWatch para detectar métricas ausentes, consulte Usar alarmes do Amazon CloudWatch.
-
A utilização excessiva dos volumes do EBS pode causar problemas de ajuste de escala gerenciado. É recomendável monitorar atentamente o uso do volume do EBS para garantir que o volume do EBS esteja abaixo de 90% de utilização. Consulte Instance storage para obter informações sobre como especificar volumes do EBS adicionais.
-
O ajuste de escala automático com uma política personalizada nas versões 5.18 a 5.28 do Amazon EMR pode apresentar falhas de ajuste de escala causadas pela ausência intermitente de dados nas métricas do Amazon CloudWatch. É recomendável usar as versões mais recentes do Amazon EMR para melhorar o ajuste de escala automático. Você também pode entrar em contato com o AWS Support
para obter um patch, caso precise usar uma versão do Amazon EMR entre 5.18 e 5.28.
Usar a Console de gerenciamento da AWS para configurar o ajuste de escala automático
Ao criar um cluster, você configura uma política de ajuste de escala para os grupos de instâncias usando as opções de configuração avançadas do cluster. Você também pode criar ou modificar uma política de escalabilidade para um grupo de instâncias em serviço modificando os grupos de instâncias nas configurações de Hardware de um cluster existente.
Navegue até o novo console do Amazon EMR e selecione Alternar para o console antigo na navegação lateral. Para obter mais informações sobre o que esperar ao alternar para o console antigo, consulte Usar o console antigo.
-
Se você estiver criando um cluster, no console do Amazon EMR, selecione Criar cluster, em seguida selecione Ir para opções avançadas, escolha as opções em Etapa1: software e etapas e acesse Etapa 2: configuração de hardware.
- ou -
Se você estiver modificando um grupo de instâncias em um cluster em execução, selecione o seu cluster na lista de clusters e, em seguida, expanda a seção Hardware.
-
Na seção Opção de ajuste de escala e provisionamento de clusters, selecione Habilitar ajuste de escala de clusters. Selecione Criar uma política personalizada de escalabilidade automática.
Na tabela de Políticas personalizadas de escalabilidade automática, clique no ícone de lápis que aparece na linha do grupo de instâncias que você deseja configurar. A tela Regras do Auto Scaling é exibida.
-
Digite o número de Maximum instances (Máximo de instâncias) que você deseja que o grupo de instâncias tenha quando houver uma expansão e digite o número de Minimum instances (Mínimo de instâncias) que deseja que o grupo de instâncias tenha quando houver uma redução.
-
Clique no lápis para editar os parâmetros das regras, clique em X para remover uma regra da política e clique em Add rule (Adicionar regra) para acrescentar regras adicionais.
-
Escolha os parâmetros para as regras como descrevemos anteriormente neste tópico. Para obter descrições das métricas do CloudWatch disponíveis para o Amazon EMR, consulte as métricas e dimensões do Amazon EMR no Guia do usuário do Amazon CloudWatch.
Usar a AWS CLI para configurar o ajuste de escala automático
Você pode usar comandos da AWS CLI no Amazon EMR para configurar o ajuste de escala automático quando cria um cluster e um grupo de instâncias. Você pode usar uma sintaxe abreviada, especificando a configuração do JSON nas linhas dos comandos relevantes, ou pode fazer referência a um arquivo que contém a configuração do JSON. Você também pode aplicar uma política de Auto Scaling para um grupo de instâncias existente e remover uma política de Auto Scaling que foi aplicada anteriormente. Além disso, você pode recuperar os detalhes da configuração de uma política de escalabilidade de um cluster em execução.
Importante
Ao criar um cluster que tem uma política de ajuste de escala automático, é necessário usar o comando --auto-scaling-role
para especificar o perfil do IAM para o ajuste de escala automático. A função padrão é MyAutoScalingRole e pode ser criada com o comando EMR_AutoScaling_DefaultRolecreate-default-roles. Esta função só pode ser adicionada quando o cluster é criado e não em um cluster existente.
Para obter uma descrição detalhada dos parâmetros disponíveis ao configurar uma política de ajuste de escala automático, consulte PutAutoScalingPolicy na Amazon EMR API Reference.
Criar um cluster com uma política do Auto Scaling aplicada a um grupo de instâncias
Você pode especificar uma configuração de escalabilidade automática dentro da opção --instance-groups do comando aws emr
create-cluster. O exemplo a seguir ilustra um comando create-cluster em que uma política de Auto Scaling para o grupo de instâncias core é fornecida na linha. O comando cria uma configuração de ajuste de escala equivalente à política de aumento da escala na horizontal padrão que aparece quando você cria uma política de ajuste de escala automático usando o Console de gerenciamento da AWS para o Amazon EMR. Para não estender a explicação, não mostramos uma política de redução. Não é recomendável criar uma regra de expansão sem uma regra de redução.
aws emr create-cluster --release-labelemr-5.2.0--service-role EMR_DefaultRole --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole --auto-scaling-role EMR_AutoScaling_DefaultRole --instance-groups Name=MyMasterIG,InstanceGroupType=MASTER,InstanceType=m5.xlarge,InstanceCount=1 'Name=MyCoreIG,InstanceGroupType=CORE,InstanceType=m5.xlarge,InstanceCount=2,AutoScalingPolicy={Constraints={MinCapacity=2,MaxCapacity=10},Rules=[{Name=Default-scale-out,Description=Replicates the default scale-out rule in the console.,Action={SimpleScalingPolicyConfiguration={AdjustmentType=CHANGE_IN_CAPACITY,ScalingAdjustment=1,CoolDown=300}},Trigger={CloudWatchAlarmDefinition={ComparisonOperator=LESS_THAN,EvaluationPeriods=1,MetricName=YARNMemoryAvailablePercentage,Namespace=AWS/ElasticMapReduce,Period=300,Statistic=AVERAGE,Threshold=15,Unit=PERCENT,Dimensions=[{Key=JobFlowId,Value="${emr.clusterId}"}]}}}]}'
O comando a seguir ilustra como usar a linha de comando para fornecer a definição da política do Auto Scaling como parte de um arquivo de configuração de grupo de instâncias chamado .instancegroupconfig.json
aws emr create-cluster --release-labelemr-5.2.0--service-role EMR_DefaultRole --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole --instance-groups file://your/path/to/instancegroupconfig.json--auto-scaling-role EMR_AutoScaling_DefaultRole
O conteúdo do arquivo de configuração é o seguinte:
[ { "InstanceCount": 1, "Name": "MyMasterIG", "InstanceGroupType": "MASTER", "InstanceType": "m5.xlarge" }, { "InstanceCount": 2, "Name": "MyCoreIG", "InstanceGroupType": "CORE", "InstanceType": "m5.xlarge", "AutoScalingPolicy": { "Constraints": { "MinCapacity": 2, "MaxCapacity": 10 }, "Rules": [ { "Name": "Default-scale-out", "Description": "Replicates the default scale-out rule in the console for YARN memory.", "Action":{ "SimpleScalingPolicyConfiguration":{ "AdjustmentType": "CHANGE_IN_CAPACITY", "ScalingAdjustment": 1, "CoolDown": 300 } }, "Trigger":{ "CloudWatchAlarmDefinition":{ "ComparisonOperator": "LESS_THAN", "EvaluationPeriods": 1, "MetricName": "YARNMemoryAvailablePercentage", "Namespace": "AWS/ElasticMapReduce", "Period": 300, "Threshold": 15, "Statistic": "AVERAGE", "Unit": "PERCENT", "Dimensions":[ { "Key" : "JobFlowId", "Value" : "${emr.clusterId}" } ] } } } ] } } ]
Adicionar um grupo de instâncias com uma política do Auto Scaling a um cluster
Você pode especificar uma configuração de política de ajuste de escala usando a opção --instance-groups com o comando add-instance-groups da mesma maneira com que usa o create-cluster. O exemplo a seguir usa uma referência a um arquivo JSON , com a configuração do grupo de instâncias.instancegroupconfig.json
aws emr add-instance-groups --cluster-idj-1EKZ3TYEVF1S2--instance-groups file://your/path/to/instancegroupconfig.json
Aplicar uma política de ajuste de escala automático a um grupo de instâncias atual ou modificar uma política aplicada
Use o comando aws emr put-auto-scaling-policy para aplicar uma política de Auto Scaling a um grupo de instâncias existente. O grupo de instâncias deve fazer parte de um cluster que usa o perfil do IAM de ajuste de escala automático. O exemplo a seguir usa uma referência a um arquivo JSON , que especifica a configuração da política de Auto Scaling.autoscaleconfig.json
aws emr put-auto-scaling-policy --cluster-idj-1EKZ3TYEVF1S2--instance-group-idig-3PLUZBA6WLS07--auto-scaling-policyfile://your/path/to/autoscaleconfig.json
O conteúdo do arquivo autoscaleconfig.json, que define a mesma regra de expansão apresentada no exemplo anterior, é mostrado a seguir.
{ "Constraints": { "MaxCapacity": 10, "MinCapacity": 2 }, "Rules": [{ "Action": { "SimpleScalingPolicyConfiguration": { "AdjustmentType": "CHANGE_IN_CAPACITY", "CoolDown": 300, "ScalingAdjustment": 1 } }, "Description": "Replicates the default scale-out rule in the console for YARN memory", "Name": "Default-scale-out", "Trigger": { "CloudWatchAlarmDefinition": { "ComparisonOperator": "LESS_THAN", "Dimensions": [{ "Key": "JobFlowId", "Value": "${emr.clusterID}" }], "EvaluationPeriods": 1, "MetricName": "YARNMemoryAvailablePercentage", "Namespace": "AWS/ElasticMapReduce", "Period": 300, "Statistic": "AVERAGE", "Threshold": 15, "Unit": "PERCENT" } } }] }
Remover uma política de ajuste de escala automático de um grupo de instâncias
aws emr remove-auto-scaling-policy --cluster-idj-1EKZ3TYEVF1S2--instance-group-idig-3PLUZBA6WLS07
Recuperar configuração de uma política de ajuste de escala automático
O comando describe-cluster recupera a configuração de uma política no bloco InstanceGroup. Por exemplo, o comando a seguir recupera a configuração de um cluster com o ID j-1CWOHP4PI30VJ.
aws emr describe-cluster --cluster-id j-1CWOHP4PI30VJ
Este comando gera o seguinte exemplo de saída.
{ "Cluster": { "Configurations": [], "Id": "j-1CWOHP4PI30VJ", "NormalizedInstanceHours": 48, "Name": "Auto Scaling Cluster", "ReleaseLabel": "emr-5.2.0", "ServiceRole": "EMR_DefaultRole", "AutoTerminate": false, "TerminationProtected": true, "MasterPublicDnsName": "ec2-54-167-31-38.compute-1.amazonaws.com", "LogUri": "s3n://aws-logs-232939870606-us-east-1/elasticmapreduce/", "Ec2InstanceAttributes": { "Ec2KeyName": "performance", "AdditionalMasterSecurityGroups": [], "AdditionalSlaveSecurityGroups": [], "EmrManagedSlaveSecurityGroup": "sg-09fc9362", "Ec2AvailabilityZone": "us-east-1d", "EmrManagedMasterSecurityGroup": "sg-0bfc9360", "IamInstanceProfile": "EMR_EC2_DefaultRole" }, "Applications": [ { "Name": "Hadoop", "Version": "2.7.3" } ], "InstanceGroups": [ { "AutoScalingPolicy": { "Status": { "State": "ATTACHED", "StateChangeReason": { "Message": "" } }, "Constraints": { "MaxCapacity": 10, "MinCapacity": 2 }, "Rules": [ { "Name": "Default-scale-out", "Trigger": { "CloudWatchAlarmDefinition": { "MetricName": "YARNMemoryAvailablePercentage", "Unit": "PERCENT", "Namespace": "AWS/ElasticMapReduce", "Threshold": 15, "Dimensions": [ { "Key": "JobFlowId", "Value": "j-1CWOHP4PI30VJ" } ], "EvaluationPeriods": 1, "Period": 300, "ComparisonOperator": "LESS_THAN", "Statistic": "AVERAGE" } }, "Description": "", "Action": { "SimpleScalingPolicyConfiguration": { "CoolDown": 300, "AdjustmentType": "CHANGE_IN_CAPACITY", "ScalingAdjustment": 1 } } }, { "Name": "Default-scale-in", "Trigger": { "CloudWatchAlarmDefinition": { "MetricName": "YARNMemoryAvailablePercentage", "Unit": "PERCENT", "Namespace": "AWS/ElasticMapReduce", "Threshold": 75, "Dimensions": [ { "Key": "JobFlowId", "Value": "j-1CWOHP4PI30VJ" } ], "EvaluationPeriods": 1, "Period": 300, "ComparisonOperator": "GREATER_THAN", "Statistic": "AVERAGE" } }, "Description": "", "Action": { "SimpleScalingPolicyConfiguration": { "CoolDown": 300, "AdjustmentType": "CHANGE_IN_CAPACITY", "ScalingAdjustment": -1 } } } ] }, "Configurations": [], "InstanceType": "m5.xlarge", "Market": "ON_DEMAND", "Name": "Core - 2", "ShrinkPolicy": {}, "Status": { "Timeline": { "CreationDateTime": 1479413437.342, "ReadyDateTime": 1479413864.615 }, "State": "RUNNING", "StateChangeReason": { "Message": "" } }, "RunningInstanceCount": 2, "Id": "ig-3M16XBE8C3PH1", "InstanceGroupType": "CORE", "RequestedInstanceCount": 2, "EbsBlockDevices": [] }, { "Configurations": [], "Id": "ig-OP62I28NSE8M", "InstanceGroupType": "MASTER", "InstanceType": "m5.xlarge", "Market": "ON_DEMAND", "Name": "Master - 1", "ShrinkPolicy": {}, "EbsBlockDevices": [], "RequestedInstanceCount": 1, "Status": { "Timeline": { "CreationDateTime": 1479413437.342, "ReadyDateTime": 1479413752.088 }, "State": "RUNNING", "StateChangeReason": { "Message": "" } }, "RunningInstanceCount": 1 } ], "AutoScalingRole": "EMR_AutoScaling_DefaultRole", "Tags": [], "BootstrapActions": [], "Status": { "Timeline": { "CreationDateTime": 1479413437.339, "ReadyDateTime": 1479413863.666 }, "State": "WAITING", "StateChangeReason": { "Message": "Cluster ready after last step completed." } } } }