클러스터 로깅 및 디버깅 구성 - Amazon EMR

클러스터 로깅 및 디버깅 구성

클러스터를 계획할 때 결정할 것 중 하나는 디버깅 지원 수준입니다. 데이터 처리 애플리케이션을 처음 개발하는 경우, 대표적인 데이터 집합을 소규모로 처리하는 클러스터에서 애플리케이션을 테스트하는 것이 좋습니다. 이때 Amazon S3에 로그 파일을 아카이브하는 등 Amazon EMR에서 제공하는 모든 디버깅 도구를 활용할 수 있습니다.

개발을 끝내고 데이터 처리 애플리케이션을 실제로 운영할 때에는, 디버깅을 축소하도록 선택할 수 있습니다. 이렇게 하면 Amazon S3에 상태를 쓰지 않기 때문에 Amazon S3에 로그 파일 아카이브를 저장하는 비용이 절약되고, 클러스터의 처리 로드가 감소합니다. 물론 문제가 발생할 경우 이를 검토할 도구가 충분하지 않다는 단점은 따릅니다.

기본 로그 파일

기본적으로 각 클러스터는 프라이머리 노드에 로그 파일을 기록합니다. 로그 파일은 /mnt/var/log/ 디렉터리에 저장됩니다. 이러한 로그 파일을 보려면 SSH를 사용하여 프라이머리 노드에 연결에서 설명한 대로 SSH를 사용하여 프라이머리 노드에 연결합니다.

참고

Amazon EMR 릴리스 6.8.0 이하를 사용하는 경우 클러스터 종료 중에 로그 파일이 Amazon S3에 저장되므로 프라이머리 노드가 종료되면 로그 파일에 액세스할 수 없습니다. Amazon EMR 릴리스 6.9.0 이상에서는 클러스터 스케일 다운 중에 Amazon S3에 로그를 아카이브하므로 클러스터에서 생성된 로그 파일은 노드가 종료된 후에도 유지됩니다.

프라이머리 노드에 로그 파일을 기록하기 위해 따로 설정해야 할 작업은 없습니다. 이는 Amazon EMR과 Hadoop의 기본 동작입니다.

클러스터는 다음과 같은 여러 유형의 로그 파일을 생성합니다.

  • 단계 로그 - Amazon EMR 서비스에서 생성하는 로그로, 클러스터 및 각 단계의 결과에 대한 정보를 포함합니다. 이 로그 파일은 프라이머리 노드의 /mnt/var/log/hadoop/steps/ 디렉터리에 저장됩니다. 각 단계마다 별도로 번호가 매겨진 하위 디렉터리에 결과를 기록합니다. 즉 첫 번째 단계는 /mnt/var/log/hadoop/steps/s-stepId1/에, 그리고 두 번째 단계는 /mnt/var/log/hadoop/steps/s-stepId2/에 기록하는 방식입니다. 13자의 단계 식별자(예: stepId1, stepId2)는 한 클러스터에서 고유합니다.

  • Hadoop 및 YARN 구성 요소 로그 - 예를 들어 Apache YARN 및 MapReduce와 연결된 구성 요소의 로그는 /mnt/var/log의 별도 폴더에 있습니다. /mnt/var/log에서 하둡 구성 요소에 대한 로그 파일 위치는 hadoop-hdfs, hadoop-mapreduce, hadoop-httpfs, hadoop-yarn입니다. hadoop-state-pusher 디렉터리에는 하둡 상태 pusher 프로세스의 출력이 저장됩니다.

  • 부트스트랩 작업 로그 - 부트스트랩 작업을 사용하는 경우 해당 작업의 결과가 로깅됩니다. 이 로그 파일은 프라이머리 노드의 /mnt/var/log/bootstrap-actions/에 저장됩니다. 각 단계마다 별도로 번호가 매겨진 하위 디렉터리에 결과를 기록합니다. 즉 첫 번째 단계는 /mnt/var/log/bootstrap-actions/1/에, 그리고 두 번째 단계는 /mnt/var/log/bootstrap-actions/2/에 기록하는 방식입니다.

  • 인스턴스 상태 로그 - 이 로그는 CPU, 메모리 상태, 노드의 가비지 수집기 스레드에 대한 정보를 제공합니다. 이 로그 파일은 프라이머리 노드의 /mnt/var/log/instance-state/에 저장됩니다.

Amazon S3에 로그 파일 아카이브

참고

아직은 yarn logs 유틸리티를 사용하여 Amazon S3에 대한 로그 집계를 사용할 수 없습니다.

