실행 중인 클러스터에서 인스턴스 그룹 재구성 - Amazon EMR

실행 중인 클러스터에서 인스턴스 그룹 재구성

Amazon EMR 버전 5.21.0 이상에서는 클러스터 애플리케이션을 재구성하고 실행 중인 클러스터의 각 인스턴스 그룹에 대해 추가 구성 분류를 지정할 수 있습니다. Amazon EMR 콘솔, AWS Command Line Interface(AWS CLI) 또는 AWS SDK를 사용하면 됩니다.

새 Amazon EMR 콘솔에서 인스턴스 그룹의 애플리케이션 구성을 업데이트하면 콘솔은 새 구성을 기존 구성과 병합하여 새로운 활성 구성을 생성하려고 시도합니다. Amazon EMR에서 구성을 병합할 수 없는 특이한 경우 콘솔에서 경고를 표시합니다.

인스턴스 그룹의 재구성 요청을 제출한 후 Amazon EMR에서는 새 구성 사양에 버전 번호를 할당합니다. CloudWatch 이벤트를 조회하여 구성의 버전 번호나 인스턴스 그룹의 상태를 추적할 수 있습니다. 자세한 내용은 CloudWatch 이벤트 모니터링을 참조하십시오.

참고

클러스터 생성 중에 지정된 클러스터 구성만 재정의할 수 있고 삭제할 수는 없습니다. 기존 구성과 제공한 파일 간에 차이가 있는 경우 Amazon EMR은 수동으로 수정한 구성(예: SSH를 사용하여 클러스터에 연결하는 동안 수정한 구성)을 지정된 인스턴스 그룹의 클러스터 기본값으로 재설정합니다.

인스턴스 그룹을 재구성할 때 고려 사항

재구성 작업

Amazon EMR 콘솔, AWS Command Line Interface(AWS CLI) 또는 AWS SDK를 사용하여 재구성 요청을 제출하면 Amazon EMR은 기존 클러스터 내 구성 파일을 확인합니다. 기존 구성과 제공한 파일 간에 차이가 있는 경우 Amazon EMR은 재구성 작업을 시작하고 일부 애플리케이션을 다시 시작하며 수동으로 수정한 구성(예: SSH를 사용하여 클러스터에 연결하는 동안 수정한 구성)을 지정된 인스턴스 그룹의 클러스터 기본값으로 재설정합니다.

참고

Amazon EMR은 모든 인스턴스 그룹 재구성 중에 몇 가지 기본 작업을 수행합니다. 이러한 기본 작업은 이전에 수행한 클러스터 사용자 지정과 충돌하여 재구성 실패로 이어질 수 있습니다. 재구성 실패 문제 해결 방법에 대한 자세한 내용은 인스턴스 그룹 재구성 문제 해결 섹션을 참조하세요.

또한 Amazon EMR은 요청에서 지정한 구성 분류에 대한 재구성 작업을 시작합니다. 이러한 작업의 전체 목록은 사용 중인 Amazon EMR 버전의 구성 분류 섹션을 참조하세요. 예를 들어, 6.2.0 구성 분류와 같습니다.

참고

Amazon EMR 릴리스 안내서에는 Amazon EMR 버전 5.32.0 및 6.2.0부터 시작하는 재구성 작업만 나와 있습니다.

서비스 중단

Amazon EMR은 롤링 프로세스에 따라 태스크 및 코어 인스턴스 그룹의 인스턴스를 재구성합니다. 인스턴스 그룹에 있는 인스턴스 중 10%만 동시에 수정 및 다시 시작됩니다. 이 프로세스는 끝내는 데 오래 걸리지만 실행 중인 클러스터에서 애플리케이션이 실패할 가능성을 줄여 줍니다.

YARN을 다시 시작하는 중에 YARN 작업을 실행하려면 여러 프라이머리 노드가 있는 Amazon EMR 클러스터를 생성하거나 yarn-site 구성 분류에서 yarn.resourcemanager.recovery.enabledtrue로 설정하면 됩니다. 여러 프라이머리 노드 사용에 대한 자세한 내용은 고가용성 YARN ResourceManager를 참조하세요.

