

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

# Amazon EMR과 EC2 배치 그룹 통합
<a name="emr-plan-ha-placementgroup"></a>

Amazon EC2에서 Amazon EMR의 여러 프라이머리 노드 클러스터를 시작하는 경우 배치 그룹 전략을 사용하여 하드웨어 장애로부터 보호하기 위해 프라이머리 노드 인스턴스를 배포하는 방법을 지정할 수 있습니다.

배치 그룹 전략은 여러 프라이머리 노드 클러스터의 옵션으로 Amazon EMR 버전 5.23.0부터 지원됩니다. 현재 배치 그룹 전략에서는 프라이머리 노드 유형만 지원되며 해당 프라이머리 노드에는 `SPREAD` 전략이 적용됩니다. `SPREAD` 전략은 하드웨어 장애 발생 시 여러 프라이머리 노드의 손실을 방지하기 위해 별도의 기본 하드웨어에 작은 그룹의 인스턴스를 배치합니다. 요청을 이행하기에 충분한 고유 하드웨어가 없으면 인스턴스 시작 요청에 실패할 수 있습니다. EC2 배치 전략 및 제한 사항에 대한 자세한 내용은 *EC2 Linux 인스턴스용 사용 설명서*에서 [배치 그룹](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html)을 참조하세요.

Amazon EC2에는 AWS 리전별로 시작할 수 있는 배치 그룹 전략 지원 클러스터 500개로 초기 제한이 있습니다. AWS 지원팀에 문의하여 허용되는 배치 그룹 수 증가를 요청합니다. Amazon EMR이 Amazon EMR 배치 그룹 전략에 연결하는 키-값 페어를 추적하여 Amazon EMR이 생성하는 EC2 배치 그룹을 식별할 수 있습니다. EC2 클러스터 인스턴스 유형에 대한 자세한 내용은 [Amazon EC2에서 클러스터 인스턴스 보기](UsingEMR_Tagging.md) 섹션을 참조하세요.

## 배치 그룹 관리형 정책을 Amazon EMR 역할에 연결
<a name="emr-plan-ha-launch-pg-policy"></a>

배치 그룹 전략에는 Amazon EMR이 Amazon EC2에 배치 그룹을 생성, 삭제 및 설명할 수 있도록 허용하는 관리형 정책(`AmazonElasticMapReducePlacementGroupPolicy`)이 필요합니다. 복수의 프라이머리 노드가 있는 Amazon EMR 클러스터를 시작하기 전에 Amazon EMR의 서비스 역할에 `AmazonElasticMapReducePlacementGroupPolicy`를 연결해야 합니다.

배치 그룹 관리형 정책 대신 Amazon EMR 서비스 역할에 `AmazonEMRServicePolicy_v2` 관리형 정책을 연결할 수도 있습니다. `AmazonEMRServicePolicy_v2`에서는 동일한 Amazon EC2의 배치 그룹에 대해 `AmazonElasticMapReducePlacementGroupPolicy`와 동일한 액세스를 허용합니다. 자세한 내용은 [Amazon EMR의 서비스 역할(EMR 역할)](emr-iam-role.md) 단원을 참조하십시오.

`AmazonElasticMapReducePlacementGroupPolicy` 관리형 정책은 Amazon EMR에서 생성 및 관리하는 다음과 같은 JSON 텍스트입니다.

