

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon EMR에 대한 관리형 조정 구성
<a name="managed-scaling-configure"></a>

다음 섹션에서는 AWS Management Console AWS SDK for Java, 또는를 사용하여 관리형 조정을 사용하는 EMR 클러스터를 시작하는 방법을 설명합니다 AWS Command Line Interface.

**Topics**
+ [AWS Management Console 를 사용하여 관리형 조정 구성](#managed-scaling-console)
+ [AWS CLI 를 사용하여 관리형 조정 구성](#managed-scaling-cli)
+ [AWS SDK for Java 를 사용하여 관리형 조정 구성](#managed-scaling-sdk)

## AWS Management Console 를 사용하여 관리형 조정 구성
<a name="managed-scaling-console"></a>

Amazon EMR 콘솔을 사용하여 클러스터를 생성할 때 Managed Scaling을 구성하거나 실행 중인 클러스터의 Managed Scaling 정책을 변경할 수 있습니다.

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

**콘솔을 사용하여 클러스터를 생성할 때 관리형 조정을 구성하는 방법**

1. 에 로그인 AWS Management Console하고 [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 Management Console하고 [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`를 사용할 때 관리형 조정 정책 옵션을 사용하여 관리형 정책 구성을 지정할 수도 있습니다.

**기존 클러스터에 관리형 조정 정책 적용**

다음 예제에서 보여주듯이 관리형 조정 정책을 기존 클러스터에 적용할 수 있습니다.

```
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() { }
}
```