Cloud Hadoop Hive로 Iceberg 테이블 관리

Prev Next

VPC 환경에서 이용 가능합니다.

네이버 클라우드플랫폼 Cloud Hadoop의 Hive로 Iceberg 테이블을 관리하는 방법을 소개합니다.

Apache Iceberg 개요

Apache Iceberg 란?

Iceberg는 방대한 데이터를 분석하기 위한 고성능 테이블 포맷 입니다.
SQL 테이블의 안정성과 단순성을 빅데이터를 사용함에 있어서 제공함과 동시에 Spark, Flink, Hive, Trino 등, 널리 사용되는 데이터 처리 프레임워크와 간편하게 통합할 수 있는 기능을 제공합니다.

Apache Iceberg의 특징

  • Expressive SQL : 데이터를 읽고 쓰고 업데이트 하는데에 널리 쓰이는 SQL 명령어를 지원합니다. SQL명령어에 익숙한 사람이라면 누구나 새로운 언어를 배울 필요 없이 Apache Iceberg를 사용하여 데이터 레이크를 구축하고 대부분의 데이터 레이크 작업을 수행할 수 있습니다.
  • Data Consistency : 데이터를 읽고 쓰는 모든 사용자가 동일한 데이터를 보도록 데이터 일관성을 보장합니다.
  • Full Schema Evolution : 스키마를 변경해도 테이블을 다시 쓸 필요가 없습니다. 사용자가 기반 데이터를 건드리지 않고 데이터 테이블에서 열을 추가하거나 열 이름을 변경하거나 열을 제거할 수 있게 합니다.
  • Hidden Partitioning : Iceberg는 열 값을 가져와 선택적으로 변환하여 파티션 값을 생성합니다. 사용자가 직접 유지 관리하는 물리적 파티션이 필요하지 않으므로 파티셔닝을 숨길 수 있습니다.
  • Time Travel and Rollback : 사용자가 시간 경과에 따른 데이터의 변경 내용을 추적할 수 있는 데이터 버전 관리를 지원합니다. 따라서 사용자가 이전 버전의 데이터에 액세스하여 쿼리하고, 업데이트 작업과 삭제 작업 간에 변경된 데이터를 분석하는 시간 이동 기능이 지원됩니다.
  • Data Compaction : 데이터 압축이 기본적으로 지원되여, 파일 레이아웃과 크기를 최적화하기 위해 다양한 기능으로 데이터를 최적화할 수 있습니다

Data Catalog 에서의 Iceberg 사용

  • Data Catalog 콘솔에서는 Iceberg 테이블 생성 및 조회가 가능하며 아래 가이드에 따라서 데이터 관리를 할 수 있습니다.
  • 이후, Data compaction, snapshot 관리, 테이블 최적화 등 다양한 기능을 제공할 예정입니다. (2025년 하반기 예정)

Cloud Hadoop 설정

Cloud Hadoop 클러스터의 Hive Metastore 저장소를 Data Catalog로 설정해 주십시오.

Cloud Hadoop Ecosystem의 Hue 접속

  1. 클러스터 계정을 클릭한 후, 클러스터 상세 정보 화면에서 도메인 주소를 확인해 주십시오.
  2. 웹 브라우저 주소 입력란에 다음과 같이 도메인 주소와 포트 번호를 입력한 후, Hue 웹 페이지에 접속해 주십시오.
https://{도메인 주소}:8081
참고

Hue(Hadoop User Experience)는 Apache Hadoop 클러스터와 함께 사용되는 웹 기반 사용자 인터페이스입니다. Hue는 다른 Hadoop 에코시스템과 함께 그룹화되어 Hive 작업 및 Spark Job 등을 실행할 수 있습니다.

Data Catalog에서 생성한 Database, Table 확인

Data Catalog 콘솔에서 생성한 Database와 Iceberg type의 Table을 Hue에서 확인할 수 있습니다.
Data Catalog 콘솔에서 Iceberg Table생성은 Table 가이드를 참조해 주십시오.

주의

Hive에서 직접 Iceberg type의 Table을 생성 시 external.table.purge=FALSE 옵션 설정이 필요합니다.

# 테이블 생성 쿼리 예시
CREATE EXTERNAL TABLE `dct_iceberg_table`(
  `id` bigint,
  `name` string,
  `category` string)
ROW FORMAT SERDE
  'org.apache.iceberg.mr.hive.HiveIcebergSerDe'
STORED BY
  'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler'
LOCATION
  's3a://{table location}'