Amazon EMR 릴리스 6.9.0 이상에서는 클러스터 스케일 다운 중에 Amazon S3에 로그를 아카이브하므로 클러스터에서 생성된 로그 파일은 노드가 종료된 후에도 유지됩니다. 이 동작은 자동으로 활성화되므로 활성화하기 위한 사용자 조치는 필요하지 않습니다. Amazon EMR 릴리스 6.8.0 이하 버전의 경우 프라이머리 노드에 저장된 로그 파일을 Amazon S3에 정기적으로 아카이브하도록 클러스터를 구성할 수 있습니다. 이렇게 하면 클러스터가 정상적으로 종료되거나 오류로 종료된 후에도 로그 파일을 사용할 수 있습니다. Amazon EMR은 5분 간격으로 Amazon S3에 로그 파일을 아카이브합니다.

Amazon EMR 릴리스 6.8.0 이하 버전에서 Amazon S3에 로그 파일을 아카이브하려면 클러스터를 시작할 때 이 기능을 활성화해야 합니다. 이 작업은 콘솔, CLI 또는 API를 사용하여 수행할 수 있습니다. 기본적으로 콘솔을 사용하여 클러스터를 시작하면 로그 보관이 활성화됩니다. CLI 또는 API를 사용하여 시작된 클러스터의 경우 Amazon S3로의 로깅을 수동으로 활성화해야 합니다.

참고

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

New console
새 콘솔을 사용하여 Amazon S3에 로그 파일을 아카이브하는 방법
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/emr에서 Amazon EMR 콘솔을 엽니다.

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

  3. 클러스터 로그에서 Amazon S3에 클러스터별 로그 게시 확인란을 선택합니다.

  4. Amazon S3 위치 필드에 로그를 저장할 Amazon S3 경로를 입력하거나 찾습니다. 버킷에 존재하지 않는 폴더 이름을 입력하면 Amazon S3에서 해당 폴더를 생성합니다.

    이 값을 설정하면 Amazon EMR은 클러스터에 있는 EC2 인스턴스의 로그 파일을 Amazon S3에 복사합니다. 이를 통해 클러스터가 종료되고 EC2가 해당 클러스터를 호스팅하는 인스턴스를 종료할 때 로그 파일 손실을 방지합니다. 이러한 로그는 문제 해결에 유용합니다. 자세한 내용은 로그 파일 보기를 참조하세요.

  5. 선택적으로 클러스터별 로그 암호화 확인란을 선택합니다. 그런 다음 목록에서 AWS KMS 키를 선택하거나 키 ARN을 입력하거나 새 키를 생성합니다. 이 옵션은 버전 6.0.0을 제외하고 Amazon EMR 버전 5.30.0 이상에서만 사용할 수 있습니다. 이 옵션을 사용하려면 EC2 인스턴스 프로파일 및 Amazon EMR 역할에 대한 AWS KMS에 권한을 추가합니다. 자세한 내용은 AWS KMS 고객 관리형 키를 사용하여 Amazon S3에 저장된 로그 파일을 암호화하는 방법 섹션을 참조하세요.

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

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

Old console
이전 콘솔을 사용하여 Amazon S3에 로그 파일을 아카이브하는 방법
  1. 새 Amazon EMR 콘솔로 이동하고 측면 탐색에서 이전 콘솔로 전환을 선택합니다. 이전 콘솔로 전환할 때 예상되는 사항에 대한 자세한 내용은 이전 콘솔 사용을 참조하세요.

  2. 클러스터 생성(Create cluster)을 선택합니다.

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

  4. 일반 옵션 섹션의 로깅 필드에서 기본 옵션인 활성을 수락합니다.

    이를 통해 Amazon EMR에서 Amazon S3로 세부 로그 데이터를 캡처할지 여부를 결정합니다. 클러스터를 만든 경우에만 이를 설정할 수 있습니다. 자세한 내용은 로그 파일 보기 섹션을 참조하세요.

  5. S3 폴더 필드에서 로그를 저장할 Amazon S3 경로를 입력하거나 찾습니다. 콘솔에서 Amazon S3 경로를 직접 생성하게 할 수도 있습니다. 버킷에 존재하지 않는 폴더 이름을 입력하면 그 폴더가 생성됩니다.

    이 값을 설정하면 Amazon EMR은 클러스터에 있는 EC2 인스턴스의 로그 파일을 Amazon S3에 복사합니다. 이는 클러스터 및 해당 클러스터를 호스팅하는 EC2 인스턴스가 종료될 때 로그 파일이 손실되는 일을 방지합니다. 이러한 로그는 문제 해결에 유용합니다.

    자세한 내용은 로그 파일 보기를 참조하세요.

  6. 로그 암호화 필드에서 AWS 고객 관리형 키를 사용하여 S3에 저장된 로그 암호화를 선택합니다. 그런 다음 목록에서 AWS 키를 선택하거나 키 ARN을 입력합니다. 새 AWS KMS 키를 생성할 수도 있습니다.

    이 옵션은 버전 6.0.0을 제외하고 Amazon EMR 버전 5.30.0 이상에서만 사용할 수 있습니다. 이 옵션을 사용하려면 EC2 인스턴스 프로파일 및 Amazon EMR 역할에 대한 AWS KMS에 권한을 추가합니다. 자세한 내용은 AWS KMS 고객 관리형 키를 사용하여 Amazon S3에 저장된 로그 파일을 암호화하는 방법 섹션을 참조하세요.

  7. 클러스터 계획 및 구성에서 설명한 대로 클러스터 생성 작업을 계속합니다.

CLI
AWS CLI를 사용하여 Amazon S3에 로그 파일을 아카이브하는 방법

AWS CLI를 사용하여 Amazon S3에 로그 파일을 보관하려면 create-cluster 명령을 입력하고 --log-uri 파라미터를 사용하여 Amazon S3 로그 경로를 지정합니다.

  1. Amazon S3에 파일을 기록하려면 다음 명령을 입력하고 myKey를 해당 EC2 키 페어의 이름으로 바꿉니다.

    aws emr create-cluster --name "Test cluster" --release-label emr-5.36.1 --log-uri s3://DOC-EXAMPLE-BUCKET/logs --applications Name=Hadoop Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3
  2. --instance-groups 파라미터를 사용하지 않고 인스턴스 수를 지정하면 단일 프라이머리 노드가 시작되고 나머지 인스턴스는 코어 노드로 시작됩니다. 모든 노드는 이 명령에 지정된 인스턴스 유형을 사용합니다.

    참고

    Amazon EMR 서비스 역할과 EC2 인스턴스 프로파일을 아직 생성하지 않았다면 aws emr create-default-roles 하위 명령을 입력하기 전에 create-cluster를 입력하여 생성합니다.

AWS KMS 고객 관리형 키를 사용하여 Amazon S3에 저장된 로그 파일을 암호화하는 방법

Amazon EMR 버전 5.30.0 이상(Amazon EMR 6.0.0 제외)에서는 AWS KMS 고객 관리형 키를 사용하여 Amazon S3에 저장된 로그 파일을 암호화할 수 있습니다. 콘솔에서 이 옵션을 활성화하려면 Amazon S3에 로그 파일 아카이브의 단계를 따릅니다. Amazon EC2 인스턴스 프로파일과 Amazon EMR 역할은 다음 필수 조건을 충족해야 합니다.

  • 클러스터에 사용되는 Amazon EC2 인스턴스 프로파일에는 kms:GenerateDataKey를 사용할 수 있는 권한이 있어야 합니다.

  • 클러스터에 사용되는 Amazon EMR 역할에는 kms:DescribeKey를 사용할 수 있는 권한이 있어야 합니다.

  • 다음 단계에서 확인할 수 있듯이, 지정된 AWS KMS 고객 관리형 키의 키 사용자 목록에 Amazon EC2 인스턴스 프로파일과 Amazon EMR 역할을 추가해야 합니다.

    1. https://console.aws.amazon.com/kms에서 AWS Key Management Service(AWS KMS) 콘솔을 엽니다.

    2. AWS 리전을 변경하려면 페이지의 오른쪽 위 모서리에 있는 리전 선택기를 사용합니다.

    3. 수정할 KMS 키의 별칭을 선택합니다.

    4. 키 세부 정보 페이지의 Key Users(키 사용자)에서 Add(추가)를 선택합니다.

    5. 키 사용자 추가 대화 상자에서 Amazon EC2 인스턴스 프로파일과 Amazon EMR 역할을 선택합니다.

    6. 추가(Add)를 선택합니다.

자세한 내용은 Amazon EMR에서 사용하는 IAM 서비스 역할 및 AWS 키 관리 서비스 개발자 안내서에서 키 정책 사용을 참조하세요.

AWS CLI를 사용하여 Amazon S3에서 로그를 집계하는 방법

참고

현재로서는 yarn logs 유틸리티로 로그 집계를 사용할 수 없습니다. 이 절차에서 지원하는 집계만 사용할 수 있습니다.

