centos7 기준입니다.

 

지난 포스팅에서 Hive 3.1.3 버전에서 Iceberg 테이블을 사용해보았는데요.

Update, Delete 등의 트랜잭션 기능이 원활이 되지않았습니다.

Hive 버전은 3.1.3으로 유지하되 Trino를 통해 Hive에 Iceberg 테이블을 생성 시,

문제없이 트랜잭션 기능이 동작하는 것을 확인하여,

이번 포스팅에서는 기 구축된 Hive 3.1.3 + Iceberg를 Trino를 통해 사용해보겠습니다. 

 

환경:

Hadoop 3.3.6

Hive 3.1.3

Trino 435

* 기존 Hive 3.1.3과 Trino가 카탈로그로 연동되어있음을 가정합니다.

 

1. Trino에서 사용할 DB 미리 생성

# Hive 콘솔 진입
hive

# DB 미리 생성
create database trinoiceberg;

 

2. Trino Iceberg Catalog 생성

# 코디네이터, 워커가 설치된 모든 서버에서 진행
# 카탈로그 파일 생성
vi ${TRINO_HOME}/etc/catalog/iceberg.properties

# 기존에 Hive와 연결된 Trino 카탈로그 명입니다.
# connet.name이 hive인 properties파일을 찾습니다. 해당 경우 hive.properties였습니다.
iceberg.hive-catalog-name=hive
iceberg.file-format=ORC
connector.name=iceberg
# Hive Metastore를 통해 접속
hive.metastore.uri=thrift://node3:9083
hive.config.resources=${HADOOP_HOME}/etc/hadoop/core-site.xml,${HADOOP_HOME}/etc/hadoop/hdfs-site.xml
iceberg.catalog.type=hive_metastore
iceberg.compression-codec=GZIP

# Trino 재실행
${TRINO_HOME}/bin/launcher restart

 

3. 쿼리 테스트

* DBeaver 혹은 Trino CLI를 통해 테스트 가능합니다.

# 테이블 생성
create table iceberg.trinoiceberg.tb1 (
col1 varchar,
col2 integer)
WITH (
    format = 'ORC',
    format_version = 2,
    # hive-site.xml의 hive.metastore.warehouse.dir을 참조해주세요.
    location = 'hdfs://${HIVE_WAREHOUSE_DIR}/trinoiceberg.db/tb1'
    );
    
# INSERT
insert into iceberg.trinoiceberg.tb1 values ('a',1), ('b',2), ('c',3);

# SELECT
select * from iceberg.trinoiceberg.tb1;

# SELECT COUNT(*)
select count(*) from iceberg.trinoiceberg.tb1;

# UPDATE
update iceberg.trinoiceberg.tb1 set col2 = 5 where col1 = 'a';

# UPDATE 확인
select * from iceberg.trinoiceberg.tb1;

# DELETE
delete from iceberg.trinoiceberg.tb1;

 

Hive 3.1.3 버전에서 만든 Iceberg 테이블은 기본적으로 Update, Delete 등의 트랜잭션 질의가 원활치 못했는데,

만약 버전을 유지해야한다면 이렇게 Trino를 통해 Hive에 저장되는 Iceberg 테이블을 조작할 수 있습니다.

 

감사합니다.

반응형

+ Recent posts