Konfigurasikan penskalaan terkelola untuk Amazon EMR - Amazon EMR

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Konfigurasikan penskalaan terkelola untuk Amazon EMR

Bagian berikut menjelaskan cara meluncurkan cluster EMR yang menggunakan penskalaan terkelola dengan AWS Management Console,, atau. AWS SDK untuk Java AWS Command Line Interface

Gunakan AWS Management Console untuk mengonfigurasi penskalaan terkelola

Anda dapat menggunakan konsol EMR Amazon untuk mengonfigurasi penskalaan terkelola saat membuat klaster atau mengubah kebijakan penskalaan terkelola untuk klaster yang sedang berjalan.

Console
Untuk mengonfigurasi penskalaan terkelola saat Anda membuat klaster dengan konsol
  1. Masuk ke AWS Management Console, dan buka konsol EMR Amazon di https://console.aws.amazon.com /emr.

  2. Di bawah EMR EC2 di panel navigasi kiri, pilih Clusters, lalu pilih Create cluster.

  3. Pilih rilis EMR Amazon emr-5.30.0 atau yang lebih baru, kecuali versi emr-6.0.0.

  4. Di bawah opsi penskalaan dan penyediaan klaster, pilih Gunakan penskalaan yang dikelola EMR. Tentukan jumlah instans Minimum dan Maksimum, instans node inti Maksimum, dan instans Sesuai Permintaan Maksimum.

  5. Pilih opsi lain yang berlaku untuk cluster Anda.

  6. Untuk meluncurkan klaster Anda, pilih Buat klaster.

Untuk mengonfigurasi penskalaan terkelola pada cluster yang ada dengan konsol
  1. Masuk ke AWS Management Console, dan buka konsol EMR Amazon di https://console.aws.amazon.com /emr.

  2. Di bawah EMR EC2 di panel navigasi kiri, pilih Clusters, dan pilih cluster yang ingin Anda perbarui.

  3. Pada tab Instans pada halaman detail klaster, temukan bagian Pengaturan grup Instans. Pilih Edit penskalaan klaster untuk menentukan nilai baru untuk Jumlah instans Minimum dan Maksimum serta batas Sesuai Permintaan.

Gunakan AWS CLI untuk mengonfigurasi penskalaan terkelola

Anda dapat menggunakan AWS CLI perintah untuk Amazon EMR untuk mengonfigurasi penskalaan terkelola saat membuat klaster. Anda dapat menggunakan sintaks steno, menentukan konfigurasi JSON inline dalam perintah yang relevan, atau Anda dapat mereferensikan file yang berisi konfigurasi JSON. Anda juga dapat menerapkan kebijakan penskalaan terkelola ke klaster yang ada dan menghapus kebijakan penskalaan terkelola yang sebelumnya diterapkan. Selain itu, Anda dapat mengambil detail konfigurasi kebijakan penskalaan dari klaster berjalan.

Mengaktifkan Penskalaan Terkelola Selama Peluncuran Cluster

Anda dapat mengaktifkan penskalaan terkelola selama peluncuran klaster sebagaimana yang ditunjukkan oleh contoh berikut.

aws emr create-cluster \ --service-role EMR_DefaultRole \ --release-label emr-7.10.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}'

Anda juga dapat menentukan konfigurasi kebijakan terkelola menggunakan managed-scaling-policy opsi -- saat Anda menggunakancreate-cluster.

Menerapkan Kebijakan Penskalaan Terkelola ke Cluster yang Ada

Anda dapat menerapkan kebijakan penskalaan terkelola ke klaster yang ada sebagaimana yang ditunjukkan oleh contoh berikut.

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

Anda juga dapat menerapkan kebijakan penskalaan terkelola ke klaster yang sudah ada dengan menggunakan perintah aws emr put-managed-scaling-policy. Contoh berikut menggunakan referensi ke file JSON, managedscaleconfig.json, yang menentukan konfigurasi kebijakan penskalaan terkelola.

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

Contoh berikut menunjukkan isi file managedscaleconfig.json, yang mendefinisikan kebijakan penskalaan terkelola.

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

Mengambil Konfigurasi Kebijakan Penskalaan Terkelola

Perintah GetManagedScalingPolicy mengambil konfigurasi kebijakan. Sebagai contoh, perintah berikut ini mengambil konfigurasi untuk klaster dengan ID klaster j-123456.

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

Perintah tersebut menghasilkan output seperti berikut ini.

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

Untuk informasi selengkapnya tentang menggunakan perintah EMR Amazon di AWS CLI, lihat. https://docs.aws.amazon.com/cli/latest/reference/emr

Menghapus Kebijakan Penskalaan Terkelola

Perintah RemoveManagedScalingPolicy menghapus konfigurasi kebijakan. Sebagai contoh, perintah berikut menghapus konfigurasi untuk klaster dengan ID klaster j-123456.

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

Gunakan AWS SDK untuk Java untuk mengonfigurasi penskalaan terkelola

Kutipan program berikut menunjukkan cara mengkonfigurasi penskalaan terkelola menggunakan AWS SDK untuk 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.10.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() { } }