AWS Glue 작업이 실패하고 “종료 코드로 인한 명령 실패” 오류가 발생합니다.
간략한 설명
“종료 코드 X로 인해 명령 실패”는 AWS Glue 애플리케이션이 종료될 때 반환되는 일반 오류 메시지입니다. 이 오류는 다음 조건 중 하나 이상에 해당하는 경우에 발생합니다.
- AWS Glue 작업의 드라이버 또는 실행기에 메모리가 부족합니다.
- 작업 스크립트에 코드 관련 문제가 있습니다.
- AWS Identity and Access Management(AWS IAM) 역할에 스크립트 경로에 액세스하는 데 필요한 권한이 없습니다.
이 오류를 더 자세히 조사하려면 Amazon CloudWatch 로그 및 지표를 검토하십시오.
해결 방법
AWS Glue Spark 작업이 “종료 코드 1로 인한 명령 실패” 오류를 나타내며 실패하고 CloudWatch 로그에 “java.lang.OutOfMemoryError: Java 힙 공간" 오류가 표시됩니다.
이 AWS Glue 오류는 작업의 드라이버 또는 실행기 프로세스에 메모리가 부족함을 나타냅니다. 드라이버 또는 실행기가 메모리 부족(OOM) 예외를 유발하는지 확인하려면 glue.driver.jvm.heap.usage 및 glue.executorID.heap.usage에 대한 CloudWatch 지표를 검토하십시오. 자세한 내용은 Amazon CloudWatch 지표를 사용한 AWS Glue 모니터링을 참조하십시오.
드라이버로 인한 OOM 예외 문제를 해결하려면 AWS Glue Spark 작업에서 "java.lang.OutOfMemoryError: Java 힙 공간" 오류를 해결하려면 어떻게 합니까? 및 드라이버 OOM 예외 디버깅을 참조하십시오.
실행기로 인한 OOM 예외 문제를 해결하려면 실행기 OOM 예외 디버깅을 참조하십시오.
“종료 코드 1로 인한 명령 실패”를 나타내며 실행기가 실패함
이 오류는 AWS Glue 작업을 취소할 때 발생합니다. 이 오류는 실행기를 강제로 종료하고 드라이버가 종료되는 경우에도 발생합니다. 오류에 대한 자세한 내용은 AWS Glue의 CloudWatch 로그를 검토하십시오.
AWS Glue 버전 0.9/1.0 Spark 작업이 “종료 코드 1로 인한 명령 실패”라는 오류를 나타내며 실패하고 CloudWatch 로그에 “메모리 제한을 초과하여 YARN에서 컨테이너가 종료됨” 오류가 표시됩니다.
참고: AWS Glue 버전 1.0 Spark 작업이 지원 종료에 도달했습니다. 성능을 향상시키려면 Glue 2.0 이상으로 업그레이드하십시오.
이 AWS Glue 오류는 실행기가 OOM 예외를 유발하고 있음을 나타냅니다. 이 오류를 해결하려면 실행기 OOM 예외 디버깅을 참조하십시오.
AWS Glue Python 쉘 작업이 “종료 코드 1로 인한 명령 실패” 오류를 나타내며 실패함
이 오류는 AWS Glue IAM 역할에 Amazon Simple Storage Service(Amazon S3) 경로에서 AWS Glue 스크립트에 액세스할 수 있는 권한이 없음을 나타냅니다. AWS Glue IAM 역할이 스크립트 위치 경로에 액세스하기 위해 필요한 권한을 검토하십시오. 그런 다음, 이러한 권한을 IAM 역할에 연결합니다.
AWS Glue 작업이 “종료 코드 1로 인한 명령 실패” 오류를 나타내며 실패하고 시작되지 않음
CloudWatch 작업 로그에서 Amazon S3와 관련된 오류를 확인하십시오. 로그에서 다음과 비슷한 오류가 발생할 수 있습니다.
com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied' Request ID: xxxxxxxxxxxxx)
이 오류는 AWS Glue IAM 역할에 Amazon S3 경로에서 AWS Glue ETL 스크립트에 액세스할 권한이 없을 때 발생합니다. AWS Glue IAM 역할이 스크립트 위치 경로에 액세스하기 위해 필요한 권한을 검토하십시오. 그런 다음, 이러한 권한을 IAM 역할에 연결합니다.
AWS Glue 작업이 때때로 “종료 코드 10으로 인한 명령 실패”를 나타내며 실패하고 올바른 IAM 및 S3 버킷 권한을 사용했는데도 CloudWatch 로그에 오류가 표시됨
com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied' Request ID: xxxxxxxxxxxxx)
이 AWS Glue 오류는 AWS Glue 버전 3.0 또는 4.0에서 발생합니다. 이 오류는 AWS Glue 보안 구성을 사용할 때 발생하지만 S3 버킷 정책은 암호화되지 않은 se:PutObject를 거부합니다.
이 문제를 해결하려면 스크립트 시작 부분에서 **job.init()**를 실행하여 AWS Glue 보안 구성을 적용하십시오. job.init() 이전에 Spark 세션을 시작하면 Spark 보안 구성 속성이 재정의되고 오류가 발생합니다.
다음 예제를 참조하십시오.
job = Job(glueContext)
job.init(args["JOB_NAME"], args)
#Use one of the following depending on whether Spark configuration is being set or not
spark = glueContext.spark_session
spark = glueContext.spark_session.builder.enableHiveSupport().config("hive.exec.dynamic.partition","true").config("hive.exec.dynamic.partition.mode", "nonstrict").getOrCreate()
AWS Glue 보안 구성에 대한 자세한 내용은 크롤러, 작업 및 개발 엔드포인트에서 작성한 데이터 암호화를 참조하십시오.
AWS Glue 작업이 “종료 코드 X로 인한 명령 실패” 오류를 나타내며 실패하고 JAR 파일이 작업에 전달됨
CloudWatch 로그에서 다음 오류 중 하나를 발견할 수 있습니다.
"스레드 "main" java.lang.NoSuchMethodError의 예외"
"스레드 "main” java.lang.ExceptionInInitializerError의 예외"
이러한 오류는 JAR 종속성 충돌 또는 Spark 버전 충돌을 나타냅니다. JAR 실행 파일과 작업에 전달된 추가 JAR 파일에 충돌이 있는지 확인합니다. 여러 JAR 파일을 전달하는 경우 한 번에 하나의 JAR 파일을 제거하고 AWS Glue 작업을 다시 실행하십시오. 이렇게 하면 문제를 일으키는 파일을 분리할 수 있습니다.
관련 정보
Apache Spark 웹 UI를 사용하여 작업 모니터링
AWS Glue ETL 작업이 “메모리 제한을 초과하여 YARN에서 컨테이너가 종료됨” 오류를 나타내며 실패하는 이유는 무엇입니까?