애플리케이션 검증

Amazon EMR은 재구성 다시 시작 프로세스 후에 클러스터에서 각 애플리케이션이 실행 중인지 확인합니다. 애플리케이션을 사용할 수 없는 경우 전체 재구성 작업이 실패합니다. 재구성이 실패하면 Amazon EMR은 구성 파라미터를 이전에 작동하던 버전으로 되돌립니다.

참고

재구성 실패를 방지하려면 사용하려는 클러스터에만 애플리케이션을 설치하는 것이 좋습니다. 또한 재구성 요청을 제출하기 전에 모든 클러스터 애플리케이션이 정상이고 실행 중인지 확인하는 것이 좋습니다.

재구성 유형

다음 두 가지 방법으로 인스턴스 그룹을 재구성할 수 있습니다.

  • 덮어쓰기. 기본 재구성 방법이며 5.35.0 및 6.6.0 이전의 Amazon EMR 릴리스에서 사용할 수 있는 유일한 방법입니다. 이 재구성 방법은 클러스터 내 파일을 새로 제출한 구성 세트로 무차별적으로 덮어씁니다. 이 메서드는 재구성 API 외부에서 수행된 구성 파일 변경 내용을 모두 지웁니다.

  • 병합. Amazon EMR 릴리스 5.35.0 및 6.6.0 이상에서 지원되는 재구성 방법입니다. 단, Amazon EMR 콘솔에서는 이를 지원하는 버전이 없으므로 예외입니다. 이 재구성 방법은 새로 제출된 구성을 클러스터에 이미 있는 구성과 병합합니다. 이 옵션은 제출한 새 구성을 추가하거나 수정하기만 합니다. 기존 구성을 보존합니다.

참고

Amazon EMR은 서비스가 올바르게 실행되도록 하는 데 필요한 일부 필수 Hadoop 구성을 계속 덮어씁니다.

제한 사항

실행 중인 클러스터에서 인스턴스 그룹을 재구성할 경우 다음 제한 사항을 고려합니다.

  • Yarn 기반이 아닌 애플리케이션에서 특히 애플리케이션이 제대로 구성되지 않은 경우 다시 시작 중에 실패하거나 클러스터 문제가 발생할 수 있습니다. 클러스터의 최대 메모리 및 CPU 사용량에 근접하면 다시 시작 프로세스 후에 문제가 발생할 수 있습니다. 프라이머리 인스턴스 그룹의 경우 특히 그렇습니다.

  • 인스턴스 그룹 크기가 조정되는 동안에는 재구성 요청을 제출할 수 없습니다. 인스턴스 그룹의 크기를 조정하는 동안 재구성이 시작되면 인스턴스 그룹의 크기 조정이 완료될 때까지 재구성을 시작할 수 없으며, 그 반대의 경우도 마찬가지입니다.

  • 인스턴스 그룹을 재구성한 후 Amazon EMR에서 애플리케이션을 다시 시작하여 새 구성을 적용합니다. 재구성하는 동안 애플리케이션이 사용 중이면 작업이 실패하거나 예기치 않은 다른 애플리케이션 동작이 발생할 수 있습니다.

  • 인스턴스 그룹의 재구성이 실패하면 Amazon EMR이 구성 파라미터를 이전에 작동하던 버전으로 되돌립니다. 리버전 프로세스가 실패하면 새 ModifyInstanceGroup 요청을 제출하여 인스턴스 그룹을 SUSPENDED 상태에서 복구해야 합니다.

  • Phoenix 구성 분류에 대한 재구성 요청은 Amazon EMR 버전 5.23.0 이상에서만 지원되고 Amazon EMR 버전 5.21.0 또는 5.22.0에서는 지원되지 않습니다.

  • HBase 구성 분류에 대한 재구성 요청은 Amazon EMR 버전 5.30.0 이상에서만 지원되고 Amazon EMR 버전 5.23.0~5.29.0에서는 지원되지 않습니다.

  • Amazon EMR은 Amazon EMR 버전 5.27.0 이상에서만 여러 프라이머리 노드가 있는 Amazon EMR 클러스터에 대한 애플리케이션 재구성 요청을 지원합니다.

  • 모든 Hadoop KMS 구성 분류 또는 hdfs-encryption-zones 분류의 재구성은 여러 프라이머리 노드가 있는 Amazon EMR 클러스터에서 지원되지 않습니다.

  • Amazon EMR은 YARN ResourceManager를 다시 시작해야 하는 용량 스케줄러에 대한 특정 재구성 요청을 지원하지 않습니다. 예를 들어 대기열을 완전히 제거할 수는 없습니다.

