Glue 데이터 카탈로그에 연결하려고 할 때 발생하는 EMR 작업 실패 문제를 해결하려면 어떻게 해야 하나요?

4분 분량
0

Amazon EMR 작업을 AWS Glue 데이터 카탈로그에 연결할 수 없습니다.

간략한 설명

Amazon EMR은 Apache Spark, Apache Hive 또는 Presto/Trino를 사용할 때 데이터 카탈로그를 영구 메타 스토어로 사용합니다. 다양한 클러스터, 서비스, 애플리케이션 또는 AWS 계정에서 데이터 카탈로그를 공유할 수 있습니다.

그러나 다음과 같은 이유로 데이터 카탈로그에 대한 연결이 실패할 수 있습니다.

  • Glue 데이터 카탈로그에 대한 사용 권한 부족.
  • 테이블 위치로 지정된 Amazon Simple Storage Service(S3) 객체에 대한 사용 권한 부족.
  • 암호화된 객체에 대한 AWS Key Management Service(AWS KMS) 서비스에 대한 사용 권한 부족.
  • AWS Lake Formation의 사용 권한 부족.
  • EMR 클러스터 매개 변수 구성이 없거나 잘못됨.
  • 잘못된 쿼리 형식.

해결 방법

EC2 인스턴스 프로파일에 데이터 카탈로그 또는 S3 버킷에 대한 충분한 사용 권한이 없습니다

동일한 계정 또는 여러 계정에서 데이터 카탈로그에 액세스하려면 다음 사용자에게 AWS Glue 작업 및 S3 버킷에 대한 사용 권한이 있어야 합니다.

  • Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 프로파일.
  • 데이터 카탈로그를 호출하는 AWS Identity and Access Management(IAM) 역할.

사용 권한이 누락된 경우 다음과 유사한 오류가 표시됩니다.

Unable to verify existence of default database: com.amazonaws.services.glue.model.AccessDeniedException: 
User: arn:aws:sts::Acct-id:assumed-role/Role/instance-id is not authorized to perform: glue:GetDatabase on resource: arn:aws:glue:region:Acct-id:catalog because no identity-based policy allows the glue:GetDatabase action 
(Service: AWSGlue; Status Code: 400; Error Code: AccessDeniedException; Request ID: request-id; Proxy: null

동일한 계정에서 Data Catalog에 액세스할 때 발생하는 문제를 해결하려면 인스턴스 프로파일 또는 IAM 사용자의 사용 권한을 확인하세요.

계정 간 데이터 카탈로그에 액세스할 때 발생하는 문제를 해결하려면 호출 계정 및 구성에 대한 모든 사용 권한을 확인하세요. 그런 다음 교차 계정 S3 액세스가 제공되는지 확인합니다.

EC2 인스턴스 프로파일에는 필요한 AWS KMS 사용 권한이 없음

고객 관리 키를 사용하여 데이터 카탈로그를 암호화하는 경우 EC2 인스턴스 프로파일에 키에 액세스하는 데 필요한 권한이 있어야 합니다. 사용 권한이 누락된 경우 다음과 유사한 오류가 표시될 수 있습니다. 이 오류는 spark 쉘, Hive CLI 또는 Presto/Trino CLI를 사용하는 경우 EMR 콘솔에 표시됩니다. 프로그래밍 방식으로 코드를 제출하는 경우 컨테이너 로그에 오류가 나타납니다.

Caused by: MetaException(message:User: arn:aws:sts::acct-id:assumed-role/Role/instance-id is not authorized to perform: kms:GenerateDataKey on resource: arn:aws:kms:region:acct-id:key/fe90458f-beba-460e-8cae-25782ea9f8b3 because no identity-based policy allows the kms:GenerateDataKey action (Service: AWSKMS; Status Code: 400; Error Code: AccessDeniedException; Request ID: request-id; Proxy: null) 
(Service: AWSGlue; Status Code: 400; Error Code: GlueEncryptionException; Request ID: request-id; Proxy: null))

앞서 발생한 오류가 발생하지 않도록 하려면 키에 대한 액세스를 허용하는 데 필요한 AWS KMS 사용 권한을 추가하세요.

서비스를 호출하는 AWS 계정이 데이터 카탈로그가 있는 계정과 동일한 계정이 아닌 경우 다음을 수행하세요.

  • 호출하는 AWS 계정이 데이터 카탈로그와 동일한 리전에 있는 경우 키 공유를 활성화하세요.
  • 다중 리전 액세스의 경우 다른 계정과 공유할 수 있는 다중 리전 키를 생성하세요.

인스턴스 프로파일에 AWS Lake Formation에 액세스할 수 없거나 Glue 테이블에 필요한 권한이 없습니다.

AWS Lake Formation에서 데이터 카탈로그 권한을 관리하거나 등록할 때는 해당 역할에 해당 객체에 대한 Lake Formation 사용 권한이 있어야 합니다. 해당 역할에 Lake Formation 사용 권한이 없는 경우 다음 오류가 표시될 수 있습니다.

pyspark.sql.utils.AnalysisException: Unable to verify existence of default database: com.amazonaws.services glue.model.AccessDeniedException: 
Insufficient Lake Formation permission(s) on default (Service: AWSGlue; Status Code: 400; Error Code: AccessDeniedException; Request ID: request-id; Proxy: null)

앞서 발생한 오류를 해결하려면 EC2 인스턴스 프로파일 역할에 필요한 권한을 추가하세요. 그리고 테이블 사용 권한과 함께 Glue 테이블 또는 데이터베이스에 사용 권한을 제공합니다.

EMR 클러스터에 올바른 구성이 없거나 쿼리 문자열이 잘못되었습니다.

사용 권한은 정확하지만 구성이 잘못된 경우 교차 계정 Glue 액세스를 시도할 때 spark 쉘에 다음 오류가 표시됩니다.

An error occurred (EntityNotFoundException) when calling the GetTables operation: Database db-name not found.

또는

org.apache.spark.sql.AnalysisException: Table or view not found: acct-id/db.table-name line 2 pos 14

이 오류를 해결하려면 각 구성에 필요한 모든 매개 변수를 추가하세요.


AWS 공식
AWS 공식업데이트됨 일 년 전