AWS Glue 데이터 카탈로그를 Hive의 메타스토어로 사용 - Amazon EMR

AWS Glue 데이터 카탈로그를 Hive의 메타스토어로 사용

Amazon EMR 버전 5.8.0 이상을 사용하면 AWS Glue 데이터 카탈로그를 메타스토어로 사용하도록 Hive를 구성할 수 있습니다. 영구 메타스토어가 필요하거나 여러 클러스터, 서비스, 애플리케이션 또는 AWS 계정에서 메타스토어를 공유해야 하는 경우에 이 구성을 사용하는 것이 좋습니다.

AWS Glue는 완전관리형 추출, 전환, 적재(ETL) 서비스로, 간단하고 경제적으로 데이터를 분류, 정리, 보강하고, 다양한 데이터 스토어 사이에서 데이터를 안정적으로 이동할 수 있습니다. AWS Glue 데이터 카탈로그는 다양한 데이터 소스과 데이터 형식에서 통합 메타데이터 리포지토리를 제공함으로써, Amazon EMR과의 통합은 물론, Amazon RDS, Amazon Redshift, Redshift Spectrum, Athena, 그리고 Apache Hive 메타스토어와 호환되는 모든 애플리케이션과의 통합을 지원합니다. AWS Glue 크롤러는 Amazon S3의 소스 데이터에서 스키마를 자동으로 추론하고 연결된 메타데이터를 데이터 카탈로그에 저장합니다. 데이터 카탈로그에 대한 자세한 내용은 AWS Glue 개발자 안내서에서 AWS Glue 데이터 카탈로그 채우기를 참조하세요.

AWS Glue에는 별도 요금이 적용됩니다. 데이터 카탈로그에 메타데이터를 저장하고 액세스하는 데 따른 월별 요금과 AWS Glue ETL 작업 및 크롤러 실행 시간에 대해 분당 청구되는 시간별 요금, 그리고 프로비저닝된 각 개발 엔드포인트에 대해 분당 청구되는 시간별 요금이 있습니다. 데이터 카탈로그에는 최대 100만 개의 객체를 무료로 저장할 수 있습니다. 100만 개 이상의 객체를 저장하는 경우, 100만 이상의 객체 100,000개마다 1USD가 부과됩니다. 데이터 카탈로그의 객체로는 테이블, 파티션 또는 데이터베이스가 있습니다. 자세한 내용은 Glue 요금을 참조하십시오.

중요

2017년 8월 14일 이전에 Amazon Athena 또는 Amazon Redshift Spectrum을 사용하여 테이블을 생성한 경우 데이터베이스와 테이블은 AWS Glue와는 별도의 Athena 관리 카탈로그에 저장됩니다. Amazon EMR을 이 테이블과 통합하려면 AWS Glue 데이터 카탈로그로 업그레이드해야 합니다. 자세한 내용은 Amazon Athena 사용 설명서에서 AWS Glue 데이터 카탈로그로 업그레이드를 참조하세요.

AWS Glue 데이터 카탈로그를 메타스토어로 지정

AWS Management Console, AWS CLI 또는 Amazon EMR API를 사용하여 AWS Glue 데이터 카탈로그를 메타스토어로 지정할 수 있습니다. CLI 또는 API를 사용할 때 Hive에 대한 구성 분류를 사용하여 데이터 카탈로그를 지정합니다. 또한 Amazon EMR 5.16.0 이상에서는 구성 분류를 사용하여 다른 AWS 계정에서 데이터 카탈로그를 지정할 수 있습니다. 콘솔을 사용할 때 고급 옵션 또는 빠른 옵션을 사용하여 데이터 카탈로그를 지정할 수 있습니다.

