기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Iceberg 클러스터를 Hive와 함께 사용
Amazon EMR 릴리스 6.9.0 이상에서 오픈 소스 Iceberg Hive 통합에 필요한 설정 단계를 수행하지 않고도 Hive 클러스터에서 Iceberg를 사용할 수 있습니다. Amazon EMR 버전 6.8.0 이하 버전의 경우 부트스트랩 작업을 사용하여 Iceberg 지원을 위해 Hive를 구성하도록 iceberg-hive-runtime
jar을 설치할 수 있습니다.
Amazon EMR 6.9.0에는Hive 3.1.3 integration with Iceberg 0.14.1
Iceberg 클러스터 생성
AWS Management Console, AWS CLI 또는 Amazon EMR API를 사용하여 Iceberg가 설치된 클러스터를 생성할 수 있습니다. 이 자습서에서는 AWS CLI 를 사용하여 Amazon EMR 클러스터에서 Iceberg로 작업합니다. 콘솔을 사용하여 Iceberg가 설치된 클러스터를 생성하려면 Amazon Athena, Amazon EMR 및 AWS Glue를 사용하여 Iceberg 데이터 레이크 구축
와 함께 Amazon EMR에서 Iceberg를 사용하려면 AWS CLI먼저 아래 단계를 사용하여 클러스터를 생성합니다. AWS CLI 또는 Java SDK를 사용하여 Iceberg 분류를 지정하는 방법에 대한 자세한 내용은 클러스터를 생성할 AWS CLI 때를 사용하여 구성 제공 또는 섹션을 참조하세요클러스터를 생성할 때 Java SDK를 사용하여 구성 제공. 다음 콘텐츠가 포함된 configurations.json
이라는 파일을 생성합니다.
[{ "Classification":"iceberg-defaults", "Properties":{"iceberg.enabled":"true"} }]
그리고 다음과 같은 구성으로 클러스터를 생성하고, 예제 Amazon S3 버킷 경로와 서브넷 ID를 사용자 정보로 대체합니다.
aws emr create-cluster --release-label emr-6.9.0 \ --applications Name=Hive \ --configurations file://iceberg_configurations.json \ --region us-east-1 \ --name My_hive_Iceberg_Cluster \ --log-uri s3://
amzn-s3-demo-bucket
/ \ --instance-type m5.xlarge \ --instance-count 2 \ --service-role EMR_DefaultRole \ --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,SubnetId=subnet-1234567890abcdef
Hive Iceberg 클러스터는 다음과 같은 작업을 수행합니다.
-
Iceberg Hive 런타임 jar을 Hive에 로드하고 Hive 엔진의 Iceberg 관련 구성을 활성화합니다.
-
Amazon EMR Hive의 동적 실행 엔진 선택을 활성화하여 사용자가 Iceberg 호환성을 위해 지원되는 실행 엔진을 설정하지 못하도록 합니다.
참고
Hive Iceberg 클러스터는 현재 AWS Glue 데이터 카탈로그를 지원하지 않습니다. 기본 Iceberg 카탈로그는 HiveCatalog
이며, 이는 Hive 환경에 맞게 구성된 메타스토어에 해당합니다. 카탈로그 관리에 대한 자세한 내용은 Apache Hive 설명서
기능 지원
Amazon EMR 6.9.0은 Hive 3.1.3 및 Iceberg 0.14.1을 지원합니다. 이 기능은 Hive 3.1.2 및 3.1.3의 Iceberg 호환 기능으로 제한됩니다. 다음 명령이 지원됩니다.
-
Amazon EMR 릴리스 6.9.0에서 6.12.x까지 Hive
auxlib
디렉터리에libfb303
jar을 포함해야 합니다. 다음 명령을 사용하여 포함합니다.sudo /usr/bin/ln -sf /usr/lib/hive/lib/libfb303-*.jar /usr/lib/hive/auxlib/libfb303.jar
Amazon EMR 릴리스 6.13 이상에서
libfb303
jar은 Hiveauxlib
디렉터리에 기호 링크로 자동 설정됩니다. -
테이블 생성
-
파티셔닝되지 않은 테이블 - 다음과 같이 스토리지 핸들러를 제공하여 Hive의 외부 테이블을 생성할 수 있습니다.
CREATE EXTERNAL TABLE x (i int) STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler'
-
파티셔닝된 테이블 - 다음과 같이 Hive에서 파티셔닝된 외부 테이블을 생성할 수 있습니다.
CREATE EXTERNAL TABLE x (i int) PARTITIONED BY (j int) STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler'
참고
ORC, AVRO, PARQUET의
STORED AS
파일 형식은 Hive 3에서 지원되지 않습니다. 기본 옵션이자 유일한 옵션은 Parquet입니다. -
-
테이블 삭제 -
DROP TABLE
명령은 다음 예제와 같이 테이블을 삭제하는 데 사용됩니다.DROP TABLE [IF EXISTS] table_name [PURGE];
-
테이블 읽기 - 다음 예제와 같이
SELECT
문을 사용하여 Hive에서 Iceberg 테이블을 읽을 수 있습니다. 지원되는 실행 엔진은 MR 및 Tez입니다.SELECT * FROM table_name
Hive의 select 구문에 대한 자세한 내용은 LanguageManual Select
를 참조하세요. Hive의 Iceberg 테이블에서 select 문에 대한 자세한 내용은 Apache Iceberg Select 를 참조하세요. -
테이블에 삽입 - HiveQL의
INSERT INTO
문은 Map Reduce 실행 엔진만 지원하는 Iceberg 테이블에서 작동합니다. Amazon EMR Hive는 런타임 시 Iceberg 테이블의 엔진을 선택하기 때문에 Amazon EMR 사용자는 실행 엔진을 명시적으로 설정할 필요가 없습니다.-
단일 테이블 삽입 - 예제:
INSERT INTO table_name VALUES ('a', 1); INSERT INTO table_name SELECT...;
-
다중 테이블 삽입 - 명령문에 비원자성 다중 테이블 삽입이 지원됩니다. 예제:
FROM source INSERT INTO table_1 SELECT a, b INSERT INTO table_2 SELECT c,d;
-
Amazon EMR 7.3.0부터 Iceberg를 사용하는 Hive는 AWS Glue 데이터 카탈로그를 메타스토어로 지원합니다. Glue 데이터 카탈로그를 AWS 메타스토어로 사용하려면 다음 속성을 설정합니다.
SET iceberg.catalog.<catalog_name>.catalog-impl=org.apache.iceberg.aws.glue.GlueCatalog;
또는 다음 속성을 설정할 수도 있습니다.
SET iceberg.catalog.<catalog_name>.type=glue;
그리고 다음 예제를 사용하여 테이블을 생성할 수 있습니다.
CREATE EXTERNAL TABLE table_name (col1 type1, col2 type2,..) ROW FORMAT SERDE 'org.apache.iceberg.mr.hive.HiveIcebergSerDe' STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler' location '<location>' TBLPROPERTIES ('table_type'='iceberg', 'iceberg.catalog'='<catalog_name>');
Hive에서 Iceberg 사용 시 고려 사항
-
Iceberg는 다음과 같은 쿼리 유형을 지원합니다.
-
테이블 생성
-
테이블 삭제
-
테이블에 삽입
-
테이블 읽기
-
-
MR(MapReduce) 실행 엔진만 데이터 조작 언어(DML) 작업에서 지원되며 MR은 Hive 3.1.3에서 더 이상 사용되지 않습니다.
-
AWS Glue Data Catalog는 현재 Hive를 사용하는 Iceberg에서 지원되지 않습니다.
-
오류 처리 성능이 부족합니다. 구성이 잘못되었어도 쿼리에 삽입 작업은 성공적으로 완료될 수 있습니다. 그러나 메타데이터를 업데이트하지 않으면 데이터가 손실될 수 있습니다.
Iceberg Glue 통합은 Redshift Managed Storage 카탈로그에서 작동하지 않습니다.