Usar o ajuste de escala automático com uma política personalizada para grupos de instâncias - Amazon EMR

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usar o ajuste de escala automático com uma política personalizada para grupos de instâncias

A escalabilidade automática com uma política personalizada nas EMR versões 4.0 e superiores da Amazon permite que você escale programaticamente os nós principais e os nós de tarefas com base em uma CloudWatch métrica e em outros parâmetros que você especifica em uma política de escalabilidade. 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 Criar um cluster com frotas de instâncias ou grupos de instâncias uniformes.

nota

Para usar a escalabilidade automática com um recurso de política personalizada na AmazonEMR, você deve definir true o VisibleToAllUsers parâmetro 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 escalabilidade com a AWS Management Console AWS CLI, a ou com a Amazon EMRAPI. Ao usar o AWS CLI ou a Amazon EMRAPI, você especifica a política de escalabilidade no JSON formato. Além disso, quando estiver usando o AWS CLI ou o Amazon EMRAPI, você pode especificar CloudWatch métricas personalizadas. As métricas personalizadas não estão disponíveis para seleção ao usar o  AWS Management Console. 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.

Embora o escalonamento automático permita ajustar a capacidade do EMR cluster on-the-fly, você ainda deve considerar os requisitos básicos de carga de trabalho e planejar suas configurações de nós e grupos de instâncias. Para obter mais informações, consulte Cluster configuration guidelines.

nota

Para a maioria das cargas de trabalho, 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.

Criando a IAM função para o escalonamento automático

A escalabilidade automática na Amazon EMR exige uma IAM função com permissões para adicionar e encerrar instâncias quando as atividades de escalabilidade são acionadas. 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 escalabilidade pela primeira vez com o AWS Management Console, a Amazon EMR cria a função padrão e anexa a política gerenciada padrão para permissões,. AmazonElasticMapReduceforAutoScalingRole

Ao criar um cluster com uma política de escalabilidade automática com o AWS CLI, você deve primeiro garantir que a IAM função padrão exista ou que você tenha uma IAM função personalizada com uma política anexada que forneça as permissões apropriadas. 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 MyEMRAutoScalingRole. Se você criar uma função de escalabilidade automática personalizada para a AmazonEMR, recomendamos que você baseie as políticas de permissões para sua função personalizada com base na política gerenciada. Para obter mais informações, consulte Configure funções IAM de serviço para EMR permissões da Amazon para AWS serviços e recursos.

Noções básicas sobre as regras de ajuste de escala automático

Quando uma regra de expansão aciona uma atividade de escalabilidade para um grupo de instâncias, as instâncias da Amazon são adicionadas ao grupo de EC2 instâncias de acordo com suas regras. Novos nós podem ser usados por aplicativos como Apache Spark, Apache Hive e Presto assim que a instância da Amazon EC2 entrar 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 EC2 instâncias da Amazon que escalam automaticamente, consulte o ciclo de vida do Auto Scaling no Guia do usuário do Amazon EC2 Auto Scaling.

Você pode configurar como um cluster encerra as EC2 instâncias da Amazon. Você pode optar por rescindir no limite de EC2 horas de faturamento da instância da Amazon 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 Redução da escala verticalmente do cluster.

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 são baseados nos AWS Management Console da AmazonEMR. Quando você usa o AWS CLI ou a Amazon EMRAPI, opções adicionais de configuração avançada estão disponíveis. Para obter mais informações sobre opções avançadas, consulte SimpleScalingPolicyConfigurationna 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 EC2 instâncias da Amazon que podem estar no grupo de instâncias e se aplica a todas as regras de escalabilidade. Da mesma forma, a restrição de instâncias mínimas especifica o número mínimo de EC2 instâncias da Amazon e se aplica a todas as regras de escalabilidade.

  • O Rule name (Nome da regra), que deve ser único dentro da política.

  • O ajuste de escalabilidade, que determina o número de EC2 instâncias a serem adicionadas (para regras de expansão horizontal) ou encerradas (para regras de expansão) durante a atividade de escalabilidade acionada pela regra.

  • A CloudWatch métrica, que é observada em busca de uma condição de alarme.

  • Um operador de comparação, usado para comparar a CloudWatch métrica com o valor limite e determinar uma condição de gatilho.

  • Um período de avaliação, em incrementos de cinco minutos, durante o qual a CloudWatch métrica deve estar em uma condição de gatilho antes que a atividade 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 atividade de escalabilidade e atinge seu estado de pós-escala, o período de espera oferece uma oportunidade para que as CloudWatch métricas que podem acionar as atividades de escalabilidade subsequentes se estabilizem. Para obter mais informações, consulte os cooldowns do Auto Scaling no Guia do usuário do Amazon Auto Scaling. EC2

    AWS Management Console parâmetros de regras de escalabilidade automática para a AmazonEMR.

