실행 중인 클러스터에서 인스턴스 그룹 재구성 - 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은를 사용하여 클러스터에 연결하는 동안 수정한 구성과 같이 수동으로 수정된 구성을 지정된 인스턴스 그룹의 클러스터 기본값SSH으로 EMR 재설정합니다.

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

재구성 작업

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

참고

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

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

참고

Amazon EMR 릴리스 가이드에는 Amazon EMR 버전 5.32.0 및 6.2.0으로 시작하는 재구성 작업만 나열되어 있습니다.

서비스 중단

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

YARN 다시 시작하는 동안 YARN 작업을 실행하려면 여러 마스터 노드가 있는 Amazon EMR 클러스터를 생성하거나 yarn-site 구성 분류true에서 yarn.resourcemanager.recovery.enabled 로 설정할 수 있습니다. 여러 마스터 노드 사용에 대한 자세한 내용은 고가용성 단원을 YARN ResourceManager참조하십시오.

애플리케이션 검증

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

참고

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

재구성 유형

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

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

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

참고

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

제한 사항

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

  • 비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은 Amazon EMR 버전 5.27.0 이상에서만 여러 프라이머리 노드가 있는 Amazon EMR 클러스터에서 애플리케이션 재구성 요청을 EMR 지원합니다.

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

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

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

참고

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

  1. https://console.aws.amazon.com/emr에서 Amazon EMR 콘솔 열기

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

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

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

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

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

    • JSON 파일에서 편집 -에 직접 구성을 입력JSON하거나 단축형 구문(섀도우 텍스트로 표시됨)을 사용합니다. 그렇지 않으면 JSON Configurations 객체가 있는 파일에 URI Amazon S3를 제공합니다.

    참고

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

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

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

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

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

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

참고

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

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

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

  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

참고

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

다음 코드 스니펫은 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를 사용하여 재구성에 실패한 노드에 연결합니다. 지침은 Linux 인스턴스용 Amazon 사용 설명서의 Linux 인스턴스에 연결을 참조하세요. EC2

  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 하고에서 Amazon S3 콘솔을 엽니다https://console.aws.amazon.com/s3/.

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

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

    amzn-s3-demo-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: