

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

# Amazon EMR 클러스터에 대한 균일한 인스턴스 그룹 구성
<a name="emr-uniform-instance-group"></a>

인스턴스 그룹 구성을 사용하는 경우 각 노드 유형(마스터, 코어 또는 작업)은 인스턴스에 대해 동일한 인스턴스 유형 및 구매 옵션으로 구성됩니다(온디맨드 또는 스팟). 인스턴스 그룹 생성 시 이러한 설정을 지정합니다. 나중에 변경할 수 없습니다. 하지만 동일한 유형 및 구매 옵션의 인스턴스를 코어 및 작업 인스턴스 그룹에 추가할 수 있습니다. 또한 인스턴스를 제거할 수도 있습니다.

클러스터의 온디맨드 인스턴스가 계정에서 사용할 수 있는 열린 용량 예약 속성(인스턴스 유형, 플랫폼, 테넌시 및 가용 영역)과 일치하면 용량 예약이 자동으로 적용됩니다. 프라이머리, 코어 및 태스크 노드에 대해 열린 용량 예약을 사용할 수 있습니다. 하지만 인스턴스 그룹을 사용하여 클러스터를 프로비저닝할 때 목표 용량 예약을 사용할 수 없으며, 속성이 일치하는 열린 용량 예약으로 시작하지 않도록 인스턴스를 막을 수도 없습니다. 목표 용량 예약을 사용하거나 인스턴스가 열린 용량 예약으로 시작되지 않도록 하려면 대신 인스턴스 플릿을 사용합니다. 자세한 내용은 [Amazon EMR의 인스턴스 플릿에서 용량 예약 사용](on-demand-capacity-reservations.md) 단원을 참조하십시오.

클러스터를 생성한 후 다른 인스턴스 유형을 추가하려면 추가 작업 인스턴스 그룹을 추가하면 됩니다. 각 인스턴스 그룹에 대하여 다른 인스턴스 유형과 구매 옵션을 선택할 수 있습니다. 자세한 내용은 [Amazon EMR 클러스터 조정을 사용하여 워크로드 변경에 맞게 조정](emr-scale-on-demand.md) 단원을 참조하십시오.

인스턴스를 시작할 때 온디맨드 인스턴스의 용량 예약 기본 설정은 기본적으로 `open`으로 설정되며, 이를 통해 속성(인스턴스 유형, 플랫폼, 가용 영역)이 일치하는 모든 열린 용량 예약에서 실행됩니다. 온디맨드 용량 예약에 대한 자세한 내용은 [Amazon EMR의 인스턴스 플릿에서 용량 예약 사용](on-demand-capacity-reservations.md) 섹션을 참조하세요.

이 섹션에서는 균일한 인스턴스 그룹으로 클러스터를 만드는 방법에 대해 설명합니다. 인스턴스 수동 추가/제거 또는 자동 조정을 통한 기존 인스턴스 그룹 수정에 대한 자세한 내용은 [Amazon EMR 클러스터 관리](emr-manage.md) 섹션을 참조하세요.

## 콘솔을 사용하여 균일한 인스턴스 그룹 구성
<a name="emr-uniform-instance-group-console"></a>

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

**새 콘솔을 사용하여 인스턴스 그룹을 포함하는 클러스터를 생성하는 방법**

1. 에 로그인 AWS Management Console하고 [https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr) Amazon EMR 콘솔을 엽니다.

1. 왼쪽 탐색 창의 **EMR on EC2**에서 **클러스터**를 선택하고 **클러스터 생성**을 선택합니다.

1. **클러스터 구성**에서 **인스턴스 그룹**을 선택합니다.

1. **노드 그룹** 아래에는 각 노드 그룹 유형에 대한 섹션이 있습니다. 프라이머리 노드 그룹의 경우 프라이머리 노드 3개를 사용하려는 경우 **여러 프라이머리 노드 사용** 확인란을 선택합니다. 스팟 구매를 사용하려면 **스팟 구매 옵션 사용** 확인란을 선택합니다.

