부트스트랩 작업을 생성하여 추가 소프트웨어 설치 - Amazon EMR

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

부트스트랩 작업을 생성하여 추가 소프트웨어 설치

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

Amazon EMR 릴리스 4.x에서는 사전 정의된 Amazon EMR AMI 버전 2.x 및 3.x용 부트스트랩 작업 중 대다수가 지원되지 않습니다. 예를 들어, configure-Hadoopconfigure-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 버전을 사용하여 클러스터 및 애플리케이션 구성 사용자 지정을 참조하세요.

부트스트랩 작업 기본 사항

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

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

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

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

--bootstrap-actions Path="s3://mybucket/filename",Args=[arg1,arg2]

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

조건부로 부트스트랩 작업을 실행합니다.

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

#!/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 호출에 AWS CLI--bootstrap-actions 파라미터를 추가하고 부트스트랩 스크립트 위치를 의 값으로 지정합니다. Path

종료 작업

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

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

참고

Amazon EMR 버전 4.0 이상을 사용할 때는 /mnt/var/lib/instance-controller/public/shutdown-actions/ 디렉터리를 프라이머리 노드에서 수동으로 생성해야 합니다. 이 디렉터리는 기본적으로 존재하지 않지만 생성된 후에는 종료 전에 이 디렉터리의 스크립트가 실행됩니다. 마스터 노드에 연결하여 디렉터리를 생성하는 방법에 대한 자세한 내용은 SSH를 사용하여 프라이머리 노드에 연결 단원을 참조하십시오.

사용자 지정 부트스트랩 작업 사용

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

참고

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

사용자 지정 부트스트랩 작업 추가

참고

보다 사용하기 쉽도록 Amazon EMR 콘솔을 재설계했습니다. 이전 콘솔과 새 콘솔 간 차이점에 대해서는 아마존 EMR 콘솔 섹션을 참조하세요.

New console
새 콘솔을 사용하여 부트스트랩 작업을 포함하는 클러스터를 생성하는 방법
  1. 에 로그인하고 AWS Management Console https://console.aws.amazon.com/emr 에서 Amazon EMR 콘솔을 엽니다.

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

  3. 부트스트랩 작업에서 추가를 선택하여 작업의 이름, 스크립트 위치, 선택적 인수를 지정합니다. 부트스트랩 작업 추가를 선택합니다.

  4. 선택적으로 부트스트랩 작업을 더 추가합니다.

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

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

Old console
이전 콘솔을 사용하여 사용자 지정 부트스트랩 작업을 포함하는 클러스터를 생성하는 방법
  1. 새 Amazon EMR 콘솔로 이동하고 측면 탐색에서 이전 콘솔로 전환을 선택합니다. 이전 콘솔로 전환할 때 예상되는 사항에 대한 자세한 내용은 이전 콘솔 사용을 참조하세요.

  2. 클러스터 생성을 선택합니다.

  3. Go to advanced options(고급 옵션으로 이동)를 클릭합니다.

  4. Create Cluster - Advanced Options, Steps 1 and 2(클러스터 생성 - 고급 옵션, 1단계 및 2단계)에서 필요에 따라 옵션을 선택하고 Step 3: General Cluster Settings(3단계: 일반 클러스터 설정)로 진행합니다.

  5. Bootstrap Actions(부트스트랩 작업)에서 Configure and add(구성 및 추가)를 선택하여 이름, JAR 위치, 부트스트랩 작업에 대한 인수를 지정합니다. 추가를 선택합니다.

  6. 선택 사항으로 필요에 따라 부트스트랩 작업을 추가합니다.

  7. 계속해서 클러스터를 생성합니다. 클러스터가 프로비저닝되고 초기화된 후 부트스트랩 작업이 수행됩니다.

    클러스터의 프라이머리 노드가 실행 중인 동안 프라이머리 노드에 연결하고 부트스트랩 작업 스크립트가 /mnt/var/log/bootstrap-actions/1 디렉터리에 생성한 로그 파일을 볼 수 있습니다.

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

를 사용하여 부트스트랩 작업을 포함하는 경우 Path 및 를 쉼표로 구분된 Args 목록으로 지정하십시오. AWS CLI 다음 예제는 인수 목록을 사용하지 않습니다.

  • 사용자 지정 부트스트랩 작업을 포함하는 클러스터를 시작하려면 다음 명령을 입력하고 myKey를 EC2 키 페어 이름으로 바꿉니다. --bootstrap-actions를 파라미터로 포함하고 부트스트랩 스크립트 위치를 Path의 값으로 지정합니다.

    • Linux, UNIX 및 Mac OS X 사용자:

      aws emr create-cluster --name "Test cluster" --release-label emr-4.0.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"
    • Windows 사용자:

      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

사용자 지정 부트스트랩 작업을 사용하여 Amazon S3에서 각 노드로 객체 복사

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

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

#!/bin/bash aws s3 cp s3://mybucket/myfilefolder/myfile.jar /mnt1/myfolder

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

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