로그 집계(하둡 2.x)는 개별 애플리케이션에 대한 모든 컨테이너의 로그를 하나의 파일로 종합합니다. AWS CLI를 사용하여 Amazon S3로의 로그 집계를 활성화하려면, 클러스터 시작 시 부트스트랩 작업을 사용하여 로그 집계를 활성화하고 로그를 저장할 버킷을 지정합니다.

  • 로그 집계를 활성화하려면 다음을 포함하는 myConfig.json 구성 파일을 생성합니다.

    [ { "Classification": "yarn-site", "Properties": { "yarn.log-aggregation-enable": "true", "yarn.log-aggregation.retain-seconds": "-1", "yarn.nodemanager.remote-app-log-dir": "s3:\/\/DOC-EXAMPLE-BUCKET\/logs" } } ]

    다음 명령을 입력하고 myKey를 EC2 키 페어 이름으로 바꿉니다. 추가적으로 빨간색 텍스트를 자체 구성으로 바꿀 수 있습니다.

    aws emr create-cluster --name "Test cluster" \ --release-label emr-5.36.1 \ --applications Name=Hadoop \ --use-default-roles \ --ec2-attributes KeyName=myKey \ --instance-type m5.xlarge \ --instance-count 3 \ --configurations file://./myConfig.json

    --instance-groups 파라미터를 사용하지 않고 인스턴스 수를 지정하면 단일 프라이머리 노드가 시작되고 나머지 인스턴스는 코어 노드로 시작됩니다. 모든 노드는 이 명령에 지정된 인스턴스 유형을 사용합니다.

    참고

    기본 EMR 서비스 역할과 EC2 인스턴스 프로파일을 아직 생성하지 않았다면 create-cluster 하위 명령을 입력하기 전에 aws emr create-default-roles를 입력하여 생성합니다.

AWS CLI에서 Amazon EMR 명령에 대한 자세한 내용은 AWS CLI 명령 참조를 참조하세요.

로그 위치

다음 목록에는 Amazon S3의 모든 로그 유형과 해당 위치가 포함되어 있습니다. 이를 사용하여 Amazon EMR 문제를 해결할 수 있습니다.

단계 로그

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/steps/<step-id>/

애플리케이션 로그

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/containers/

이 위치에는 컨테이너 stderrstdout, directory.info, prelaunch.outlaunch_container.sh 로그가 포함됩니다.

리소스 관리자 로그

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<leader-instance-id>/applications/hadoop-yarn/

Hadoop HDFS

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<all-instance-id>/applications/hadoop-hdfs/

이 위치에는 NameNode, DataNode 및 YARN TimelineServer 로그가 포함됩니다.

노드 관리자 로그

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<all-instance-id>/applications/hadoop-yarn/

인스턴스 상태 로그

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<all-instance-id>/daemons/instance-state/

