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 질의가 원활히 되는 점입니다.

 

감사합니다.

반응형

+ Recent posts