Usando o dimensionamento 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á.

Usando o dimensionamento automático com uma política personalizada para grupos de instâncias

A escalabilidade automática com uma política personalizada no Amazon EMR versão 4.0 e posterior permite expandir ou reduzir programaticamente os nós core e os nós de tarefa com base em uma métrica do CloudWatch e em outros parâmetros que você especifica em umpolí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 no Amazon EMR, você deve definir otruepara aVisibleToAllUsersquando você cria 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 principal, pode ter sua própria política de escalabilidade, que consiste em regras de expansão ou redução. 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 usando aAWS Management Console, oAWS CLIou a API do Amazon EMR. Quando você usa oAWS CLIou a API do Amazon EMR, você especifica a política de escalabilidade no formato JSON. Além disso, ao usar oAWS CLIOu 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 AWS Management Console. Quando você cria inicialmente uma política de escalabilidade usando o console, uma política padrão adequada para muitos aplicativos é pré-configurada para ajudá-lo 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 carga de trabalho e planejar as configurações do nó e do grupo de instâncias. Para obter mais informações, consulteDiretrizes de configuração do.

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 função do IAM para escalabilidade automática

O Auto Scaling no Amazon EMR requer uma função do IAM com permissões para adicionar e encerrar instâncias quando as ações de escalabilidade 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 escalabilidade usando aAWS Management ConsoleO Amazon EMR cria a função padrão e anexa a política gerenciada padrão para permissões,AmazonElasticMapReduceforAutoScalingRole.

Quando você cria um cluster com uma política de Auto Scaling usando aAWS CLIVocê deve primeiro garantir que existe a função padrão do IAM, ou que você tem uma função personalizada do IAM com uma política anexada que fornece as permissões adequadas. 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 personalizada de escalabilidade automática para o Amazon EMR, recomendamos basear as políticas de permissão para a função personalizada com base na política gerenciada. Para obter mais informações, consulte Configurar funções de serviço do IAM para permissões do Amazon EMR paraAWSServiços e recursos.

Compreendendo regras de escalabilidade automática

Quando uma regra de expansão aciona uma ação de escalabilidade 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 aplicativos como o Apache Spark, o Apache Hive e o Presto assim que a instância do Amazon EC2 entra noInServiceestado. 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 ser escaladas automaticamente, consulteAuto ScalingnoGuia do usuário do Amazon EC2 Auto Scaling.

Você pode configurar como um cluster encerra as instâncias do Amazon EC2. Você pode optar por encerrar no limite do tempo de execução da instância 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 Dimensionamento reduzido de 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 usam como base oAWS Management Consolepara Amazon EMR. Quando você usa oAWS CLIOu 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, consulteSimpleScalingPolicyConfigurationnoReferência da API do Amazon EMR.

  • Números máximo e mínimo de instâncias. OMáximo de instânciasA restrição 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 expansão. Da mesma forma, oInstâncias mínimasA restrição especifica o número mínimo de instâncias do Amazon EC2 e se aplica a todas as regras de redução.

  • 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 escalabilidade e atinge o estado posterior a esta ação, o período de desaquecimento fornece uma oportunidade para as métricas do CloudWatch, que podem acionar atividades subsequentes de escalabilidade para estabilizar. Para obter mais informações, consulteRecarga Auto ScalingnoGuia do usuário do Amazon EC2 Auto Scaling.

    
								AWS Management ConsoleParâmetros das regras de escalabilidade automática do Amazon EMR.

Usar oAWS Management ConsolePara configurar escalabilidade automática

Ao criar um cluster, você configura uma política de escalabilidade 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. Se você estiver criando um cluster, no console do Amazon EMR, selecioneCriar cluster, selecioneIr para opções avançadas, escolha opções paraEtapa 1: Software e Passose, em seguida, vá paraEtapa 2: Configuração do 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.

  2. Na seção Escalabilidade de cluster, selecione Habilitar venda de cluster. 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 Auto Scaling Rules é exibida.

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

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

  5. Escolha os parâmetros para as regras como descrevemos anteriormente neste tópico. Para obter descrições das métricas disponíveis do CloudWatch para o Amazon EMR, consulteMétricas e dimensões do Amazon EMRnoGuia do usuário do Amazon CloudWatch.

Usar oAWS CLIPara configurar escalabilidade automática

Você pode usar oAWS CLIPara configurar a escalabilidade automática do Amazon EMR ao criar um cluster e ao criar 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

Quando você cria um cluster que tem uma política de Auto Scaling, você deve usar a--auto-scaling-role MyAutoScalingRolepara especificar a função do IAM paraEscalabilidade automática 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, consultePutAutoScalingPolicyemReferência da API do Amazon EMR.

Criando um cluster com uma política de dimensionamento automático 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 expansão padrão que aparece quando você cria uma política de escalabilidade automática usando oAWS Management Consolepara 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-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 o uso da linha de comando para fornecer a definição da política de 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}" } ] } } } ] } } ]

Adicionando um grupo de instâncias com uma política de dimensionamento automático a um cluster

Você pode especificar uma configuração de política de escalabilidade 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 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

Aplicando uma política de Auto Scaling a um grupo de instâncias existente ou modificando 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 a função do IAM de Auto Scaling. O exemplo a seguir usa uma referência a um arquivo JSON autoscaleconfig.json, que especifica a configuração da política de Auto Scaling.

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" } } }] }

Removendo uma política de escalabilidade automática de um grupo de instâncias

aws emr remove-auto-scaling-policy --cluster-id j-1EKZ3TYEVF1S2 --instance-group-id ig-3PLUZBA6WLS07

Recuperando uma configuração de política de escalabilidade automática

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." } } } }