New console
새 콘솔에서 AWS Glue 데이터 카탈로그를 Hive 메타스토어로 지정하는 방법
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/emr에서 Amazon EMR 콘솔을 엽니다.

  2. 왼쪽 탐색 창의 EMR on EC2에서 클러스터를 선택하고 클러스터 생성을 선택합니다.

  3. 애플리케이션 번들에서 코어 Hadoop, HBase 또는 사용자 지정을 선택합니다. 클러스터를 사용자 지정하는 경우 Hive 또는 HCatalog를 애플리케이션 중 하나로 선택해야 합니다.

  4. AWS Glue 데이터 카탈로그 설정에서 Hive 테이블 메타데이터에 사용 확인란을 선택합니다.

  5. 클러스터에 적용할 다른 옵션을 선택합니다.

  6. 클러스터를 시작하려면 클러스터 생성을 선택합니다.

Old console
이전 콘솔에서 AWS Glue 데이터 카탈로그를 Hive 메타스토어로 지정하는 방법
  1. 새 Amazon EMR 콘솔로 이동하고 측면 탐색에서 이전 콘솔로 전환을 선택합니다. 이전 콘솔로 전환할 때 예상되는 사항에 대한 자세한 내용은 이전 콘솔 사용을 참조하세요.

  2. 클러스터 생성Go to advanced options(고급 옵션으로 이동)를 선택합니다.

  3. 릴리스에서 emr-5.8.0 이상을 선택합니다.

  4. Release(릴리스)에서 Hive 또는 HCatalog를 선택합니다.

  5. AWS Glue 데이터 카탈로그 설정에서 Hive 테이블 메타데이터에 사용을 선택합니다.

  6. 클러스터에 대한 다른 옵션을 적절하게 선택하고 다음을 선택한 다음 애플리케이션에 적절하게 다른 클러스터 옵션을 구성합니다.

CLI
AWS CLI를 사용하여 AWS Glue 데이터 카탈로그를 Hive 메타스토어로 지정하는 방법

AWS CLI 및 EMR API를 사용하여 구성 분류를 지정하는 방법에 대한 자세한 내용은 애플리케이션 구성 단원을 참조하십시오.

  • 다음 예에 표시된 대로 hive-site 구성 분류를 사용하여 hive.metastore.client.factory.class에 대한 값을 지정합니다.

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

    EMR 릴리스 버전 5.28.0, 5.28.1 또는 5.29.0 또는 6.x에서 AWS Glue 데이터 카탈로그를 메타스토어로 사용하여 클러스터를 생성하는 경우에는 hive.metastore.schema.verificationfalse로 설정해야 합니다. 이렇게 하면 Hive 및 HCatalog가 MySQL에 대한 메타스토어 스키마를 검증하는 것을 방지합니다. 이러한 구성이 없으면, Hive 또는 HCatalog에서 재구성한 후에 프라이머리 인스턴스 그룹이 일시 중지됩니다.

    [ { "Classification": "hive-site", "Properties": { "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory", "hive.metastore.schema.verification": "false" } } ]

    EMR 릴리스 버전 5.28.0, 5.28.1 또는 5.29.0에 이미 클러스터가 있는 경우, 다음 정보를 사용하여 프라이머리 인스턴스 그룹 hive.metastore.schema.verificationfalse로 설정할 수 있습니다.

    Classification = hive-site Property = hive.metastore.schema.verification Value = false

    다른 AWS 계정에서 데이터 카탈로그를 지정하려면 다음 예제와 같이 hive.metastore.glue.catalogid 속성을 추가합니다. acct-id를 데이터 카탈로그의 AWS 계정으로 바꿉니다.

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

IAM 권한

클러스터에 대한 EC2 인스턴스 프로파일에는 AWS Glue 작업에 대한 IAM 권한이 있어야 합니다. 또한, AWS Glue 데이터 카탈로그 객체에 대해 암호화를 활성화할 경우 역할이 암호화에 사용되는 AWS KMS key를 암호화, 암호 해독 및 생성할 수 있도록 허용해야 합니다.

모든 AWS Glue 작업에 대한 권한

Amazon EMR에 대한 기본 EC2 인스턴스 프로파일을 사용할 경우 어떤 작업도 필요하지 않습니다. EMR_EC2_DefaultRole에 연결된 AmazonElasticMapReduceforEC2Role 관리형 정책은 필요한 모든 AWS Glue 작업을 허용합니다. 하지만 사용자 지정 EC2 인스턴스 프로파일 및 권한을 지정하는 경우 적절한 AWS Glue 작업을 구성해야 합니다. AmazonElasticMapReduceforEC2Role 관리형 정책을 시작점으로 사용합니다. 자세한 내용은 Amazon EMR 관리 안내서에서 클러스터 EC2 인스턴스의 서비스 역할(EC2 인스턴스 프로파일)을 참조하세요.

