centos7 기준입니다.
이전 포스팅엔 Hive 3.1.3에서 Iceberg를 수동으로 임포트하여 사용해보았는데요.
이번 포스팅엔 Hive 4.0.0에 기존 내장되어있는 Iceberg를 사용해보겠습니다.
환경:
Hadoop 3.3.6
Hive 4.0.0 (node4라는 호스트네임을 가진 서버에 설치되었습니다.)
Tez 0.10.3
(* Iceberg 공식홈페이지에 Hive 4버전부터는 쿼리 실행 엔진이 Tez일 때, DML이 동작한다고 언급되어있습니다.)
1. 사전 라이브러리 싱크 맞추기
# libfb303-0.9.3.jar을 적절한 위치에 이동시킵니다. 추후 임포트됩니다.
mv /opt/apps/libfb303-0.9.3.jar
# RoaringBitmap 라이브러리 싱크 맞추기
# Hive 4.0.0은 0.9.22, Tez 0.10.3은 0.7.45를 사용중이어서 Hive에 맞추었습니다.
rm -r ${TEZ_HOME}/lib/RoaringBitmap-0.7.45.jar
cp ${HIVE_HOME}/lib/RoaringBitmap-0.9.22.jar ${TEZ_HOME}/lib/
# tez 재압축
tar cvfz tez-0.10.3-bin.tar.gz ./tez-0.10.3
# tez-site.xml의 tez.lib.uris 값을 참조합니다.
hdfs dfs -put /apps/tez/ tez-0.10.3
hdfs dfs -put /apps/tez/ tez-0.10.3-bin.tar.gz
# 후 Hive를 재기동합니다
2. Beeline 진입 및 환경 세팅
# Hive 4버전부터 기본 커맨드라인 인터페이스가 Beeline으로 변경되었습니다.
hive
# Hive Server를 통해 접속
!connect jdbc:hive2://node4:10000
# 필요 라이브러리 임포트
add jar /opt/apps/libfb303-0.9.3.jar;
# 필요 설정 값 세팅
set hive.vectorized.execution.enabled=false;
set hive.execution.engine=tez;
set iceberg.engine.hive.lock-enabled=false;
set tez.mrreader.config.update.properties=hive.io.file.readcolumn.names,hive.io.file.readcolumn.ids;
3. 쿼리 테스트
# DB 생성
create database icebergtest;
# DB 선택
use icebergtest;
# 테이블 생성
CREATE TABLE tb1 (
col1 STRING,
col2 INT
)
STORED BY ICEBERG
STORED AS ORC
TBLPROPERTIES (
'format-version'='2',
'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;
# UPDATE
update tb1 set col2 = 5 where col1 = 'a';
# UPDATE 확인
select * from tb1;
# DELETE
delete from tb1;
이전 포스팅과 마찬가지로각 쿼리를 진행하면서 hive-site.xml에 hive.metastore.warehouse.dir의 값을 참조하여,
hive 데이터가 저장되는 hdfs 경로를 함께 보는 것이 도움이 됩니다.
또한 Hive 3.1.3버전에서 테스트했던것과 가장 큰 차이점은 역시 트랜잭션 즉,
Update, Delete 질의가 원활히 되는 점입니다.
감사합니다.
반응형
'BigData > Iceberg' 카테고리의 다른 글
Iceberg) Trino + Hive Iceberg 연동 (0) | 2024.06.24 |
---|---|
Iceberg) Hive 3.1.3 Iceberg 연동 (0) | 2024.06.24 |
Iceberg) java.lang.NoSuchMethodError: org.roaringbitmap.ArrayContainer.add(C)Lorg/roaringbitmap/Container 에러 트러블슈팅 (0) | 2024.06.24 |