Configurar a escalabilidade gerenciada para a Amazon EMR - 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á.

Configurar a escalabilidade gerenciada para a Amazon EMR

As seções a seguir explicam como iniciar um EMR cluster que usa escalabilidade gerenciada com o AWS Management Console AWS SDK for Java, o ou o. AWS Command Line Interface

Use o AWS Management Console para configurar o escalonamento gerenciado

Você pode usar o EMR console da Amazon para configurar a escalabilidade gerenciada ao criar um cluster ou para alterar uma política de escalabilidade gerenciada para um cluster em execução.

Console
Para configurar o ajuste de escala gerenciado ao criar um cluster usando o console
  1. Faça login no e abra AWS Management Console o EMR console da Amazon em https://console.aws.amazon.com/emr.

  2. EC2Em EMRAtivado, no painel de navegação esquerdo, escolha Clusters e, em seguida, escolha Criar cluster.

  3. Escolha uma EMR versão da Amazon emr-5.30.0 ou posterior, exceto a versão emr-6.0.0.

  4. Na opção Escalabilidade e provisionamento de clusters, escolha Usar EMR escalabilidade gerenciada. Especifique o número mínimo e máximo de instâncias, o máximo de instâncias do nó central e o máximo de instâncias sob demanda.

  5. Escolha qualquer outra opção que se aplique ao cluster.

  6. Para iniciar o cluster, escolha Criar cluster.

Para configurar o ajuste de escala gerenciado em um cluster existente usando o console
  1. Faça login no e abra AWS Management Console o EMR console da Amazon em https://console.aws.amazon.com/emr.

  2. EMREC2Em Ativado, no painel de navegação esquerdo, escolha Clusters e selecione o cluster que você deseja atualizar.

  3. Na guia Instâncias da página de detalhes do cluster, encontre a seção Configurações do grupo de instâncias. Na seção Editar ajuste de escala do cluster, especifique novos valores para os números Mínimo e Máximo de instâncias e o limite Sob demanda.

Use o AWS CLI para configurar o escalonamento gerenciado

Você pode usar AWS CLI comandos da Amazon EMR para configurar a escalabilidade gerenciada ao criar um cluster. 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 Também é possível aplicar uma política de escalabilidade gerenciada a um cluster existente e remover uma política de escalabilidade gerenciada 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.

Habilitar a escalabilidade gerenciada durante a execução do cluster

É possível habilitar a escalabilidade gerenciada durante a execução do cluster, conforme demonstra o exemplo a seguir.

aws emr create-cluster \ --service-role EMR_DefaultRole \ --release-label emr-7.5.0 \ --name EMR_Managed_Scaling_Enabled_Cluster \ --applications Name=Spark Name=Hbase \ --ec2-attributes KeyName=keyName,InstanceProfile=EMR_EC2_DefaultRole \ --instance-groups InstanceType=m4.xlarge,InstanceGroupType=MASTER,InstanceCount=1 InstanceType=m4.xlarge,InstanceGroupType=CORE,InstanceCount=2 \ --region us-east-1 \ --managed-scaling-policy ComputeLimits='{MinimumCapacityUnits=2,MaximumCapacityUnits=4,UnitType=Instances}'

Você também pode especificar uma configuração de política gerenciada usando a managed-scaling-policy opção -- ao usarcreate-cluster.

Aplicar uma política de escalabilidade gerenciada a um cluster existente

É possível aplicar uma política de escalabilidade gerenciada a um cluster existente, conforme demonstra o exemplo a seguir.

aws emr put-managed-scaling-policy --cluster-id j-123456 --managed-scaling-policy ComputeLimits='{MinimumCapacityUnits=1, MaximumCapacityUnits=10, MaximumOnDemandCapacityUnits=10, UnitType=Instances}'

Também é possível aplicar uma política de escalabilidade gerenciada a um cluster existente usando o comando aws emr put-managed-scaling-policy. O exemplo a seguir usa uma referência a um JSON arquivo,managedscaleconfig.json, que especifica a configuração da política de escalabilidade gerenciada.

aws emr put-managed-scaling-policy --cluster-id j-123456 --managed-scaling-policy file://./managedscaleconfig.json

O exemplo a seguir mostra o conteúdo do arquivo managedscaleconfig.json, que define a política de escalabilidade gerenciada.

{ "ComputeLimits": { "UnitType": "Instances", "MinimumCapacityUnits": 1, "MaximumCapacityUnits": 10, "MaximumOnDemandCapacityUnits": 10 } }

Recuperar uma configuração de política de escalabilidade gerenciada

O comando GetManagedScalingPolicy recupera a configuração da política. Por exemplo, o comando a seguir recupera a configuração de um cluster com o ID j-123456.

aws emr get-managed-scaling-policy --cluster-id j-123456

Este comando gera o seguinte exemplo de saída.

{ "ManagedScalingPolicy": { "ComputeLimits": { "MinimumCapacityUnits": 1, "MaximumOnDemandCapacityUnits": 10, "MaximumCapacityUnits": 10, "UnitType": "Instances" } } }

Para obter mais informações sobre o uso dos EMR comandos da Amazon no AWS CLI, consultehttps://docs.aws.amazon.com/cli/latest/reference/emr.

Remover a política de escalabilidade gerenciada

