Amazon EMR에서 Hive 및 Spark를 사용하여 다른 AWS 계정의 AWS Glue 데이터 카탈로그를 쿼리하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2023년 1월 24일

Amazon EMR에서 Apache Hive 및 Apache Spark를 사용하여 다른 계정의 AWS Glue 데이터 카탈로그에 액세스하고 쿼리하고 싶습니다.

간략한 설명

Hive 또는 Spark 구성에서 aws.glue.catalog.separator 속성을 지정하여 다른 계정의 데이터 카탈로그에 동적으로 액세스할 수 있습니다. 또한 Hive 또는 Spark 구성에서 hive.metastore.glue.catalogid 속성을 지정하여 다른 계정의 특정 데이터 카탈로그에 액세스할 수 있습니다.

해결 방법

AWS Glue에 대한 크로스 계정 액세스 권한을 부여하지 않은 경우 크로스 계정 액세스 권한 부여에 설명된 단계에 따라 설정합니다. AWS Glue 테이블이 가리키는 Amazon Simple Storage Service(S3) 버킷이 크로스 계정 액세스를 위해 구성되었는지 확인하세요. 자세한 내용은 Amazon EMRFS에 대하여 크로스 계정 액세스를 설정하려면 어떻게 해야 하나요?를 참조하세요.

다른 계정의 데이터 카탈로그에 동적으로 액세스

새 클러스터에 구성 변경 사항 적용

EMR 클러스터를 시작할 때 다음 객체와 유사한 구성 객체를 추가합니다. 자세한 내용은 Configure applications when you create a cluster(클러스터 생성 시 애플리케이션 구성)를 참조하세요.

[{
    "Classification": "hive-site",
    "Properties": {
        "aws.glue.catalog.separator": "/",
        "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory"
    }
}, {
    "Classification": "spark-hive-site",
    "Properties": {
        "aws.glue.catalog.separator": "/",
        "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory"
    }
}]

실행 중인 클러스터에 구성 변경 사항 적용

  1. Amazon EMR 콘솔을 엽니다.
  2. 클러스터 목록의 Cluster Id(클러스터 ID) 아래에서 재구성하려는 활성 클러스터를 선택합니다.
  3. 클러스터 세부 정보 페이지에서 Applications(애플리케이션) 탭을 선택합니다.
  4. 애플리케이션 세부 정보 페이지에서 아래로 스크롤하여 Instacne group configurations(인스턴스 그룹 구성)로 이동합니다.
  5. 인스턴스 그룹을 선택한 다음 Reconfigure(재구성)를 선택합니다.
  6. 다음 화면에서 Add new configuration(새 구성 추가)을 선택하고 다음을 입력합니다.
    Classification(분류): hive-site
    [속성]: aws.glue.catalog.separator
    Value(값): /
    Classification(분류): hive-site
    Property(속성): hive.metastore.client.factory.class
    Value(값): com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory
    Classification(분류): spark-hive-site
    [속성]: aws.glue.catalog.separator
    []: /
    Classification(분류): spark-hive-site
    Property(속성): hive.metastore.client.factory.class
    Value(값): com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory
  7. Apply this configuration to all active instance groups(이 구성을 모든 활성 인스턴스 그룹에 적용)를 선택한 다음 Save changes(변경 사항 저장)를 선택합니다. 자세한 내용은 Reconfigure an instance group in a running cluster(실행 중인 클러스터에서 인스턴스 그룹 재구성)을 참조하세요.

다른 AWS 계정의 테이블 쿼리

참고: Amazon EMR 6.5에서는 Spark 작업을 실행할 때 구성 속성 spark.sql.catalogImplementation=hive를 전달하세요. 자세한 내용은 Apache Spark 설명서에서 Dynamically loading Spark properties(Spark 속성 동적 로드)를 참조하세요.

다른 AWS 계정에 있는 테이블을 쿼리하려면 쿼리에 계정 번호를 지정합니다. 계정 번호는 카탈로그 ID와 동일합니다. 예를 들어 Hive의 계정 111122223333에서 demodb.tab1을 쿼리하려면 다음 명령을 실행합니다.

SELECT * FROM `111122223333/demodb.tab1` LIMIT 5;

Spark 예제(spark-submit 스크립트에서 또는 노트북 쉘 명령으로 실행):

spark.sql("SELECT * FROM `111122223333/demodb`.tt1 LIMIT 5").show()

두 카탈로그에서 테이블을 조인할 수도 있습니다.

Hive 예제:

SELECT * FROM `111122223333/demodb.tab1` t1 INNER JOIN `444455556666/demodb.tab2` t2 ON t1.col1 = t2.col2

Spark 예제(spark-submit 스크립트에서 또는 노트북 쉘 명령으로 실행):

spark.sql(SELECT * FROM `111122223333/demodb.tab1` t1 INNER JOIN `444455556666/demodb.tab2` t2 ON t1.col1 = t2.col2).show()

다른 계정의 특정 데이터 카탈로그에 액세스

새 클러스터에 구성 변경 사항 적용

EMR 클러스터를 시작할 때 다음 객체와 유사한 구성 객체를 추가합니다. 자세한 내용은 Configure applications when you create a cluster(클러스터 생성 시 애플리케이션 구성)를 참조하세요.

[{
    "Classification": "hive-site",
    "Properties": {
        "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory",
        "hive.metastore.glue.catalogid": "account-id"
    }
}, {
    "Classification": "spark-hive-site",
    "Properties": {
        "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory",
        "hive.metastore.glue.catalogid": "account-id"
    }
}]

실행 중인 클러스터에 구성 변경 사항 적용

  1. Amazon EMR 콘솔을 엽니다.
  2. 클러스터 목록의 Cluster Id(클러스터 ID) 아래에서 재구성하려는 활성 클러스터를 선택합니다.
  3. 클러스터 세부 정보 페이지에서 Applications(애플리케이션) 탭을 선택합니다.
  4. 애플리케이션 세부 정보 페이지에서 아래로 스크롤하여 Instacne group configurations(인스턴스 그룹 구성)로 이동합니다.
  5. 인스턴스 그룹을 선택한 다음 Reconfigure(재구성)를 선택합니다.
  6. 다음 화면에서 Add new configuration(새 구성 추가)을 선택하고 다음을 입력합니다.
    Classification(분류): hive-site
    Property(속성): hive.metastore.glue.catalogid
    Value(값): account-id
    Classification(분류): hive-site
    Property(속성): hive.metastore.client.factory.class
    Value(값): com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory
    Classification(분류): spark-hive-site
    Property(속성): hive.metastore.glue.catalogid
    Value(값): account-id
    Classification(분류): spark-hive-site
    Property(속성): hive.metastore.client.factory.class
    Value(값): com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory
  7. Apply this configuration to all active instance groups(이 구성을 모든 활성 인스턴스 그룹에 적용)를 선택한 다음 Save changes(변경 사항 저장)를 선택합니다. 자세한 내용은 Reconfigure an instance group in a running cluster(실행 중인 클러스터에서 인스턴스 그룹 재구성)를 참조하세요.

다른 AWS 계정의 테이블 쿼리

다음 명령을 실행하여 지정된 AWS Glue 데이터 카탈로그에 저장된 테이블을 쿼리할 수 있습니다. 예: demodb.tab1을 쿼리하는 방법

Hive에서는 다음 명령을 실행합니다.

SELECT * FROM `demodb.tab1` LIMIT 5;

Spark 예제(spark-submit 스크립트에서 또는 노트북 쉘 명령으로 실행):

spark.sql("SELECT * FROM `demodb`.tt1 LIMIT 5").show()

이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?