

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

# 부트스트랩 작업을 생성하여 Amazon EMR 클러스터에서 추가 소프트웨어 설치
<a name="emr-plan-bootstrap"></a>

*부트스트랩 작업*을 사용하여 추가 소프트웨어를 설치하거나 클러스터 인스턴스의 구성을 사용자 지정할 수 있습니다. 부트스트랩 작업은 Amazon EMR에서 Amazon Linux Amazon Machine Image(AMI)를 사용하여 인스턴스를 시작한 후 해당 클러스터에서 실행되는 스크립트입니다. 부트스트랩 작업은 사용자가 클러스터를 생성할 때 지정한 애플리케이션을 Amazon EMR에서 설치하기 이전 및 클러스터 노드에서 데이터 처리를 시작하기 이전에 실행됩니다. 실행 중인 클러스터에 노드를 추가하는 경우, 부트스트랩 작업은 해당 노드에서도 같은 방식으로 실행됩니다. 사용자 지정 부트스트랩 작업을 생성한 다음 클러스터를 생성할 때 해당 작업을 지정할 수 있습니다.

Amazon EMR 릴리스 4.x에서는 사전 정의된 Amazon EMR AMI 버전 2.x 및 3.x용 부트스트랩 작업 중 대다수가 지원되지 않습니다. 예를 들어, `configure-Hadoop` 및 `configure-daemons`는 Amazon EMR 릴리스 4.x에서 지원되지 않습니다. 대신, Amazon EMR 릴리스 4.x에서는 이 기능을 기본적으로 제공합니다. Amazon EMR AMI 버전 2.x 및 3.x에서 Amazon EMR 릴리스 4.x로 부트스트랩 작업을 마이그레이션하는 방법에 대한 자세한 내용은 Amazon EMR 릴리스 안내서에서 [Amazon EMR의 이전 AMI 버전을 사용하여 클러스터 및 애플리케이션 구성 사용자 지정](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-3x-customizeappconfig.html)을 참조하세요.

## 부트스트랩 작업 기본 사항
<a name="bootstrapUses"></a>

부트스트랩 작업은 기본적으로 Hadoop 사용자로 실행됩니다. `sudo`를 사용하여 루트 권한으로 부트스트랩 작업을 실행할 수 있습니다.

모든 Amazon EMR 관리 인터페이스는 부트스트랩 작업을 지원합니다. 콘솔 AWS CLI또는 API에서 여러 `bootstrap-actions` 파라미터를 제공하여 클러스터당 최대 16개의 부트스트랩 작업을 지정할 수 있습니다.

Amazon EMR 콘솔에서는 클러스터를 생성하는 동안 선택적으로 부트스트랩 작업을 지정할 수 있습니다.

CLI를 사용할 경우 `create-cluster` 명령을 사용하여 클러스터를 생성할 때 `--bootstrap-actions` 파라미터를 추가하여 부트스트랩 작업 스크립트에 대한 참조를 Amazon EMR에 전달할 수 있습니다.

```
--bootstrap-actions Path="s3://amzn-s3-demo-bucket/filename",Args=[arg1,arg2]
```

부트스트랩 작업이 0이 아닌 오류 코드를 반환할 경우 Amazon EMR은 이 작업을 실패로 처리하고 인스턴스를 종료합니다. 너무 많은 인스턴스가 부트스트랩 작업에 실패하면 Amazon EMR은 클러스터를 종료합니다. 몇 개의 인스턴스만 실패하면 Amazon EMR은 실패한 인스턴스를 다시 할당하고 계속하려고 시도합니다. 클러스터 `lastStateChangeReason` 오류 코드를 사용하여 부트스트랩 작업으로 인한 실패를 식별합니다.

## 조건부로 부트스트랩 작업을 실행합니다.
<a name="emr-bootstrap-runif"></a>

프라이머리 노드에서만 부트스트랩 작업을 실행하려면 일부 로직이 포함된 사용자 지정 부트스트랩 작업을 사용하여 프라이머리 노드인지 확인할 수 있습니다.

```
#!/bin/bash
if grep isMaster /mnt/var/lib/info/instance.json | grep false;
then        
    echo "This is not master node, do nothing,exiting"
    exit 0
fi
echo "This is master, continuing to execute script"
# continue with code logic for master node below
```

다음 출력은 코어 노드에서 인쇄됩니다.

```
This is not master node, do nothing, exiting
```

다음 출력은 프라이머리 노드에서 인쇄됩니다.

```
This is master, continuing to execute script
```

이 로직을 사용하려면 위 코드를 포함한 부트스트랩 작업을 Amazon S3 버킷에 업로드합니다. 에서 `aws emr create-cluster` API 호출에 `--bootstrap-actions` 파라미터를 AWS CLI추가하고 부트스트랩 스크립트 위치를 값으로 지정합니다`Path`.

## 종료 작업
<a name="bootstrap_Shutown"></a>

부트스트랩 작업 스크립트는 `/mnt/var/lib/instance-controller/public/shutdown-actions/` 디렉터리에 스크립트를 작성하여 하나 이상의 종료 작업을 생성할 수 있습니다. 클러스터가 종료되면 이 디렉터리에 있는 모든 스크립트는 병렬로 실행됩니다. 각 스크립트는 60초 내에 실행하고 완료해야 합니다.

노드가 오류로 종료되는 경우 종료 작업 스크립트 실행이 보장되지 않습니다.