**참고**  
`AmazonElasticMapReducePlacementGroupPolicy` 관리형 정책은 자동으로 업데이트되므로 여기 표시된 정책은 최신 상태가 아닐 수 있습니다. AWS 관리 콘솔을 사용하여 현재 정책을 봅니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Resource": [
        "*"
      ],
      "Effect": "Allow",
      "Action": [
        "ec2:DeletePlacementGroup",
        "ec2:DescribePlacementGroups"
      ],
      "Sid": "AllowEC2Deleteplacementgroup"
    },
    {
      "Resource": [
        "arn:aws:ec2:*:*:placement-group/pg-*"
      ],
      "Effect": "Allow",
      "Action": [
        "ec2:CreatePlacementGroup"
      ],
      "Sid": "AllowEC2Createplacementgroup"
    }
  ]
}
```

------

## 배치 그룹 전략을 사용하여 복수의 프라이머리 노드가 있는 Amazon EMR 클러스터 시작
<a name="emr-plan-ha-launch-pg-strategy"></a>

배치 그룹 전략을 사용하여 복수의 프라이머리 노드가 있는 Amazon EMR 클러스터를 시작하려면 배치 그룹 관리형 정책 `AmazonElasticMapReducePlacementGroupPolicy`를 Amazon EMR 역할에 연결합니다. 자세한 내용은 [배치 그룹 관리형 정책을 Amazon EMR 역할에 연결](#emr-plan-ha-launch-pg-policy) 단원을 참조하십시오.

이 역할을 사용하여 복수의 프라이머리 노드가 있는 Amazon EMR 클러스터를 시작할 때마다 Amazon EMR은 프라이머리 노드에 `SPREAD` 전략을 적용하여 클러스터를 시작하려고 시도합니다. 배치 그룹 관리형 정책 `AmazonElasticMapReducePlacementGroupPolicy`이 연결되지 않은 역할을 사용하는 경우 Amazon EMR은 배치 그룹 전략 없이 복수의 프라이머리 노드가 있는 Amazon EMR 클러스터를 시작하려고 합니다.

Amazon EMR API 또는 CLI를 사용하여 `placement-group-configs` 파라미터가 포함된 복수의 프라이머리 노드가 있는 Amazon EMR 클러스터를 시작하는 경우, Amazon EMR 역할에 배치 그룹 관리형 정책 `AmazonElasticMapReducePlacementGroupPolicy`가 연결된 경우에만 Amazon EMR이 클러스터를 시작합니다. Amazon EMRrole에 정책이 연결되어 있지 않은 경우 복수의 프라이머리 노드가 있는 Amazon EMR 클러스터가 시작되지 않습니다.

------
#### [ Amazon EMR API ]

**Example 예 – 배치 그룹 전략을 사용하여 Amazon EMR API에서 제공되는 여러 프라이머리 노드가 있는 인스턴스 그룹 클러스터를 시작합니다.**  
RunJobFlow 작업을 사용하여 복수의 프라이머리 노드가 있는 Amazon EMR 클러스터를 생성하는 경우 `PlacementGroupConfigs` 속성을 다음과 같이 설정합니다. 현재 `MASTER` 인스턴스 역할은 자동으로 배치 그룹 전략으로 `SPREAD`를 사용합니다.  

```
{
   "Name":"ha-cluster",
   "PlacementGroupConfigs":[
      {
         "InstanceRole":"MASTER"
      }
   ],
   "ReleaseLabel": emr-6.15.0,
   "Instances":{
      "ec2SubnetId":"subnet-22XXXX01",
      "ec2KeyName":"ec2_key_pair_name",
      "InstanceGroups":[
         {
            "InstanceCount":3,
            "InstanceRole":"MASTER",
            "InstanceType":"m5.xlarge"
         },
         {
            "InstanceCount":4,
            "InstanceRole":"CORE",
            "InstanceType":"m5.xlarge"
         }
      ]
   },
   "JobFlowRole":"EMR_EC2_DefaultRole",
   "ServiceRole":"EMR_DefaultRole"
}
```
+ *ha-cluster*를 고가용성 클러스터 이름으로 바꿉니다.
+ *subnet-22XXXX01*을 사용자 서브넷 ID로 바꿉니다.
+ *ec2\$1key\$1pair\$1name*을 이 클러스터의 EC2 키 페어 이름으로 바꿉니다. EC2 키 페어는 선택 사항이고 SSH를 사용하여 클러스터에 액세스하려는 경우에만 필수입니다.

------
#### [ AWS CLI ]

**Example 예 - 배치 그룹 전략을 사용하여에서 여러 프라이머리 노드가 있는 인스턴스 플릿 클러스터를 시작합니다. AWS Command Line Interface**  
RunJobFlow 작업을 사용하여 복수의 프라이머리 노드가 있는 Amazon EMR 클러스터를 생성하는 경우 `PlacementGroupConfigs` 속성을 다음과 같이 설정합니다. 현재 `MASTER` 인스턴스 역할은 자동으로 배치 그룹 전략으로 `SPREAD`를 사용합니다.  

```
aws emr create-cluster \
--name "ha-cluster" \
--placement-group-configs InstanceRole=MASTER \
--release-label emr-6.15.0 \
--instance-fleets '[
    {
        "InstanceFleetType": "MASTER",
        "TargetOnDemandCapacity": 3,
        "TargetSpotCapacity": 0,
        "LaunchSpecifications": {
            "OnDemandSpecification": {
                "AllocationStrategy": "lowest-price"
            }
        },
        "InstanceTypeConfigs": [
            {
                "WeightedCapacity": 1,
                "BidPriceAsPercentageOfOnDemandPrice": 100,
                "InstanceType": "m5.xlarge"
            },
            {
                "WeightedCapacity": 1,
                "BidPriceAsPercentageOfOnDemandPrice": 100,
                "InstanceType": "m5.2xlarge"
            },
            {
                "WeightedCapacity": 1,
                "BidPriceAsPercentageOfOnDemandPrice": 100,
                "InstanceType": "m5.4xlarge"
            }
        ],
        "Name": "Master - 1"
    },
    {
        "InstanceFleetType": "CORE",
        "TargetOnDemandCapacity": 5,
        "TargetSpotCapacity": 0,
        "LaunchSpecifications": {
            "OnDemandSpecification": {
                "AllocationStrategy": "lowest-price"
            }
        },
        "InstanceTypeConfigs": [
            {
                "WeightedCapacity": 1,
                "BidPriceAsPercentageOfOnDemandPrice": 100,
                "InstanceType": "m5.xlarge"
            },
            {
                "WeightedCapacity": 2,
                "BidPriceAsPercentageOfOnDemandPrice": 100,
                "InstanceType": "m5.2xlarge"
            },
            {
                "WeightedCapacity": 4,
                "BidPriceAsPercentageOfOnDemandPrice": 100,
                "InstanceType": "m5.4xlarge"
            }
        ],
        "Name": "Core - 2"
    }
]' \
--ec2-attributes '{
    "KeyName": "ec2_key_pair_name",
    "InstanceProfile": "EMR_EC2_DefaultRole",
    "SubnetIds": [
        "subnet-22XXXX01",
        "subnet-22XXXX02"
    ]
}' \
--service-role EMR_DefaultRole \
--applications Name=Hadoop Name=Spark
```
+ *ha-cluster*를 고가용성 클러스터 이름으로 바꿉니다.
+ *ec2\$1key\$1pair\$1name*을 이 클러스터의 EC2 키 페어 이름으로 바꿉니다. EC2 키 페어는 선택 사항이고 SSH를 사용하여 클러스터에 액세스하려는 경우에만 필수입니다.
+ *subnet-22XXXX01* 및 *subnet-22XXXX02*를 서브넷 ID로 교체합니다.

------

## 배치 그룹 전략 없이 여러 프라이머리 노드가 있는 클러스터 시작
<a name="emr-plan-ha-launch-no-pg-strategy"></a>

여러 프라이머리 노드가 있는 클러스터에서 배치 그룹 전략 없이 프라이머리 노드를 시작하려면 다음 중 하나를 수행해야 합니다.
+ Amazon EMR 역할에서 배치 그룹 관리형 정책 `AmazonElasticMapReducePlacementGroupPolicy` 제거 또는
+ Amazon EMRAPI 또는 CLI에서 `placement-group-configs` 파라미터를 통해 배치 그룹 전략으로 `NONE`을 선택하여 여러 프라이머리 노드가 있는 클러스터를 시작합니다.

------
#### [ Amazon EMR API ]

**Example - Amazon EMRAPI를 사용하여 배치 그룹 전략 없이 여러 프라이머리 노드가 있는 클러스터 시작.**  
RunJobFlow 작업을 사용하여 여러 프라이머리 노드가 있는 클러스터를 생성하는 경우 `PlacementGroupConfigs` 속성을 다음과 같이 설정합니다.  

```
{
   "Name":"ha-cluster",
   "PlacementGroupConfigs":[
      {
         "InstanceRole":"MASTER",
         "PlacementStrategy":"NONE"
      }
   ],
   "ReleaseLabel":"emr-5.30.1",
   "Instances":{
      "ec2SubnetId":"subnet-22XXXX01",
      "ec2KeyName":"ec2_key_pair_name",
      "InstanceGroups":[
         {
            "InstanceCount":3,
            "InstanceRole":"MASTER",
            "InstanceType":"m5.xlarge"
         },
         {
            "InstanceCount":4,
            "InstanceRole":"CORE",
            "InstanceType":"m5.xlarge"
         }
      ]
   },
   "JobFlowRole":"EMR_EC2_DefaultRole",
   "ServiceRole":"EMR_DefaultRole"
}
```
+ *ha-cluster*를 고가용성 클러스터 이름으로 바꿉니다.
+ *subnet-22XXXX01*을 사용자 서브넷 ID로 바꿉니다.
+ *ec2\$1key\$1pair\$1name*을 이 클러스터의 EC2 키 페어 이름으로 바꿉니다. EC2 키 페어는 선택 사항이고 SSH를 사용하여 클러스터에 액세스하려는 경우에만 필수입니다.

------
#### [ Amazon EMR CLI ]

**Example - Amazon EMRCLI를 사용하여 배치 그룹 전략 없이 여러 프라이머리 노드가 있는 클러스터 시작.**  
RunJobFlow 작업을 사용하여 여러 프라이머리 노드가 있는 클러스터를 생성하는 경우 `PlacementGroupConfigs` 속성을 다음과 같이 설정합니다.  

```
aws emr create-cluster \
--name "ha-cluster" \
--placement-group-configs InstanceRole=MASTER,PlacementStrategy=NONE \
--release-label emr-5.30.1 \
--instance-groups InstanceGroupType=MASTER,InstanceCount=3,InstanceType=m5.xlarge InstanceGroupType=CORE,InstanceCount=4,InstanceType=m5.xlarge \
--ec2-attributes KeyName=ec2_key_pair_name,InstanceProfile=EMR_EC2_DefaultRole,SubnetId=subnet-22XXXX01 \
--service-role EMR_DefaultRole \
--applications Name=Hadoop Name=Spark
```
+ *ha-cluster*를 고가용성 클러스터 이름으로 바꿉니다.
+ *subnet-22XXXX01*을 사용자 서브넷 ID로 바꿉니다.
+ *ec2\$1key\$1pair\$1name*을 이 클러스터의 EC2 키 페어 이름으로 바꿉니다. EC2 키 페어는 선택 사항이고 SSH를 사용하여 클러스터에 액세스하려는 경우에만 필수입니다.

------

## 여러 프라이머리 노드가 있는 클러스터에 연결된 배치 그룹 전략 구성 확인
<a name="emr-plan-ha-check-pg-using-api"></a>

Amazon EMR 클러스터 설명 API를 사용하여 여러 프라이머리 노드가 있는 클러스터에 연결된 배치 그룹 전략 구성을 확인할 수 있습니다.

**Example**  

```
aws emr describe-cluster --cluster-id "j-xxxxx"
{
   "Cluster":{
      "Id":"j-xxxxx",
      ...
      ...
      "PlacementGroups":[
         {
            "InstanceRole":"MASTER",
            "PlacementStrategy":"SPREAD"
         }
      ]
   }
}
```