

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon EMR のマネージドスケーリングを設定する
<a name="managed-scaling-configure"></a>

以下のセクションでは、 AWS マネジメントコンソール、、 AWS SDK for Javaまたは でマネージドスケーリングを使用する EMR クラスターを起動する方法について説明します AWS Command Line Interface。

**Topics**
+ [AWS マネジメントコンソール を使用してマネージドスケーリングを設定する](#managed-scaling-console)
+ [AWS CLI を使用してマネージドスケーリングを設定する](#managed-scaling-cli)
+ [AWS SDK for Java を使用してマネージドスケーリングを設定する](#managed-scaling-sdk)

## AWS マネジメントコンソール を使用してマネージドスケーリングを設定する
<a name="managed-scaling-console"></a>

Amazon EMR コンソールを使用して、クラスターの作成時にマネージドスケーリングを設定したり、実行中のクラスターのマネージドスケーリングポリシーを変更したりできます。

------
#### [ Console ]

**コンソールを使用して、クラスターの作成時にマネージドスケーリングを設定するには**

1. にサインインし AWS マネジメントコンソール、[https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr) で Amazon EMR コンソールを開きます。

1. 左側のナビゲーションペインの **[EMR on EC2]** で、**[クラスター]** を選択し、**[クラスターの作成]** を選択します

1. Amazon EMR リリース **[emr-5.30.0]** 以降を選択します。ただし、バージョン **[emr-6.0.0]** は除きます。

1. **[クラスターのスケーリングとプロビジョニングのオプション]** で **[EMR マネージドスケーリングを使用]** を選択します。インスタンスの **[最小]** 数と **[最大]** 数、**[最大コアノード]** インスタンス、**[最大オンデマンド]** インスタンスを指定します。

1. クラスターに適用するその他のオプションを選択します。

1. クラスターを起動するには、**[クラスターの作成]** を選択します。

**コンソールを使用して既存のクラスターにマネージドスケーリングを設定するには**

1. にサインインし AWS マネジメントコンソール、[https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr) で Amazon EMR コンソールを開きます。

1. 左側のナビゲーションペインの **[EMR on EC2]** で **[クラスター]** を選択し、更新するクラスターを選択します。

1. クラスターの詳細ページの **[インスタンス]** タブで、**[インスタンスグループ設定]** セクションを見つけます。**[クラスタースケーリングを編集]** を選択し、インスタンスの **[最小]** 数と **[最大]** 数、および **[オンデマンド]** 制限に新しい値を指定します。

------

## AWS CLI を使用してマネージドスケーリングを設定する
<a name="managed-scaling-cli"></a>

Amazon EMR の AWS CLI コマンドを使用して、クラスターの作成時にマネージドスケーリングを設定できます。短縮構文を使用して、関連コマンドのインラインで JSON 設定を指定したり、設定 JSON を含むファイルを参照したりできます。また、既存のクラスターにマネージドスケーリングポリシーを適用して、以前に適用したマネージドスケーリングポリシーを削除することもできます。さらに、スケーリングポリシーの詳細設定を実行中のクラスターから取得できます。

**クラスター起動時にマネージドスケーリングを有効化する**

マネージドスケーリングは、次の例で示すように、クラスターの起動時に有効にできます。

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

`create-cluster` を使用する場合は、--managed-scaling-policy オプションを使用して、マネージドポリシー設定を指定することもできます。

**既存のクラスターへのマネージドスケーリングポリシーの適用**

マネージドスケーリングポリシーは、次の例で示すように、既存のクラスターに適用できます。

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

`aws emr put-managed-scaling-policy` コマンドを使用して、マネージドスケーリングポリシーを既存のクラスターに適用することもできます。次の例では、マネージドスケーリングポリシー設定を指定する JSON ファイル `managedscaleconfig.json` への参照を使用します。

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

次の例は、マネージドスケーリングポリシーを定義する `managedscaleconfig.json` ファイルの内容を示しています。

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

**マネージドスケーリングポリシー設定の取得**

`GetManagedScalingPolicy` コマンドを使用すると、ポリシー設定を取得できます。たとえば、次のコマンドは、クラスター ID `j-123456` を持つクラスターの設定を取得します。

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

このコマンドでは、次のサンプルアウトプットが生成されます。

```
 1. {
 2.    "ManagedScalingPolicy": { 
 3.       "ComputeLimits": { 
 4.          "MinimumCapacityUnits": 1,
 5.          "MaximumOnDemandCapacityUnits": 10,
 6.          "MaximumCapacityUnits": 10,
 7.          "UnitType": "Instances"
 8.       }
 9.    }
10. }
```

での Amazon EMR コマンドの使用の詳細については AWS CLI、「」を参照してください[https://docs.aws.amazon.com/cli/latest/reference/emr](https://docs.aws.amazon.com/cli/latest/reference/emr)。

**マネージドスケーリングポリシーの削除**

`RemoveManagedScalingPolicy` コマンドを使用すると、ポリシー設定を削除できます。たとえば、次のコマンドでは、クラスター ID `j-123456` を持つクラスターの設定を削除します。

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

## AWS SDK for Java を使用してマネージドスケーリングを設定する
<a name="managed-scaling-sdk"></a>

以下のプログラム抜粋では、 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.12.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() { }
}
```