centos7 기준입니다.
Hive 3.1.3이 설치되어있고, MR 엔진으로 실행되는 환경임을 가정합니다.
(* Iceberg 공식홈페이지에 Hive 2.x.x, 3.1.2, 3.1.3 버전은 MR 엔진에서만 DML이 동작한다고 언급되어있습니다.)
준비 라이브러리:
iceberg-hive-runtime-1.5.1.jar
libfb303-0.9.3.jar
1. 환경 세팅 (Hive 3.1.3이 설치된 서버에서 진행)
# 필요 라이브러리 적정한 위치에 이동
mv /opt/apps/iceberg-hive-runtime-1.5.1.jar
mv /opt/apps/libfb303-0.9.3.jar
# Hive CLI 접속
hive
# 필요 라이브러리 임포트
add jar /opt/apps/iceberg-hive-runtime-1.5.1.jar;
add jar /opt/apps/libfb303-0.9.3.jar;
# 필요 설정값 세팅
set hive.vectorized.execution.enabled=false;
set hive.execution.engine=mr;
set iceberg.engine.hive.lock-enabled=false;
2. 쿼리 테스트
# DB 생성
create database icebergtest;
# DB 선택
use icebergtest;
# Table 생성
CREATE TABLE tb1 (
col1 STRING,
col2 INT
)
STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler'
TBLPROPERTIES (
'format-version'='2',
'write.format.default'='orc',
'write.orc.compression-codec'='zlib'
);
# INSERT
insert into tb1 values ('a',1), ('b',2), ('c',3);
# SELECT
select * from tb1;
# SELECT COUNT(*)
select count(*) from tb1;
각 쿼리를 진행하면서 hive-site.xml에 hive.metastore.warehouse.dir의 값을 참조하여,
hive 데이터가 저장되는 hdfs 경로를 함께 보는 것이 도움이 됩니다.
예를 들어, 위처럼 쿼리를 진행했을 때,
hdfs상 ${HIVE_WAREHOUSE_DIR}/icebergtest.db/tb1 경로를 살펴보면,
iceberg의 기본 틀인 temp, metadata, data 폴더 구조로 이루어진 것을 확인 가능하고,
data 내에는 테이블에 지정한 데이터 파일 포맷대로 확장자가 .orc인 것을 확인 가능합니다.
추가로 Hive 2버전, 3.1.2, 3.1.3 버전에서는 Iceberg 테이블에 대해 Update, Delete 등 트랜잭션 설정 및 쿼리가
동작하지 않는 것으로 확인됩니다.
이에 Hive 4버전(Iceberg 테이블이 기본 내장)을 사용하는 방법과,
https://developer-woong.tistory.com/109
Hive 3.1.3 버전을 유지하되, Trino를 통해 트랜잭션 설정 및 쿼리를 실행하는 방법이 있겠습니다.
https://developer-woong.tistory.com/110
감사합니다.
'BigData > Iceberg' 카테고리의 다른 글
Iceberg) Trino + Hive Iceberg 연동 (0) | 2024.06.24 |
---|---|
Iceberg) Hive 4.0.0 Iceberg 테이블 다루기 (0) | 2024.06.24 |
Iceberg) java.lang.NoSuchMethodError: org.roaringbitmap.ArrayContainer.add(C)Lorg/roaringbitmap/Container 에러 트러블슈팅 (0) | 2024.06.24 |