콘솔에서 인스턴스 그룹 재구성

참고

Amazon EMR 콘솔은 병합 유형 재구성을 지원하지 않습니다.

  1. https://console.aws.amazon.com/elasticmapreduce/에서 Amazon EMR 콘솔을 엽니다.

  2. 클러스터 목록의 이름 아래에서 재구성할 활성 클러스터를 선택합니다.

  3. 클러스터의 클러스터 세부 정보 페이지를 열고 구성 탭으로 이동합니다.

  4. 필터 드롭다운 목록에서 재구성할 인스턴스 그룹을 선택합니다.

  5. 재구성 드롭다운 메뉴에서 테이블에서 편집 또는 JSON 파일에서 편집을 선태합니다.

    • 테이블에서 편집 - 구성 분류 테이블에서 기존 구성의 속성과 값을 편집하거나 구성 추가를 선택하여 추가 구성 분류를 제공합니다.

    • JSON 파일에서 편집 - JSON에 직접 구성을 입력하거나 섀도우 텍스트로 표시된 간편 구문을 사용합니다. 그렇지 않으면 파일의 Amazon S3 URI를 JSON Configurations 객체와 함께 제공합니다.

    참고

    구성 분류 테이블의 소스 열은 클러스터를 생성할 때 또는 이 인스턴스 그룹의 추가 구성을 지정할 때 구성이 제공되는지 여부를 보여줍니다. 두 소스에서 모두 인스턴스 그룹의 구성을 편집할 수 있습니다. 초기 클러스터 구성을 삭제할 수 없지만 인스턴스 그룹의 초기 클러스터 구성을 재정의할 수는 있습니다.

    테이블에서 직접 중첩된 구성 분류를 추가하거나 편집할 수도 있습니다. 예를 들어, hadoop-envexport 하위 분류를 추가로 제공하려면 표에서 hadoop.export 구성 분류를 추가합니다. 그런 다음 이 분류의 특정 속성과 값을 제공합니다.

  6. (선택 사항) Apply this configuration to all active instance groups(모든 활성 인스턴스 그룹에 이 구성 적용)를 선택합니다.

  7. 변경 사항을 저장합니다.

CLI를 사용하여 인스턴스 그룹 재구성

modify-instance-groups 명령을 사용하여 실행 중인 클러스터의 인스턴스 그룹에 대해 새 구성을 지정합니다.

참고

다음 예제에서 <j-2AL4XXXXXX5T9>를 클러스터 ID로 바꾸고, <ig-1xxxxxxx9>를 인스턴스 그룹 ID로 바꿉니다.

예 - 인스턴스 그룹의 구성 대치

다음 예제에서는 구성 JSON 파일 instanceGroups.json을 참조하여 인스턴스 그룹에 대해 YARN NodeManager 디스크 상태 검사기의 속성을 편집합니다.

  1. 구성 분류를 준비하고 명령을 실행할 디렉터리와 동일한 디렉터리에 instanceGroups.json으로 저장합니다.

    [ { "InstanceGroupId":"<ig-1xxxxxxx9>", "Configurations":[ { "Classification":"yarn-site", "Properties":{ "yarn.nodemanager.disk-health-checker.enable":"true", "yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage":"100.0" }, "Configurations":[] } ] } ]
  2. 다음 명령을 실행합니다.

    aws emr modify-instance-groups --cluster-id <j-2AL4XXXXXX5T9> \ --instance-groups file://instanceGroups.json
