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

최종 업데이트 날짜: 2020년 8월 31일

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

간략한 설명

Hive와 Spark 구성에서 "aws.glue.catalog.separator": "/" 속성을 추가하세요. 새로운 클러스터나 실행 중인 클러스터에 이 속성을 구성할 수 있습니다.

참고: 이 솔루션은 Amazon EMR 릴리스 5.28.0 이상에서 유효합니다. EMR 클러스터와 AWS Glue Data Catalog는 동일한 리전에 있어야 합니다.

​해결방법

아직 AWS Glue에 교차 계정 액세스를 설정하지 않았다면 설정하세요. AWS Glue 테이블이 가리키는 Amazon Simple Storage Service(Amazon S3) 버킷이 교차 계정 액세스에 구성되었는지 확인하세요. 자세한 내용은 EMRFS에 교차 계정 액세스를 설정하려면 어떻게 해야 합니까?를 참조하세요.

그런 다음, Hive와 Spark에 aws.glue.catalog.separator 속성을 /로 설정합니다.

새 클러스터에서

클러스터를 시작할 때 다음과 유사한 구성 객체를 추가합니다.

[
    {
        "Classification": "hive-site",
        "Properties": {
            "aws.glue.catalog.separator": "/"
        }
    },
    {
        "Classification": "spark-hive-site",
        "Properties": {
            "aws.glue.catalog.separator": "/"
        }
    }    
]

실행 중인 클러스터에서

  1. Amazon EMR 콘솔을 엽니다.
  2. 클러스터 목록의 [이름] 아래에서 재구성하려는 활성 클러스터를 선택합니다.
  3. 클러스터의 클러스터 세부 정보 페이지를 열고 [구성] 탭을 선택합니다
  4. [필터] 드롭다운 목록에서 다시 구성할 인스턴스 그룹을 선택합니다.
  5. [재구성] 드롭다운 목록에서 [테이블에서 편집]을 선택합니다.
  6. 구성 분류 테이블에서 [구성 추가]를 선택한 후 다음을 입력합니다.
    [분류]: hive-site
    [속성]: aws.glue.catalog.separator
    []: /

    [분류]: spark-hive-site
    [속성]: aws.glue.catalog.separator
    []: /
  7. [이 구성을 모든 활성 인스턴스 그룹에 적용]을 선택한 다음, [변경 사항 저장]을 선택합니다.

다른 AWS 계정에서 테이블 쿼리

다른 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()

또는 spark-submit 스크립트에서 --conf 옵션을 사용하거나 노트북 쉘 명령으로 실행하여 파라미터를 전달합니다. 예제:

pyspark --conf spark.hadoop.aws.glue.catalog.separator="/"

이 문서가 도움이 되었습니까?


결제 또는 기술 지원이 필요합니까?