AWS CLI를 사용하여 작업 실행 관리 - 아마존 EMR

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

AWS CLI를 사용하여 작업 실행 관리

이 페이지에서는 AWS Command Line Interface(AWS CLI)를 사용하여 작업 실행을 관리하는 방법을 다룹니다.

작업 실행 구성 옵션

다음 옵션을 사용하여 작업 실행 파라미터를 구성합니다.

  • --execution-role-arn: 작업 실행에 사용되는 IAM 역할을 제공해야 합니다. 자세한 내용은 Amazon EMR on EKS에서 작업 실행 역할 사용 섹션을 참조하세요.

  • --release-label: Amazon EMR 버전 5.32.0 및 6.2.0 이상을 사용하여 Amazon EMR on EKS를 배포할 수 있습니다. Amazon EMR on EKS는 이전 Amazon EMR 릴리스 버전에서 지원되지 않습니다. 자세한 내용은 EMR아마존 EKS 출시 예정 섹션을 참조하세요.

  • --job-driver: 작업 드라이버는 기본 작업에 대한 입력을 제공하는 데 사용됩니다. 실행하려는 작업 유형에 대한 값 중 하나만 전달할 수 있는 집합 유형 필드입니다. 다음은 지원되는 유형입니다.

    • Spark 제출 작업 - Spark 제출을 통해 명령을 실행하는 데 사용됩니다. 이 작업 유형을 사용하여 Spark 제출을 통해 Scala, PySpark, SparkKr, SparkSQL 및 기타 지원되는 작업을 실행할 수 있습니다. 이 작업 유형에는 다음과 같은 파라미터가 있습니다.

      • Entrypoint - 실행하려는 기본 jar/py 파일에 대한 Hadoop 호환 파일 시스템(HCFS) 참조입니다.

      • EntryPointArguments - 기본 jar/py 파일에 전달하려는 인수의 배열입니다. entrypoint 코드를 사용하여 이러한 파라미터를 읽는 작업을 처리해야 합니다. 배열의 각 인수는 쉼표로 분리해야 합니다. EntryPointArguments 인수에는 (), {} 또는 []와 같은 괄호를 포함할 수 없습니다.

      • SparkSubmitParameters - 작업에 전송하려는 추가 Spark 파라미터입니다. 이 파라미터를 사용하여 드라이버 메모리 및 실행기 수와 같은 기본 Spark 속성(예: -conf 또는 -class)을 재정의합니다. 자세한 내용은 Launching Applications with spark-submit을 참조하세요.

    • Spark SQL 작업 - Spark SQL을 통해 SQL 쿼리 파일을 실행하는 데 사용됩니다. 이 작업 유형을 사용하여 SparkSQL 작업을 실행할 수 있습니다. 이 작업 유형에는 다음과 같은 파라미터가 있습니다.

  • --configuration-overrides: 애플리케이션에 대한 구성 객체를 제공하여 애플리케이션의 기본 구성을 재정의할 수 있습니다. 간편 구문을 사용하여 구성을 제공하거나 JSON 파일의 구성 객체를 참조할 수 있습니다. 구성 객체는 분류, 속성 및 선택적 중첩 구성으로 이루어져 있습니다. 속성은 해당 파일에서 재정의하려는 설정으로 구성됩니다. 단일 JSON 객체에서 여러 애플리케이션에 대해 다양한 분류를 지정할 수 있습니다. 사용 가능한 구성 분류는 Amazon EMR 릴리스 버전에 따라 달라집니다. Amazon EMR의 각 릴리스 버전에 사용할 수 있는 구성 분류 목록은 EMR아마존 EKS 출시 예정 섹션을 참조하세요.

    애플리케이션 재정의 및 Spark 제출 파라미터에서 동일한 구성을 전달하는 경우 Spark 제출 파라미터가 우선합니다. 전체 구성 우선순위 목록은 가장 높은 우선순위부터 가장 낮은 우선순위 순으로 나열됩니다.

    • SparkSession 생성 시 제공되는 구성.

    • —conf를 사용하는 sparkSubmitParameters의 일부로 제공되는 구성.

    • 애플리케이션 재정의의 일부로 제공되는 구성.

    • 해당 릴리스에서 Amazon EMR이 선택하는 최적화된 구성.

    • 애플리케이션의 기본 오픈 소스 구성.

    Amazon CloudWatch 또는 Amazon S3를 사용하여 작업 실행을 모니터링하려면 CloudWatch에 대한 구성 세부 정보를 제공해야 합니다. 자세한 정보는 Amazon S3 로그를 사용하도록 작업 실행 구성Amazon CloudWatch Logs를 사용하도록 작업 실행 구성 섹션을 참조하세요. S3 버킷 또는 CloudWatch 로그 그룹이 없는 경우 Amazon EMR은 로그를 버킷에 업로드하기 전에 그룹을 생성합니다.

  • Kubernetes 구성 옵션의 추가 목록은 Spark Properties on Kubernetes를 참조하세요.

    다음 Spark 구성은 지원되지 않습니다.

    • spark.kubernetes.authenticate.driver.serviceAccountName

    • spark.kubernetes.authenticate.executor.serviceAccountName

    • spark.kubernetes.namespace

    • spark.kubernetes.driver.pod.name

    • spark.kubernetes.container.image.pullPolicy

    • spark.kubernetes.container.image

      참고

      사용자 지정 도커 이미지에 spark.kubernetes.container.image를 사용할 수 있습니다. 자세한 내용은 Amazon용 도커 이미지 사용자 지정하기 EMR EKS 섹션을 참조하세요.