1. 프라이머리 및 코어 노드 그룹의 경우 **인스턴스 유형 추가**를 선택하고 최대 5개의 인스턴스 유형을 선택합니다. 태스크 그룹의 경우 **인스턴스 유형 추가**를 선택하고 최대 15개의 인스턴스 유형을 선택합니다. Amazon EMR은 클러스터를 시작할 때 이러한 인스턴스 유형을 원하는 대로 조합하여 프로비저닝할 수 있습니다.

1. 각 노드 그룹 유형에서 각 인스턴스 옆에 있는 **작업** 드롭다운 메뉴를 선택하여 다음 설정을 변경합니다.  
**EBS 볼륨 추가**  
Amazon EMR에서 프로비저닝한 후 인스턴스 유형에 연결할 EBS 볼륨을 지정합니다.  
**최고 스팟 가격 편집**  
플릿에서 인스턴스 유형에 대해 최고 스팟 가격을 지정합니다. 이 가격을 온디맨드 가격의 백분율로 설정하거나 구체적 금액(USD)으로 설정할 수 있습니다. 가용 영역의 현재 스팟 가격이 최고 스팟 가격 미만인 경우 Amazon EMR은 스팟 인스턴스를 프로비저닝합니다. 사용자는 스팟 가격을 지불합니다. 꼭 최고 스팟 가격인 것은 아닙니다.

1. 선택적으로 **노드 구성**을 확장하여 JSON 구성을 입력하거나 Amazon S3에서 JSON을 로드합니다.

1. 클러스터에 적용할 다른 옵션을 선택합니다.

1. 클러스터를 시작하려면 **클러스터 생성**을 선택합니다.

------

