내용으로 건너뛰기

Glue Data Catalog에 연결하려고 할 때 발생하는 EMR 작업 실패 문제를 해결하려면 어떻게 해야 합니까?

3분 분량
0

Amazon EMR 작업을 AWS Glue Data Catalog에 연결할 수 없습니다.

간략한 설명

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

하지만 다음과 같은 이유로 Data Catalog 연결이 실패할 수 있습니다.

  • Glue Data Catalog에 대한 권한이 부족합니다.
  • 테이블 위치로 지정된 Amazon Simple Storage Service(Amazon S3) 객체에 대한 권한이 부족합니다.
  • 암호화된 객체에 대한 AWS Key Management Service(AWS KMS) 서비스 권한이 부족합니다.
  • AWS Lake Formation에서의 권한이 부족합니다.
  • EMR 클러스터 파라미터 구성이 누락되거나 잘못되었습니다.
  • 쿼리 형식이 올바르지 않습니다.

해결 방법

EC2 인스턴스 프로파일에 Data Catalog 또는 S3 버킷에 대한 권한이 충분하지 않음

동일한 계정 또는 여러 계정에서 Data Catalog에 액세스하려면 다음 위치에 AWS Glue 작업 및 S3 버킷에 대한 권한이 있어야 합니다.

  • Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 프로파일.
  • Data Catalog를 호출하는 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 사용자의 권한을 확인하십시오.

교차 계정으로 Data Catalog에 액세스할 때 발생하는 문제를 해결하려면 호출 계정 및 구성에 대한 모든 권한을 확인하십시오. 이후 교차 계정 S3 액세스가 제공되는지 확인하십시오.

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

고객 관리 키를 사용하여 Data Catalog가 암호화되는 경우 EC2 인스턴스 프로파일에 키 액세스에 필요한 권한이 있어야 합니다. 권한이 없는 경우 다음과 비슷한 오류가 표시될 수 있습니다. 이 오류는 spark-shell, 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 계정이 Data Catalog가 있는 계정과 다른 경우, 다음을 수행하십시오.

  • 호출하는 AWS 계정이 Data Catalog와 동일한 리전에 있는 경우 키 공유를 활성화하십시오.
  • 다중 리전 액세스의 경우 다른 계정과 공유할 수 있는 다중 리전 키를 생성하십시오.

인스턴스 프로파일에서 AWS Lake Formation에 액세스할 수 없거나 Glue 테이블에 필요한 권한이 부여되지 않음

Data Catalog 권한이 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-shell에 다음 오류가 표시됩니다.

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 공식업데이트됨 3년 전