Amazon S3 로그를 사용하도록 작업 실행 구성

작업 진행 상황을 모니터링하고 실패 문제를 해결하려면 Amazon S3, Amazon CloudWatch Logs 또는 둘 다로 로그 정보를 전송하도록 작업을 구성해야 합니다. 이 주제는 Amazon EMR on EKS에서 시작된 작업에 Amazon S3에 애플리케이션 로그를 게시하는 작업을 시작하는 데 도움이 됩니다.

S3 로그 IAM 정책

작업에서 Amazon S3로 로그 데이터를 전송하려면 먼저 작업 실행 역할에 대한 권한 정책에 다음 권한이 포함되어야 합니다. DOC-EXAMPLE-BUCKET-LOGGING을 로깅 버킷의 이름으로 바꿉니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET-LOGGING", "arn:aws:s3:::DOC-EXAMPLE-BUCKET-LOGGING/*", ] } ] }
참고

Amazon EMR on EKS는 Amazon S3 버킷을 생성할 수도 있습니다. Amazon S3 버킷을 사용할 수 없는 경우 IAM 정책에 “s3:CreateBucket” 권한을 포함합니다.

Amazon S3에 로그를 전송할 수 있는 적절한 권한을 실행 역할에 부여한 후 AWS CLI를 사용하여 작업 실행 관리에서와 같이 start-job-run 요청의 monitoringConfiguration 섹션에 s3MonitoringConfiguration이 전달되면 로그 데이터가 다음 Amazon S3 위치로 전송됩니다.

  • 컨트롤러 로그 - /logUri/virtual-cluster-id/jobs/job-id/containers/pod-name/(stderr.gz/stdout.gz)

  • 드라이버 로그 - /logUri/virtual-cluster-id/jobs/job-id/containers/spark-application-id/spark-job-id-driver/(stderr.gz/stdout.gz)

  • 실행기 로그 - /logUri/virtual-cluster-id/jobs/job-id/containers/spark-application-id/executor-pod-name/(stderr.gz/stdout.gz)

Amazon CloudWatch Logs를 사용하도록 작업 실행 구성

작업 진행 상황을 모니터링하고 실패 문제를 해결하려면 Amazon S3, Amazon CloudWatch Logs 또는 둘 다로 로그 정보를 전송하도록 작업을 구성해야 합니다. 이 주제는 Amazon EMR on EKS에서 시작된 작업에서 CloudWatch Logs를 사용하는 데 도움이 됩니다. CloudWatch Logs에 대한 자세한 정보는 Amazon CloudWatch 사용 설명서의 로그 파일 모니터링을 참조하세요.

CloudWatch Logs IAM 정책

작업에서 CloudWatch Log로 로그 데이터를 전송하려면 먼저 작업 실행 역할에 대한 권한 정책에 다음 권한이 포함되어야 합니다. my_log_group_namemy_log_stream_prefix를 각각 CloudWatch 로그 그룹 및 로그 스트림 이름으로 바꿉니다. 실행 역할 ARN에 적절한 권한이 있는 한, Amazon EMR on EKS는 로그 그룹과 로그 스트림이 없는 경우 해당 로그 그룹과 로그 스트림을 생성합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:DescribeLogGroups", "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:*:*:*" ] }, { "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:*:*:log-group:my_log_group_name:log-stream:my_log_stream_prefix/*" ] } ] }
참고

Amazon EMR on EKS는 로그 스트림을 생성할 수도 있습니다. 로그 스트림이 없는 경우 IAM 정책에 "logs:CreateLogGroup" 권한이 포함되어야 합니다.

실행 역할에 적절한 권한을 부여한 후 AWS CLI를 사용하여 작업 실행 관리에서와 같이 애플리케이션은 start-job-run 요청의 monitoringConfiguration 섹션에 cloudWatchMonitoringConfiguration이 전달되면 로그 데이터를 CloudWatch Logs로 보냅니다.

StartJobRun API에서 log_group_name은 CloudWatch의 로그 그룹 이름이고 log_stream_prefix는 CloudWatch의 로그 스트림 이름 접두사입니다. AWS Management Console에서 이러한 로그를 보고 검색할 수 있습니다.

  • 컨트롤러 로그 - logGroup/logStreamPrefix/virtual-cluster-id/jobs/job-id/containers/pod-name/(stderr/stdout)

  • 드라이버 로그 - logGroup/logStreamPrefix/virtual-cluster-id/jobs/job-id/containers/spark-application-id/spark-job-id-driver/(stderrstdout)

  • 실행기 로그 - logGroup/logStreamPrefix/virtual-cluster-id/jobs/job-id/containers/spark-application-id/executor-pod-name/(stderr/stdout)

작업 실행 나열

다음 예제에서 볼 수 있듯이 list-job-run을 실행하여 작업 실행 상태를 표시할 수 있습니다.

aws emr-containers list-job-runs --virtual-cluster-id <cluster-id>

작업 실행 설명

다음 예제에서 볼 수 있듯이 describe-job-run을 실행하여 작업 상태, 상태 세부 정보, 작업 이름 등 작업에 대한 추가 세부 정보를 가져올 수 있습니다.

aws emr-containers describe-job-run --virtual-cluster-id cluster-id --id job-run-id

작업 실행 취소

다음 예제에서 볼 수 있듯이 cancel-job-run을 실행하여 실행 중인 작업을 취소할 수 있습니다.

aws emr-containers cancel-job-run --virtual-cluster-id cluster-id --id job-run-id