AWS Glue 데이터 카탈로그 암호화 및 암호 해독 권한

인스턴스 프로파일에 키를 사용하여 데이터를 암호화하고 복호화할 수 있는 권한이 필요합니다. 다음 두 설명이 모두 적용되는 경우에는 이러한 권한을 구성할 필요가 없습니다.

  • AWS Glue의 관리형 키를 사용하여 AWS Glue 데이터 카탈로그 객체의 암호화를 활성화합니다.

  • AWS Glue 데이터 카탈로그와 동일한 AWS 계정에 있는 클러스터를 사용합니다.

그렇지 않으면 EC2 인스턴스 프로파일에 연결된 권한 정책에 다음 명령을 추가해야 합니다.

[ { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:region:acct-id:key/12345678-1234-1234-1234-123456789012" } ] } ]

AWS Glue 데이터 카탈로그 암호화에 대한 자세한 내용은 AWS Glue 개발자 안내서에서 데이터 카탈로그 암호화를 참조하세요.

리소스 기반 권한

Amazon EMR에서 Hive, Spark 또는 Presto와 함께 AWS Glue를 사용하는 경우 AWS Glue는 데이터 카탈로그 리소스에 대한 액세스를 제어하는 리소스 기반 정책을 지원합니다. 이러한 리소스에는 데이터베이스, 테이블, 연결 및 사용자 정의 기능이 포함됩니다. 자세한 내용은 AWS Glue 개발자 안내서에서 AWS Glue 리소스 정책을 참조하세요.

리소스 기반 정책을 사용하여 Amazon EMR 내에서 AWS Glue에 대한 액세스를 제한하는 경우 권한 정책에서 지정하는 보안 주체는 클러스터를 생성할 때 지정하는 EC2 인스턴스 프로파일 및 연결된 역할 ARN이어야 합니다. 예를 들어, 카탈로그에 연결된 리소스 기반 정책의 경우 다음 예에 표시된 형식을 사용하여 클러스터 EC2 인스턴스에 대한 기본 서비스 역할의 ARN(EMR_EC2_DefaultRole)을 Principal로 지정할 수 있습니다.

arn:aws:iam::acct-id:role/EMR_EC2_DefaultRole

acct-id는 AWS Glue 계정 ID와 다를 수 있습니다. 그러면 다른 계정의 EMR 클러스터에서 액세스할 수 있습니다. 각각 다른 계정에서 여러 보안 주체를 지정할 수 있습니다.

AWS Glue 데이터 카탈로그 사용 시 고려 사항

AWS Glue 데이터 카탈로그를 Hive의 메타스토어로 사용할 경우 다음 사항을 고려합니다.

  • Hive 셸을 사용한 보조 JAR 추가는 지원되지 않습니다. 차선책으로, hive-site 구성 분류를 사용하여 hive.aux.jars.path 속성을 설정하면 Hive 클래스 경로에 보조 JAR이 추가됩니다.

  • Hive 트랜잭션은 지원되지 않습니다.

  • AWS Glue 내에서 테이블 이름 바꾸기는 지원되지 않습니다.

  • LOCATION을 지정하지 않고 Hive 테이블을 생성하면 테이블 데이터가 hive.metastore.warehouse.dir 속성을 통해 지정된 위치에 저장됩니다. 기본적으로 HDFS에 있는 위치입니다. 다른 클러스터가 테이블에 액세스해야 하는 경우, 테이블을 생성한 클러스터에 대한 적절한 권한이 없으면 실패합니다. 또한 HDFS 스토리지는 일시적이기 때문에, 클러스터가 종료되는 경우 테이블 데이터가 손실되고 테이블을 다시 생성해야 합니다. AWS Glue를 사용하여 Hive 테이블을 생성할 때 Amazon S3에서 LOCATION을 지정하는 것이 좋습니다. 또는 hive-site 구성 분류를 사용하여 모든 Hive 테이블에 적용되는 Amazon S3에서 hive.metastore.warehouse.dir에 대한 위치를 지정할 수도 있습니다. 테이블이 HDFS 위치에 생성되고 테이블을 생성한 클러스터가 아직 실행 중인 경우 테이블 위치를 AWS Glue 내 위치에서 Amazon S3로 업데이트할 수 있습니다. 자세한 내용은 AWS Glue 개발자 안내서에서 AWS Glue 콘솔에서 테이블 관련 작업을 참조하세요.

  • 따옴표와 아포스트로피가 포함된 파티션 값은 지원되지 않습니다(예: PARTITION (owner="Doe's").).

  • 열 통계는 emr-5.31.0 이상에서 지원됩니다.

  • Hive 권한 부여 사용은 지원되지 않습니다. 대안으로 AWS Glue 리소스 기반 정책 사용을 고려합니다. 자세한 내용은 Amazon EMR에서 AWS Glue 데이터 카탈로그에 액세스하기 위해 리소스 기반 정책 사용을 참조하세요.

  • Hive 제약은 지원되지 않습니다.

  • Hive의 비용 기반 최적화는 지원되지 않습니다.

  • 설정 hive.metastore.partition.inherit.table.properties는 지원되지 않습니다.

  • 다음 메타스토어 상수 사용은 지원되지 않습니다. BUCKET_COUNT, BUCKET_FIELD_NAME, DDL_TIME, FIELD_TO_DIMENSION, FILE_INPUT_FORMAT, FILE_OUTPUT_FORMAT, HIVE_FILTER_FIELD_LAST_ACCESS, HIVE_FILTER_FIELD_OWNER, HIVE_FILTER_FIELD_PARAMS, IS_ARCHIVED, META_TABLE_COLUMNS, META_TABLE_COLUMN_TYPES, META_TABLE_DB, META_TABLE_LOCATION, META_TABLE_NAME, META_TABLE_PARTITION_COLUMNS, META_TABLE_SERDE, META_TABLE_STORAGE, ORIGINAL_LOCATION.

  • 조건자 표현식을 사용하는 경우에는 명시적 값이 비교 연산자 오른쪽에 와야 하며 그렇지 않으면 쿼리가 실패할 수 있습니다.

    • 올바름: SELECT * FROM mytable WHERE time > 11

    • 잘못됨: SELECT * FROM mytable WHERE 11 > time

  • Amazon EMR 버전 5.32.0 및 6.3.0 이상에서는 조건자 표현식에서 사용자 정의 함수(UDF) 사용을 지원합니다. 이전 버전을 사용하는 경우 Hive가 쿼리 실행을 최적화하려는 방식 때문에 쿼리가 실패할 수 있습니다.

  • 임시 테이블은 지원되지 않습니다.

  • AWS Glue를 사용하여 테이블을 직접 생성하는 대신 Amazon EMR을 통해 애플리케이션을 사용하여 생성하는 것이 좋습니다. AWS Glue를 통해 테이블을 생성하면 필수 필드가 누락되고 쿼리 예외가 발생할 수 있습니다.

  • EMR 5.20.0 이상에서는 AWS Glue 데이터 카탈로그를 메타스토어로 사용할 경우 Spark 및 Hive에 대해 병렬 파티션 잘라내기가 자동으로 활성화됩니다. 이 변경 사항은 여러 요청을 병렬로 실행하여 파티션을 검색함으로써 쿼리 계획 시간을 크게 단축합니다. 동시에 실행할 수 있는 총 세그먼트 수는 1~10입니다. 기본값은 5이며, 또한 권장 설정입니다. hive-site 구성 분류에서 aws.glue.partition.num.segments 속성을 지정하여 이 설정을 변경할 수 있습니다. 조절이 발생할 경우 값을 1로 변경하여 기능을 끌 수 있습니다. 자세한 내용은 AWS Glue 그먼트 구조를 참조하세요.