Considerações e limitações

  • CloudWatch As métricas da Amazon são essenciais para a operação da escalabilidade EMR automática da Amazon. Recomendamos que você monitore de perto CloudWatch as métricas da Amazon para garantir que os dados não estejam ausentes. Para obter mais informações sobre como você pode configurar CloudWatch os alarmes da Amazon para detectar métricas ausentes, consulte Usando CloudWatch alarmes da Amazon.

  • A utilização excessiva de EBS volumes pode causar problemas de escalabilidade gerenciada. Recomendamos que você monitore de perto EBS o uso do volume para garantir que o EBS volume esteja abaixo de 90% de utilização. Consulte Armazenamento de instâncias para obter informações sobre como especificar EBS volumes adicionais.

  • A escalabilidade automática com uma política personalizada nas EMR versões 5.18 a 5.28 da Amazon pode apresentar falhas de escalabilidade causadas pela falta intermitente de dados nas métricas da Amazon. CloudWatch Recomendamos que você use as EMR versões mais recentes da Amazon para melhorar o escalonamento automático. Você também pode entrar em contato com o AWS Support para obter um patch se precisar usar uma EMR versão da Amazon entre 5.18 e 5.28.

Usando o AWS Management Console para configurar o escalonamento 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.

  1. Navegue até o novo EMR console da Amazon 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.

  2. Se você estiver criando um cluster, no EMR console da Amazon, selecione Criar cluster, selecione Ir para opções avançadas, escolha as opções para a Etapa 1: Software e Etapas e, em seguida, vá para a 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.

  3. 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.

  4. 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.

  5. 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.

  6. Escolha os parâmetros para as regras como descrevemos anteriormente neste tópico. Para obter descrições das CloudWatch métricas disponíveis para a AmazonEMR, consulte EMRas métricas e dimensões da Amazon no Guia CloudWatch do usuário da Amazon.

Usando o AWS CLI para configurar o escalonamento automático

Você pode usar AWS CLI comandos da Amazon EMR para configurar a escalabilidade automática ao criar um cluster e ao criar um grupo de instâncias. Você pode usar uma sintaxe abreviada, especificando a JSON configuração em linha nos comandos relevantes, ou pode referenciar um arquivo contendo a configuração. 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 tenha uma política de escalabilidade automática, você deve usar o --auto-scaling-role MyAutoScalingRole comando para especificar a IAM função da escalabilidade automática. A função padrão é EMR_AutoScaling_DefaultRole e pode ser criada com o comando create-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 escalabilidade automática, consulte PutAutoScalingPolicyna 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 escalabilidade equivalente à política de escalabilidade horizontal padrão que aparece quando você cria uma política de escalabilidade automática com o for Amazon. AWS Management Console 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-label emr-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-label emr-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 JSON arquivo,instancegroupconfig.json, com a configuração do grupo de instâncias.

aws emr add-instance-groups --cluster-id j-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 precisa fazer parte de um cluster que usa a IAM função de escalabilidade automática. O exemplo a seguir usa uma referência a um JSON arquivo,autoscaleconfig.json, que especifica a configuração automática da política de escalabilidade.

aws emr put-auto-scaling-policy --cluster-id j-1EKZ3TYEVF1S2 --instance-group-id ig-3PLUZBA6WLS07 --auto-scaling-policy file://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-id j-1EKZ3TYEVF1S2 --instance-group-id ig-3PLUZBA6WLS07

Recuperar configuração de uma política de ajuste de escala automático

O describe-cluster comando recupera a configuração da política no InstanceGroup bloco. 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." } } } }