## AWS CLI 를 사용하여 균일한 인스턴스 그룹으로 클러스터 생성
<a name="emr-uniform-instance-group-cli"></a>

 AWS CLI를 사용하여 클러스터의 인스턴스 그룹 구성을 지정하려면 `--instance-groups` 파라미터와 함께 `create-cluster` 명령을 사용합니다. 인스턴스 그룹에 `BidPrice` 인수를 지정하지 않은 경우 Amazon EMR은 온디맨드 인스턴스 옵션을 가정합니다. 온디맨드 인스턴스 및 다양한 클러스터 옵션을 사용하여 균일한 인스턴스 그룹을 시작하는 `create-cluster` 명령의 예제를 보려면 명령줄에 `aws emr create-cluster help `를 입력하거나 *AWS CLI 명령 참조*에서 [create-cluster](https://docs.aws.amazon.com/cli/latest/reference/emr/create-cluster.html)를 참조하세요.

를 사용하여 스팟 인스턴스 AWS CLI 를 사용하는 클러스터에서 균일한 인스턴스 그룹을 생성할 수 있습니다. 제공된 스팟 가격은 가용 영역에 따라 달라집니다. CLI 또는 API를 사용하는 경우 `--ec2-attributes ` 파라미터의 `SubnetID ` 인수 또는 `AvailabilityZone` 인수(EC2-classic 네트워크를 사용하는 경우)를 사용하여 가용 영역을 지정할 수 있습니다. 선택한 가용 영역이나 서브넷이 클러스터에 적용되므로 모든 인스턴스 그룹에 사용됩니다. 가용 영역이나 서브넷을 명시적으로 지정하지 않는 경우 Amazon EMR이 클러스터를 시작할 때 최저 스팟 가격으로 가용 영역을 선택합니다.

다음 예제에서는 모두 스팟 인스턴스를 사용하는 프라이머리, 코어 및 두 태스크 인스턴스 그룹을 생성하는 `create-cluster` 명령을 보여줍니다. *myKey*를 Amazon EC2 키 페어 이름으로 바꿉니다.

**참고**  
가독성을 위해 Linux 줄 연속 문자(\$1)가 포함됩니다. Linux 명령에 사용하거나 제외할 수 있습니다. Windows에서는 제외시키거나 캐럿(^)으로 바꿉니다.

```
aws emr create-cluster --name "MySpotCluster" \
  --release-label emr-7.12.0 \
  --use-default-roles \
  --ec2-attributes KeyName=myKey \
  --instance-groups \
    InstanceGroupType=MASTER,InstanceType=m5.xlarge,InstanceCount=1,BidPrice=0.25 \
    InstanceGroupType=CORE,InstanceType=m5.xlarge,InstanceCount=2,BidPrice=0.03 \
    InstanceGroupType=TASK,InstanceType=m5.xlarge,InstanceCount=4,BidPrice=0.03 \
    InstanceGroupType=TASK,InstanceType=m5.xlarge,InstanceCount=2,BidPrice=0.04
```

CLI를 사용하여 인스턴스 그룹의 각 인스턴스 유형에 대해 고유한 사용자 지정 AMI를 지정하는 균일한 인스턴스 그룹 클러스터를 생성할 수 있습니다. 이렇게 하면 동일한 인스턴스 그룹에서 서로 다른 인스턴스 아키텍처를 사용할 수 있습니다. 각 인스턴스 유형은 아키텍처가 일치하는 사용자 지정 AMI를 사용해야 합니다. 예를 들어, x86\$164 아키텍처 사용자 지정 AMI를 사용하여 m5.xlarge 인스턴스 유형을 구성하고, 대응하는 `AWS AARCH64`(ARM) 아키텍처 사용자 지정 AMI를 사용하여 m6g.xlarge 인스턴스 유형을 구성할 수 있습니다.

다음 예제에서는 각각 고유한 사용자 지정 AMI를 사용하여 두 개의 인스턴스 유형으로 생성된 균일한 인스턴스 그룹 클러스터를 보여줍니다. 사용자 지정 AMI는 클러스터 수준이 아닌 인스턴스 유형 수준에서만 지정됩니다. 인스턴스 유형 AMI와 클러스터 수준의 AMI 간 충돌(이 충돌로 인해 클러스터가 시작되지 않음)을 방지하기 위해서입니다.

```
aws emr create-cluster
  --release-label emr-5.30.0 \
  --service-role EMR_DefaultRole \
  --ec2-attributes SubnetId=subnet-22XXXX01,InstanceProfile=EMR_EC2_DefaultRole \
  --instance-groups \
    InstanceGroupType=MASTER,InstanceType=m5.xlarge,InstanceCount=1,CustomAmiId=ami-123456 \
    InstanceGroupType=CORE,InstanceType=m6g.xlarge,InstanceCount=1,CustomAmiId=ami-234567
```

실행 중인 클러스터에 추가하는 인스턴스 그룹에 다중 사용자 지정 AMI를 추가할 수 있습니다. 다음 예제와 같이 `add-instance-groups` 명령과 함께 `CustomAmiId` 인수를 사용할 수 있습니다.

```
aws emr add-instance-groups --cluster-id j-123456 \
  --instance-groups \
    InstanceGroupType=Task,InstanceType=m5.xlarge,InstanceCount=1,CustomAmiId=ami-123456
```

## Java SDK를 사용하여 인스턴스 그룹 생성
<a name="emr-instance-group-sdk"></a>

클러스터에 대해 인스턴스 그룹의 구성을 지정하는 `InstanceGroupConfig` 개체를 인스턴스화할 수 있습니다. 스팟 인스턴스를 사용하려면 `withBidPrice` 개체에 대해 `withMarket` 및 `InstanceGroupConfig` 속성을 설정합니다. 다음 코드는 스팟 인스턴스를 실행하는 프라이머리, 코어 및 태스크 인스턴스 그룹을 정의하는 방법을 보여줍니다.

```
InstanceGroupConfig instanceGroupConfigMaster = new InstanceGroupConfig()
	.withInstanceCount(1)
	.withInstanceRole("MASTER")
	.withInstanceType("m4.large")
	.withMarket("SPOT")
	.withBidPrice("0.25"); 
	
InstanceGroupConfig instanceGroupConfigCore = new InstanceGroupConfig()
	.withInstanceCount(4)
	.withInstanceRole("CORE")
	.withInstanceType("m4.large")
	.withMarket("SPOT")
	.withBidPrice("0.03");
	
InstanceGroupConfig instanceGroupConfigTask = new InstanceGroupConfig()
	.withInstanceCount(2)
	.withInstanceRole("TASK")
	.withInstanceType("m4.large")
	.withMarket("SPOT")
	.withBidPrice("0.10");
```