**참고**  
Amazon EMR 버전 4.0 이상을 사용할 때는 `/mnt/var/lib/instance-controller/public/shutdown-actions/` 디렉터리를 프라이머리 노드에서 수동으로 생성해야 합니다. 이 디렉터리는 기본적으로 존재하지 않지만 생성된 후에는 종료 전에 이 디렉터리의 스크립트가 실행됩니다. 마스터 노드에 연결하여 디렉터리를 생성하는 방법에 대한 자세한 내용은 [SSH를 사용하여 Amazon EMR 클러스터 프라이머리 노드에 연결](emr-connect-master-node-ssh.md) 섹션을 참조하세요.

## 사용자 지정 부트스트랩 작업 사용
<a name="bootstrapCustom"></a>

사용자 지정 스크립트를 생성하여 사용자 지정 부트스트랩 작업을 수행할 수 있습니다. 모든 Amazon EMR 인터페이스가 사용자 지정 부트스트랩 작업을 참조할 수 있습니다.

**참고**  
최상의 성능을 위해 Amazon EMR에서 사용하려는 사용자 지정 부트스트랩 작업, 스크립트 및 기타 파일을 클러스터 AWS 리전 와 동일한에 있는 Amazon S3 버킷에 저장하는 것이 좋습니다.

**Topics**
+ [사용자 지정 부트스트랩 작업 추가](#custom-bootstrap)
+ [사용자 지정 부트스트랩 작업을 사용하여 Amazon S3에서 각 노드로 객체 복사](#CustomBootstrapCopyS3Object)

### 사용자 지정 부트스트랩 작업 추가
<a name="custom-bootstrap"></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. 선택적으로 부트스트랩 작업을 더 추가합니다.

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

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

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

**를 사용하여 사용자 지정 부트스트랩 작업을 사용하여 클러스터를 생성하려면 AWS CLI**

 AWS CLI 를 사용하여 부트스트랩 작업을 포함할 때 `Path` 및를 쉼표로 구분된 목록`Args`으로 지정합니다. 다음 예제는 인수 목록을 사용하지 않습니다.
+ 사용자 지정 부트스트랩 작업을 포함하는 클러스터를 시작하려면 다음 명령을 입력하고 *myKey*를 EC2 키 페어 이름으로 바꿉니다. `--bootstrap-actions`를 파라미터로 포함하고 부트스트랩 스크립트 위치를 `Path`의 값으로 지정합니다.
  + Linux, UNIX 및 Mac OS X 사용자:

    ```
    1. aws emr create-cluster --name "Test cluster" --release-label emr-4.0.0 \
    2. --use-default-roles --ec2-attributes KeyName=myKey \
    3. --applications Name=Hive Name=Pig \
    4. --instance-count 3 --instance-type m5.xlarge \
    5. --bootstrap-actions Path="s3://elasticmapreduce/bootstrap-actions/download.sh"
    ```
  + Windows 사용자:

    ```
    1. aws emr create-cluster --name "Test cluster" --release-label emr-4.2.0 --use-default-roles --ec2-attributes KeyName=myKey --applications Name=Hive Name=Pig --instance-count 3 --instance-type m5.xlarge --bootstrap-actions Path="s3://elasticmapreduce/bootstrap-actions/download.sh"
    ```

  `--instance-groups` 파라미터를 사용하지 않고 인스턴스 수를 지정하면 단일 프라이머리 노드가 시작되고 나머지 인스턴스는 코어 노드로 시작됩니다. 모든 노드는 이 명령에 지정된 인스턴스 유형을 사용합니다.
**참고**  
Amazon EMR 서비스 역할과 EC2 인스턴스 프로파일을 아직 생성하지 않았다면 `aws emr create-default-roles` 하위 명령을 입력하기 전에 `create-cluster`를 입력하여 생성합니다.

  에서 Amazon EMR 명령을 사용하는 방법에 대한 자세한 내용은 섹션을 AWS CLI참조하세요[https://docs.aws.amazon.com/cli/latest/reference/emr](https://docs.aws.amazon.com/cli/latest/reference/emr).

------

### 사용자 지정 부트스트랩 작업을 사용하여 Amazon S3에서 각 노드로 객체 복사
<a name="CustomBootstrapCopyS3Object"></a>

애플리케이션이 설치되기 전에 부트스트랩 작업을 사용하여 Amazon S3에서 클러스터의 각 노드로 객체를 복사할 수 있습니다. AWS CLI 는 클러스터의 각 노드에 설치되므로 부트스트랩 작업이 AWS CLI 명령을 호출할 수 있습니다.

다음 예제는 Amazon S3에서 `myfile.jar` 파일을 각 클러스터 노드의 `/mnt1/myfolder` 로컬 폴더로 복사하는 간단한 부트스트랩 작업 스크립트를 보여줍니다. 이 스크립트는 다음 콘텐츠를 포함하여 Amazon S3에서 이름이 `copymyfile.sh`인 파일에 저장됩니다.

```
#!/bin/bash
aws s3 cp s3://amzn-s3-demo-bucket/myfilefolder/myfile.jar /mnt1/myfolder
```

클러스터를 시작할 때 스크립트를 지정해야 합니다. 다음 AWS CLI 예제에서는 이를 보여줍니다.

```
aws emr create-cluster --name "Test cluster" --release-label emr-7.12.0 \
--use-default-roles --ec2-attributes KeyName=myKey \
--applications Name=Hive Name=Pig \
--instance-count 3 --instance-type m5.xlarge \
--bootstrap-actions Path="s3://amzn-s3-demo-bucket/myscriptfolder/copymyfile.sh"
```