예 - 인스턴스 그룹에 구성 추가

인스턴스 그룹에 구성을 추가하려면 새 ModifyInstanceGroup 요청에 해당 인스턴스 그룹에 대해 이전에 지정한 구성도 포함해야 합니다. 그렇지 않으면 이전에 지정한 구성이 제거됩니다.

다음 예제에서는 YARN NodeManager 가상 메모리 검사기의 속성을 추가합니다. 또한 구성에는 값을 덮어쓰지 않도록 YARN NodeManager 디스크 상태 검사기에 대해 이전에 지정한 값도 포함됩니다.

  1. instanceGroups.json에서 다음 콘텐츠를 준비하고 명령을 실행할 동일한 디렉터리에 저장합니다.

    [ { "InstanceGroupId":"<ig-1xxxxxxx9>", "Configurations":[ { "Classification":"yarn-site", "Properties":{ "yarn.nodemanager.disk-health-checker.enable":"true", "yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage":"100.0", "yarn.nodemanager.vmem-check-enabled":"true", "yarn.nodemanager.vmem-pmem-ratio":"3.0" }, "Configurations":[] } ] } ]
  2. 다음 명령을 실행합니다.

    aws emr modify-instance-groups --cluster-id <j-2AL4XXXXXX5T9> \ --instance-groups file://instanceGroups.json
예 - 병합 유형 재구성을 사용하여 인스턴스 그룹에 구성 추가

기본 덮어쓰기 재구성 방법을 사용하여 구성을 추가하려면 해당 인스턴스 그룹에 대해 이전에 지정한 모든 구성을 새 ModifyInstanceGroup 요청에 포함해야 합니다. 그렇지 않으면 덮어쓰기로 이전에 지정한 구성이 제거됩니다. 병합 재구성에서는 이 작업을 수행할 필요가 없습니다. 대신 요청에 새 구성만 포함되도록 해야 합니다.

다음 예제에서는 YARN NodeManager 가상 메모리 검사기의 속성을 추가합니다. 이는 병합 유형 재구성이므로 YARN NodeManager 디스크 상태 검사기에 대해 이전에 지정된 값을 덮어쓰지 않습니다.

  1. instanceGroups.json에서 다음 콘텐츠를 준비하고 명령을 실행할 동일한 디렉터리에 저장합니다.

    [ {"InstanceGroupId":"<ig-1xxxxxxx9>", "ReconfigurationType" :"MERGE", "Configurations":[ {"Classification":"yarn-site", "Properties":{ "yarn.nodemanager.vmem-check-enabled":"true", "yarn.nodemanager.vmem-pmem-ratio":"3.0" }, "Configurations":[] } ] } ]
  2. 다음 명령을 실행합니다.

    aws emr modify-instance-groups --cluster-id <j-2AL4XXXXXX5T9> \ --instance-groups file://instanceGroups.json
예 - 인스턴스 그룹의 구성 삭제

인스턴스 그룹에 대한 구성을 삭제하려면 이전 구성을 제외하는 새 재구성 요청을 제출합니다.

참고

초기 클러스터 구성은 재정의만 가능합니다. 삭제할 수는 없습니다.

예를 들어, 이전 예제에서 YARN NodeManager 디스크 상태 검사기의 구성을 삭제하려면 다음 콘텐츠를 포함하는 새 instanceGroups.json을 제출합니다.

[ { "InstanceGroupId":"<ig-1xxxxxxx9>", "Configurations":[ { "Classification":"yarn-site", "Properties":{ "yarn.nodemanager.vmem-check-enabled":"true", "yarn.nodemanager.vmem-pmem-ratio":"3.0" }, "Configurations":[] } ] } ]
참고