TBLPROPERTIES (
  'external.table.purge'='FALSE',
  'table_type'='ICEBERG');

Hive 쿼리 실행을 위한 설정

  1. add jar를 이용하여 iceberg 라이브러리를 사용해 주십시오.
add jar /usr/nch/3.1.0.0-78/hive/lib/iceberg-hive-runtime-1.2.1.jar;
  1. add jar를 이용하여 libfb 라이브러리를 사용해 주십시오.
add jar /usr/nch/3.1.0.0-78/hive/lib/libfb303-0.9.3.jar;
  1. 옵션값을 설정하여 주십시오.
SET hive.vectorized.execution.enabled=false;
SET iceberg.engine.hive.lock-enabled=false;
SET hive.execution.engine=mr;
주의

옵션값을 설정하지 않으면 Insert 쿼리 실행에는 문제 없지만, 테이블 조회시 Insert 쿼리 결과가 반영되지 않을 수 있습니다.

  • hive.vectorized.execution.enabled: Iceberg는 Hive의 벡터화 기능과 충돌할 수 있으므로 비활성화(false)해야 합니다.
  • iceberg.engine.hive.lock-enabled: Iceberg가 Hive 테이블의 lock 기능을 사용하지 않도록 비활성화 합니다. 활성화되면 쓰기 작업이 제한될 수 있습니다.
  • hive.execution.engine: Iceberg가 Hive의 Tez engine과 완벽하게 호환되지 않을 수 있기 때문에 mr(MapReduce)로 설정합니다.

Hive 쿼리 실행

  1. insert를 통해 데이터를 삽입해 주십시오.
Insert into dct_iceberg_table values (1, 'John Doe', 'student');
  1. select 로 데이터를 확인해 주십시오.
select * from dct_iceberg_table;

쿼리 실행에 따른 Iceberg 파일 변화

  1. 데이터 파일
  • Iceberg는 테이블의 데이터를 저장할 때 Parquet, Avro, ORC 등의 컬럼형 저장 포맷을 사용합니다. (기본값은 Parquet 입니다)
  • Iceberg를 설정할 때 지정한 파일 포맷에 따라 새 데이터 파일이 생성됩니다.
  • s3a://{bucket name}/{table location}/data/ 하위 디렉토리에 저장됩니다.
  • Iceberg는 고유한 UUID 기반 파일명을 사용해 충돌을 방지합니다.
  1. 매니페스트 파일 (Manifest File)
  • 각 데이터 파일에 대한 메타데이터를 저장하는 파일입니다.
  • 데이터 파일 경로, 파일의 최소/최대 값(stats), 파티션 정보 등이 포함됩니다.
  • s3a://{bucket name}/{table location}/metadata/ 하위에 저장됩니다.
  • 파일명은 일반적으로 {UUID}.avro 형식입니다.
  1. 매니페스트 리스트 파일 (Manifest List File)
  • 매니페스트 파일 목록을 관리하며, 새로운 INSERT 작업이 수행될 때 Iceberg는 이전 Manifest List를 기반으로 변경 사항을 반영합니다.
  • s3a://{bucket name}/{table location}/metadata/ 하위에 저장됩니다.
  • 파일명은 일반적으로 snap-{snapshot-id}-{UUID}.avro 형식입니다.
  1. 메타데이터 JSON 파일 (Metadata JSON File)
  • Iceberg는 각 작업(INSERT, DELETE, UPDATE) 후 테이블의 새로운 스냅샷을 생성합니다.
  • 이 파일은 테이블의 전체 상태를 나타내며, 롤백 및 Time Travel 기능을 지원합니다.
  • s3a://{bucket name}/{table location}/metadata/ 하위에 저장됩니다.
  • 파일명은 일반적으로 *.metadata.json 형식입니다.
  1. Iceberg 테이블의 구조 변화
s3a://{bucket name}/{table-location}/
  ├── data/
  │   ├── {UUID}.parquet
  │   └── {UUID}.parquet
  └── metadata/
      ├── snap-{snapshot-id}-{UUID}.avro
      ├── {UUID}.avro
      ├── {UUID}.avro
      └── *.metadata.json

버전에 따른 지원기능 참고

  1. Hue에서의 hive 버전을 확인해 주십시오.
select version();
  • Hive 버전에 따라 Delete, Update 등이 지원되지 않을 수 있습니다.
주의

Hive 버전에 따라 Delete, Update 등이 지원되지 않을 수 있습니다.
Hive 버전에 따른 Iceberg의 SQL 지원은 Iceberg 문서를 참고해 주십시오.