내용으로 건너뛰기

Amazon EMR에서 Hive 및 Spark를 사용하여 다른 계정에 있는 Data Catalog를 쿼리하려면 어떻게 해야 합니까?

3분 분량
0

Apache Hive와 Apache Spark를 사용하여 Amazon EMR에서 다른 AWS 계정의 AWS Glue Data Catalog에 액세스하고 쿼리하려고 합니다.

간략한 설명

다른 계정의 Data Catalog에 동적으로 액세스하려면 Hive 또는 Spark 구성에서 aws.glue.catalog.separator 속성을 지정합니다. 구성에서 hive.metastore.glue.catalogid 속성을 지정하여 다른 계정의 특정 Data Catalog에 액세스할 수도 있습니다.

해결 방법

AWS Glue에 대한 교차 계정 액세스 권한을 부여합니다. AWS Glue 테이블이 가리키는 Amazon Simple Storage Service(Amazon S3) 버킷에서 교차 계정 액세스가 구성되어 있어야 합니다. 자세한 내용은 EMR File System의 교차 계정 액세스를 설정하려면 어떻게 해야 합니까?를 참조하십시오.

다른 계정의 Data Catalog에 동적 액세스

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

EMR 클러스터를 시작할 때 다음 예시와 비슷한 구성 객체를 추가합니다. 자세한 내용은 클러스터 생성 시 애플리케이션 구성을 참조하십시오.

[
    {
        "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. 클러스터 목록의 클러스터 ID에서 재구성하려는 활성 클러스터를 선택합니다.
  3. 클러스터 세부 정보 페이지에서 애플리케이션 탭을 선택합니다.
  4. 인스턴스 그룹 구성에서 인스턴스 그룹을 선택하고, 재구성을 선택합니다.
  5. 새 구성 추가를 선택하고 다음 정보를 입력합니다.
    Classificationhive-site를 입력합니다.
    Propertyaws.glue.catalog.separator를 입력합니다.
    Value/ 값을 입력합니다.
    Classificationhive-site를 입력합니다.
    Propertyhive.metastore.client.factory.class를 입력합니다.
    Valuecom.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory를 입력합니다.
    Classificationspark-hive-site를 입력합니다.
    Propertyaws.glue.catalog.separator를 입력합니다.
    Value/ 값을 입력합니다.
    Classificationspark-hive-site를 입력합니다.
    Propertyhive.metastore.client.factory.class를 입력합니다.
    Valuecom.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory를 입력합니다.
  6. 모든 활성 인스턴스 그룹에 이 구성 적용을 선택하고, 변경 사항 저장을 저장합니다. 자세한 정보는 실행 중인 클러스터에서 인스턴스 그룹 재구성을 참조하십시오.

다른 계정의 테이블 쿼리

참고: Amazon EMR 버전 6.5에서 Spark 작업을 실행할 때는 구성 속성 spark.sql.catalogImplementation=hive를 전달합니다. 자세한 내용은 Apache Spark 웹사이트에서 Spark 속성 동적 로드를 참조하십시오.

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

Hive:

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

Spark:

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

위의 Spark 명령을 spark-submit 스크립트에서 실행하거나 노트북 쉘 명령으로 실행합니다.

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

Hive:

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

Spark:

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

위의 Spark 명령을 spark-submit 스크립트에서 실행하거나 노트북 쉘 명령으로 실행합니다.

다른 계정의 특정 Data Catalog에 액세스

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

EMR 클러스터를 시작할 때 다음 예시와 비슷한 구성 객체를 추가합니다. 자세한 내용은 클러스터 생성 시 애플리케이션 구성을 참조하십시오.

[
    {
        "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. 클러스터 목록의 클러스터 ID에서 재구성하려는 활성 클러스터를 선택합니다.
  3. 클러스터 세부 정보 페이지에서 애플리케이션 탭을 선택합니다.
  4. 인스턴스 그룹 구성에서 인스턴스 그룹을 선택하고, 재구성을 선택합니다.
  5. 새 구성 추가를 선택하고 다음 정보를 입력합니다.
    Classificationhive-site를 입력합니다.
    Propertyhive.metastore.glue.catalogid를 입력합니다.
    Valueaccount-id를 입력합니다.
    Classificationhive-site를 입력합니다.
    Propertyhive.metastore.client.factory.class를 입력합니다.
    Valuecom.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory를 입력합니다.
    Classificationspark-hive-site를 입력합니다.
    Propertyhive.metastore.glue.catalogid를 입력합니다.
    Valueaccount-id를 입력합니다.
    Classificationspark-hive-site를 입력합니다.
    Propertyhive.metastore.client.factory.class를 입력합니다.
    Valuecom.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory를 입력합니다.
  6. 모든 활성 인스턴스 그룹에 이 구성 적용을 선택하고, 변경 사항 저장을 저장합니다. 자세한 정보는 실행 중인 클러스터에서 인스턴스 그룹 재구성을 참조하십시오.

다른 계정의 테이블 쿼리

지정된 Data Catalog에 저장된 테이블을 쿼리하려면 다음 예시와 비슷한 명령을 실행합니다.

Hive:

SELECT * FROM `demodb.tab1` LIMIT 5;

Spark:

spark.sql("SELECT * FROM `demodb`.tt1 LIMIT 5").show()
AWS 공식업데이트됨 9달 전