마지막 재구성 요청에서 모든 구성을 삭제하려면 빈 구성 배열이 있는 재구성 요청을 제출합니다. 예:

[ { "InstanceGroupId":"<ig-1xxxxxxx9>", "Configurations":[] } ]
예 - 하나의 요청으로 인스턴스 그룹 재구성 및 크기 조정

다음 예제 JSON에서는 동일한 요청의 인스턴스 그룹을 재구성하고 그 크기를 조정하는 방법을 보여줍니다.

[ { "InstanceGroupId":"<ig-1xxxxxxx9>", "InstanceCount":5, "EC2InstanceIdsToTerminate":["i-123"], "ForceShutdown":true, "ShrinkPolicy":{ "DecommissionTimeout":10, "InstanceResizePolicy":{ "InstancesToTerminate":["i-123"], "InstancesToProtect":["i-345"], "InstanceTerminationTimeout":20 } }, "Configurations":[ { "Classification":"yarn-site", "Configurations":[], "Properties":{ "yarn.nodemanager.disk-health-checker.enable":"true", "yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage":"100.0" } } ] } ]

Java SDK를 사용하여 인스턴스 그룹 재구성

참고

다음 예제에서 <j-2AL4XXXXXX5T9>를 클러스터 ID로 바꾸고, <ig-1xxxxxxx9>를 인스턴스 그룹 ID로 바꿉니다.

다음 코드 스니펫은 AWS SDK for Java를 사용하는 인스턴스 그룹의 새 구성을 제공합니다.

AWSCredentials credentials = new BasicAWSCredentials("access-key", "secret-key"); AmazonElasticMapReduce emr = new AmazonElasticMapReduceClient(credentials); Map<String,String> hiveProperties = new HashMap<String,String>(); hiveProperties.put("hive.join.emit.interval","1000"); hiveProperties.put("hive.merge.mapfiles","true"); Configuration configuration = new Configuration() .withClassification("hive-site") .withProperties(hiveProperties); InstanceGroupModifyConfig igConfig = new InstanceGroupModifyConfig() .withInstanceGroupId("<ig-1xxxxxxx9>") .withReconfigurationType("MERGE"); .withConfigurations(configuration); ModifyInstanceGroupsRequest migRequest = new ModifyInstanceGroupsRequest() .withClusterId("<j-2AL4XXXXXX5T9>") .withInstanceGroups(igConfig); emr.modifyInstanceGroups(migRequest);

다음 코드 스니펫은 빈 구성 배열을 제공하여 이전에 지정한 인스턴스 그룹 구성을 삭제합니다.

List<Configuration> configurations = new ArrayList<Configuration>(); InstanceGroupModifyConfig igConfig = new InstanceGroupModifyConfig() .withInstanceGroupId("<ig-1xxxxxxx9>") .withConfigurations(configurations); ModifyInstanceGroupsRequest migRequest = new ModifyInstanceGroupsRequest() .withClusterId("<j-2AL4XXXXXX5T9>") .withInstanceGroups(igConfig); emr.modifyInstanceGroups(migRequest);

인스턴스 그룹 재구성 문제 해결

인스턴스 그룹의 재구성 프로세스가 실패할 경우 Amazon EMR은 Amazon CloudWatch 이벤트를 사용하여 재구성을 되돌리고 실패 메시지를 로깅합니다. 이벤트는 재구성 실패에 대한 간략한 요약을 제공합니다. 재구성이 실패한 인스턴스와 해당 실패 메시지를 나열합니다. 다음은 실패 메시지의 예입니다.

The reconfiguration operation for instance group ig-1xxxxxxx9 in Amazon EMR cluster j-2AL4XXXXXX5T9 (ExampleClusterName) failed at 2021-01-01 00:00 UTC and took 2 minutes to fail. Failed configuration version is example12345. Failure message: Instance i-xxxxxxx1, i-xxxxxxx2, i-xxxxxxx3 failed with message "This is an example failure message".