Amazon EMR 프로비저닝 로그

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<leader-instance-id>/provision-node/*

Hive 로그

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<leader-instance-id>/applications/hive/*

  • 클러스터에서 Hive 로그를 찾으려면 별표(*)를 제거하고 위 링크에 /var/log/hive/를 추가합니다.

  • HiveServer2 로그를 찾으려면 별표(*)를 제거하고 위 링크에 var/log/hive/hiveserver2.log를 추가합니다.

  • HiveCLI 로그를 찾으려면 별표(*)를 제거하고 위 링크에 /var/log/hive/user/hadoop/hive.log를 추가합니다.

  • Hive Metastore Server 로그를 찾으려면 별표(*)를 제거하고 위 링크에 /var/log/hive/user/hive/hive.log를 추가합니다.

Tez 애플리케이션의 프라이머리 또는 태스크 노드에서 오류가 발생한 경우 적절한 Hadoop 컨테이너의 로그를 제공합니다.

디버깅 도구 활성화

디버깅 도구를 사용하면 Amazon EMR 콘솔에서 로그 파일을 더 쉽게 찾아볼 수 있습니다. 자세한 내용은 디버깅 도구에서 로그 파일 보기 섹션을 참조하세요. 클러스터에 대한 디버깅을 활성화하면 Amazon EMR이 Amazon S3에 로그 파일을 아카이브한 후 해당 파일에 대해 인덱스를 생성합니다. 그러면 콘솔을 사용하여 직관적인 방식으로 클러스터에 대한 단계, 작업, 작업 시도 로그를 찾아볼 수 있습니다.

Amazon EMR 콘솔에서 디버깅 도구를 사용하려면 콘솔, CLI 또는 API를 사용하여 클러스터를 시작할 때 디버깅을 활성화해야 합니다. 새 Amazon EMR 콘솔은 디버깅 도구를 제공하지 않습니다.

Old console
이전 콘솔에서 디버깅 도구를 켜는 방법
  1. 새 Amazon EMR 콘솔로 이동하고 측면 탐색에서 이전 콘솔로 전환을 선택합니다. 이전 콘솔로 전환할 때 예상되는 사항에 대한 자세한 내용은 이전 콘솔 사용을 참조하세요.

  2. 클러스터 생성(Create cluster)을 선택합니다.

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

  4. Cluster Configuration(클러스터 구성) 섹션의 Logging(로깅) 필드에서 Enabled(활성)를 선택합니다. 로깅을 활성화해야 디버깅을 활성화할 수 있습니다.

  5. 로그 폴더 S3 위치 필드에 로그를 저장할 Amazon S3 경로를 입력합니다.

  6. Debugging(디버깅) 필드에서 Enabled(활성)를 선택합니다. 디버깅 옵션은 Amazon SQS 교환을 생성하여 Amazon EMR 서비스 백엔드에 디버깅 메시지를 게시합니다. exchange에 메시지를 게시하는 데 요금이 부과될 수 있습니다. 자세한 내용은 Amazon SQS 제품 페이지를 참조하세요.

  7. 클러스터 계획 및 구성에서 설명한 대로 클러스터 생성 작업을 계속합니다.

AWS CLI
AWS CLI를 사용하여 디버깅 도구를 켜는 방법

AWS CLI를 사용하여 디버깅을 활성화하려면 create-cluster 하위 명령과 --enable-debugging 파라미터를 입력합니다. 또한 디버깅을 활성화할 때 --log-uri 파라미터를 지정해야 합니다.

  • AWS CLI를 사용하여 디버깅을 활성화하려면 다음 명령을 입력하고 myKey를 EC2 키 페어의 이름으로 바꿉니다.

    aws emr create-cluster --name "Test cluster" \ --release-label emr-5.36.1 \ --log-uri s3://DOC-EXAMPLE-BUCKET/logs \ --enable-debugging \ --applications Name=Hadoop Name=Hive Name=Pig \ --use-default-roles \ --ec2-attributes KeyName=myKey \ --instance-type m5.xlarge \ --instance-count 3

    --instance-groups 파라미터를 사용하지 않고 인스턴스 수를 지정하면 단일 프라이머리 노드가 시작되고 나머지 인스턴스는 코어 노드로 시작됩니다. 모든 노드는 이 명령에 지정된 인스턴스 유형을 사용합니다.

    참고

    EMR 서비스 역할과 EC2 인스턴스 프로파일을 아직 생성하지 않았다면 emr create-default-roles 하위 명령을 입력하기 전에 aws create-cluster를 입력하여 생성합니다.

API
Amazon EMR API를 사용하여 디버깅 도구를 켜는 방법
  • 다음 Java SDK 구성을 사용하여 디버깅을 활성화합니다.

    StepFactory stepFactory = new StepFactory(); StepConfig enabledebugging = new StepConfig() .withName("Enable debugging") .withActionOnFailure("TERMINATE_JOB_FLOW") .withHadoopJarStep(stepFactory.newEnableDebuggingStep());

    이 예에서는 new StepFactory()us-east-1을 기본 리전으로 사용합니다. 클러스터가 다른 리전에서 시작되는 경우 new StepFactory("ap-northeast-2.elasticmapreduce") 등의 new StepFactory("region.elasticmapreduce")를 사용하여 리전을 지정해야 합니다.

디버깅 옵션 정보

Amazon EMR 릴리스 4.1.0~5.27.0은 모든 리전에서 디버깅을 지원합니다. 다른 Amazon EMR 버전은 디버깅 옵션을 지원하지 않습니다. 2023년 1월 23일부터 Amazon EMR은 모든 버전의 디버깅 도구를 지원 중단합니다.

Amazon EMR은 Amazon SQS 대기열을 생성하여 디버깅 데이터를 처리합니다. 메시지 요금이 적용될 수 있습니다. 그러나 Amazon SQS에는 최대 1,000,000번의 요청이 가능한 프리 티어가 있습니다. 자세한 내용은 https://aws.amazon.com/https://aws.amazon.com/sqs 섹션을 참조하세요.

디버깅은 역할을 사용해야 합니다. 따라서 서비스 역할 및 인스턴스 프로파일에서는 사용자가 모든 Amazon SQS API 작업을 사용할 수 있도록 허용해야 합니다. 역할이 Amazon EMR 관리형 정책에 연결된 경우, 역할을 수정하기 위해 아무것도 할 필요가 없습니다. 사용자 지정 역할이 있는 경우, sqs:* 권한을 추가해야 합니다. 자세한 내용은 AWS 서비스 및 리소스의 Amazon EMR 권한에 대한 IAM 서비스 역할 구성 섹션을 참조하세요.