O comando RemoveManagedScalingPolicy remove a configuração da política. Por exemplo, o comando a seguir remove a configuração de um cluster com o ID j-123456.

aws emr remove-managed-scaling-policy --cluster-id j-123456

Use AWS SDK for Java para configurar o escalonamento gerenciado

O trecho do programa a seguir mostra como configurar a escalabilidade gerenciada usando o AWS SDK for Java:

package com.amazonaws.emr.sample; import java.util.ArrayList; import java.util.List; import com.amazonaws.AmazonClientException; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.elasticmapreduce.AmazonElasticMapReduce; import com.amazonaws.services.elasticmapreduce.AmazonElasticMapReduceClientBuilder; import com.amazonaws.services.elasticmapreduce.model.Application; import com.amazonaws.services.elasticmapreduce.model.ComputeLimits; import com.amazonaws.services.elasticmapreduce.model.ComputeLimitsUnitType; import com.amazonaws.services.elasticmapreduce.model.InstanceGroupConfig; import com.amazonaws.services.elasticmapreduce.model.JobFlowInstancesConfig; import com.amazonaws.services.elasticmapreduce.model.ManagedScalingPolicy; import com.amazonaws.services.elasticmapreduce.model.RunJobFlowRequest; import com.amazonaws.services.elasticmapreduce.model.RunJobFlowResult; public class CreateClusterWithManagedScalingWithIG { public static void main(String[] args) { AWSCredentials credentialsFromProfile = getCreadentials("AWS-Profile-Name-Here"); /** * Create an Amazon EMR client with the credentials and region specified in order to create the cluster */ AmazonElasticMapReduce emr = AmazonElasticMapReduceClientBuilder.standard() .withCredentials(new AWSStaticCredentialsProvider(credentialsFromProfile)) .withRegion(Regions.US_EAST_1) .build(); /** * Create Instance Groups - Primary, Core, Task */ InstanceGroupConfig instanceGroupConfigMaster = new InstanceGroupConfig() .withInstanceCount(1) .withInstanceRole("MASTER") .withInstanceType("m4.large") .withMarket("ON_DEMAND"); InstanceGroupConfig instanceGroupConfigCore = new InstanceGroupConfig() .withInstanceCount(4) .withInstanceRole("CORE") .withInstanceType("m4.large") .withMarket("ON_DEMAND"); InstanceGroupConfig instanceGroupConfigTask = new InstanceGroupConfig() .withInstanceCount(5) .withInstanceRole("TASK") .withInstanceType("m4.large") .withMarket("ON_DEMAND"); List<InstanceGroupConfig> igConfigs = new ArrayList<>(); igConfigs.add(instanceGroupConfigMaster); igConfigs.add(instanceGroupConfigCore); igConfigs.add(instanceGroupConfigTask); /** * specify applications to be installed and configured when Amazon EMR creates the cluster */ Application hive = new Application().withName("Hive"); Application spark = new Application().withName("Spark"); Application ganglia = new Application().withName("Ganglia"); Application zeppelin = new Application().withName("Zeppelin"); /** * Managed Scaling Configuration - * Using UnitType=Instances for clusters composed of instance groups * * Other options are: * UnitType = VCPU ( for clusters composed of instance groups) * UnitType = InstanceFleetUnits ( for clusters composed of instance fleets) **/ ComputeLimits computeLimits = new ComputeLimits() .withMinimumCapacityUnits(1) .withMaximumCapacityUnits(20) .withUnitType(ComputeLimitsUnitType.Instances); ManagedScalingPolicy managedScalingPolicy = new ManagedScalingPolicy(); managedScalingPolicy.setComputeLimits(computeLimits); // create the cluster with a managed scaling policy RunJobFlowRequest request = new RunJobFlowRequest() .withName("EMR_Managed_Scaling_TestCluster") .withReleaseLabel("emr-7.5.0") // Specifies the version label for the Amazon EMR release; we recommend the latest release .withApplications(hive,spark,ganglia,zeppelin) .withLogUri("s3://path/to/my/emr/logs") // A URI in S3 for log files is required when debugging is enabled. .withServiceRole("EMR_DefaultRole") // If you use a custom IAM service role, replace the default role with the custom role. .withJobFlowRole("EMR_EC2_DefaultRole") // If you use a custom Amazon EMR role for EC2 instance profile, replace the default role with the custom Amazon EMR role. .withInstances(new JobFlowInstancesConfig().withInstanceGroups(igConfigs) .withEc2SubnetId("subnet-123456789012345") .withEc2KeyName("my-ec2-key-name") .withKeepJobFlowAliveWhenNoSteps(true)) .withManagedScalingPolicy(managedScalingPolicy); RunJobFlowResult result = emr.runJobFlow(request); System.out.println("The cluster ID is " + result.toString()); } public static AWSCredentials getCredentials(String profileName) { // specifies any named profile in .aws/credentials as the credentials provider try { return new ProfileCredentialsProvider("AWS-Profile-Name-Here") .getCredentials(); } catch (Exception e) { throw new AmazonClientException( "Cannot load credentials from .aws/credentials file. " + "Make sure that the credentials file exists and that the profile name is defined within it.", e); } } public CreateClusterWithManagedScalingWithIG() { } }