재구성 실패에 대한 추가 데이터를 수집하려면 노드 프로비저닝 로그를 확인할 수 있습니다. 이렇게 하면 다음과 같은 메시지를 수신할 때 특히 유용합니다.

i-xxxxxxx1 failed with message “Unable to complete transaction and some changes were applied.”
On the node
노드에 연결하여 노드 프로비저닝 로그에 액세스하는 방법
  1. SSH를 사용하여 재구성이 실패한 노드에 연결합니다. 관련 지침은 Amazon EC2 Linux 인스턴스용 사용 설명서에서 거Linux 인스턴스에 연결을 참조하세요.

  2. 노드 프로비저닝 로그 파일이 있는 다음 디렉터리로 이동합니다.

    /mnt/var/log/provision-node/
  3. reports 하위 디렉터리를 열고 재구성을 위한 노드 프로비저닝 보고서를 검색합니다. reports 디렉터리는 재구성 버전 번호, 범용 고유 식별자(UUID), Amazon EC2 인스턴스 IP 주소 및 타임스탬프별로 로그를 구성합니다. 각 보고서는 재구성 프로세스에 대한 자세한 정보를 포함하는 압축된 YAML 파일입니다.

    다음은 보고서 파일 이름 및 경로에 대한 예제입니다.

    /reports/2/ca598xxx-cxxx-4xxx-bxxx-6dbxxxxxxxxx/ip-10-73-xxx-xxx.ec2.internal/202104061715.yaml.gz
  4. 다음 예제와 같이 zless 등의 파일 뷰어를 사용하여 보고서를 검토할 수 있습니다.

    zless 202104061715.yaml.gz
Amazon S3
Amazon S3를 사용하여 노드 프로비저닝 로그에 액세스하는 방법
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 로그 파일을 아카이브하도록 클러스터를 구성할 때 지정한 Amazon S3 버킷을 엽니다.

  3. 노드 프로비저닝 로그 파일이 있는 다음 폴더로 이동합니다.

    DOC-EXAMPLE-BUCKET/elasticmapreduce/<cluster id>/node/<instance id>/provision-node/
  4. reports 폴더를 열고 재구성을 위한 노드 프로비저닝 보고서를 검색합니다. reports 폴더는 재구성 버전 번호, 범용 고유 식별자(UUID), Amazon EC2 인스턴스 IP 주소 및 타임스탬프별로 로그를 구성합니다. 각 보고서는 재구성 프로세스에 대한 자세한 정보를 포함하는 압축된 YAML 파일입니다.

    다음은 보고서 파일 이름 및 경로에 대한 예제입니다.

    /reports/2/ca598xxx-cxxx-4xxx-bxxx-6dbxxxxxxxxx/ip-10-73-xxx-xxx.ec2.internal/202104061715.yaml.gz
  5. 로그 파일을 보려면 Amazon S3의에서 로컬 컴퓨터로 로그 파일을 텍스트 파일로 다운로드하면 됩니다. 관련 지침은 객체 다운로드를 참조하세요.

각 로그 파일에는 관련 재구성에 대한 자세한 프로비저닝 보고서가 들어 있습니다. 오류 메시지 정보를 찾으려면 보고서의 err 로그 수준을 검색하면 됩니다. 보고서 형식은 클러스터의 Amazon EMR 버전에 따라 다릅니다.

다음 예제에서는 5.32.0 및 6.2.0 이전의 Amazon EMR 릴리스 버전에 대한 오류 정보를 보여줍니다.

- !ruby/object:Puppet::Util::Log level: !ruby/sym err tags: - err message: "Example detailed error message." source: Puppet time: 2021-01-01 00:00:00.000000 +00:00

Amazon EMR 릴리스 버전 5.32.0 및 6.2.0 이상에서는 다음 형식을 대신 사용합니다.

- level: err message: 'Example detailed error message.' source: Puppet tags: - err time: '2021-01-01 00:00:00.000000 +00:00' file: line: