Provisioning, HMS / Docker

Jeonghak Cho·2025년 6월 1일

Provisioning

목록 보기
32/44

📗HMS 프로비저닝 - 도커 환경 - STANDALONE

HiveServer2(HS2)는 기본적으로 Apache Derby를 Metastore DB로 사용한다.
하지만 Derby는 기본적으로 싱글 유저 모드(single-user mode) 로 동작하기 때문에 HiveServer2가 실행 중이면 직접 접근이 제한될 수 있다. lock 파일을 해결하여 이 문제를 해결할 수 있다.

🏳️‍🌈 [궁금한점]

  • HMS를 설치하는 방법
  • HMS가 기본으로 사용하는 데이터베이스 종류
  • HiveQL로 저장한 메타정보가 저장되는 위치와 메터데이터가 저장되는 위치

🔗[목차]

HMS 설치

1️⃣ 준비

메타 저장소 라이브러리 (Derby) 다운로드

데이터베이스 라이브러리를 저장할 위치를 ~/hive/db-derby-10.14.2.0-bin/lib 로 잡고, 라이브러리를 다운받아 위치시킨다.

apt update && apt install -y wget
apt update && apt install -y tar

mkdir hive 
cd hive

sudo wget https://downloads.apache.org/db/derby/db-derby-10.14.2.0/db-derby-10.14.2.0-bin.tar.gz

sudo tar -xvzf db-derby-10.14.2.0-bin.tar.gz

2️⃣ 설정

메타 저장소로 사용할 derby 라이브러리 위치를 확인한다.

cd db-derby-10.14.2.0-bin
cd lib

ubuntu@DESKTOP-SCOK45O:~/hive/db-derby-10.14.2.0-bin/lib$ pwd
/home/ubuntu/hive/db-derby-10.14.2.0-bin/lib

ubuntu@DESKTOP-SCOK45O:~/hive/db-derby-10.14.2.0-bin/lib$ ls
derby.jar  derbyLocale_cs.jar     derbyLocale_fr.jar  derbyLocale_ja_JP.jar  derbyLocale_pt_BR.jar  derbyLocale_zh_TW.jar  derbyoptionaltools.jar
derby.log  derbyLocale_de_DE.jar  derbyLocale_hu.jar  derbyLocale_ko_KR.jar  derbyLocale_ru.jar     derbyclient.jar        derbyrun.jar
derby.war  derbyLocale_es.jar     derbyLocale_it.jar  derbyLocale_pl.jar     derbyLocale_zh_CN.jar  derbynet.jar           derbytools.jar
  • hive-site.xml 편집
~/hive/hs2/hive-site.xml에 아래 속성을 추가한다. 로컬  위의 컨테이너 명이 hms 임에 유의한다. 
``` xml
<property>
        <name>hive.metastore.uris</name>
        <value>thrift://hms:9083</value>
</property>

3️⃣ 설치

hs2 설치

단일 도커 이미지에 hiver server 와 hms, 저장소인 derby가 포함되어 설치된다.

docker network create mynetwork

d run -d -p 10000:10000 -p 10002:10002 --env SERVICE_NAME=hiveserver2 \
--env SERVICE_OPTS="-Dhive.metastore.uris=thrift://hms:9083" \
--env IS_RESUME="true" \
-v ~/hive/hs2/hive-site.xml:/opt/hive/conf/hive-site.xml \
--network mynetwork \
--name hs2 apache/hive:4.0.1

hive metastore 설치

docker run -d -p 9083:9083 --env SERVICE_NAME=metastore \
-v ~/hive/db-derby-10.14.2.0-bin/lib:/opt/hive/derby/lib/ \
--network mynetwork \
--name hms apache/hive:4.0.1

4️⃣ 검증 - 설치 확인

HMS Derby 연결

  • 컨테이너 접속 후 라이브러리 설치 확인
d exec -it hms bash

hive@b29bce10867a:/opt/hive$ ls derby/lib/
derby.jar           derbyLocale_de_DE.jar  derbyLocale_hu.jar     derbyLocale_ko_KR.jar  derbyLocale_ru.jar     derbyclient.jar         derbyrun.jar
derby.war           derbyLocale_es.jar     derbyLocale_it.jar     derbyLocale_pl.jar     derbyLocale_zh_CN.jar  derbynet.jar            derbytools.jar
derbyLocale_cs.jar  derbyLocale_fr.jar     derbyLocale_ja_JP.jar  derbyLocale_pt_BR.jar  derbyLocale_zh_TW.jar  derbyoptionaltools.jar
  • Derby가 Hive Metastore로 사용되고 있는 지 확인
hive@b29bce10867a:/opt/hive$ ls -l /opt/hive/metastore_db
total 36
-rw-r--r-- 1 hive hive   608 Jun  1 08:58 README_DO_NOT_TOUCH_FILES.txt
-rw-r--r-- 1 hive hive    38 Jun  1 09:03 db.lck
-rw-r--r-- 1 hive hive     4 Jun  1 09:03 dbex.lck
drwxr-xr-x 2 hive hive  4096 Jun  1 09:03 log
drwxr-xr-x 2 hive hive 12288 Jun  1 08:58 seg0
-rw-r--r-- 1 hive hive   898 Jun  1 08:58 service.properties
drwxr-xr-x 2 hive hive  4096 Jun  1 09:03 tmp
  • LOCK 파일 삭제
    lock 파일을 삭제 하여 DB내용을 보고자한다
hive@b29bce10867a:/opt/hive$ rm -f /opt/hive/metastore_db/db.lck
hive@b29bce10867a:/opt/hive$ rm -f /opt/hive/metastore_db/dbex.lck
  • 연결
hive@b29bce10867a:/opt/hive$ java -jar /opt/hive/derby/lib/derbyrun.jar ij
ij version 10.14
ij> CONNECT 'jdbc:derby:/opt/hive/metastore_db';
  • Hive 테이블 목록 조회
    지금은 아무 테이블도 없다.
SELECT * FROM TBLS;
  • 데이터베이스 목록 조회
SELECT * FROM DBS;
  • 데이터 파일이 저장될 위치 조회
ij> select name, db_location_uri from dbs;
NAME                                                                                                                            |DB_LOCATION_URI                                            
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
default                                                                                                                         |file:/opt/hive/data/warehouse                              

1 row selected
  • 컬럼 정보 조회
SELECT * FROM COLUMNS_V2;

HiveQL 실행

새로운 데이터베이스 mydb 를 HiveQL로 생성

  • 신규창에서 hs2 beeline 실행
docker exec -it hs2 beeline -u jdbc:hive2://localhost:10000
0: jdbc:hive2://localhost:10000> create database mydb;
INFO  : Compiling command(queryId=hive_20250601081454_35b59e66-95de-49a4-a8c7-f21cf402791d): create database mydb
INFO  : Semantic Analysis Completed (retrial = false)
INFO  : Created Hive schema: Schema(fieldSchemas:null, properties:null)
INFO  : Completed compiling command(queryId=hive_20250601081454_35b59e66-95de-49a4-a8c7-f21cf402791d); Time taken: 0.952 seconds
INFO  : Concurrency mode is disabled, not creating a lock manager
INFO  : Executing command(queryId=hive_20250601081454_35b59e66-95de-49a4-a8c7-f21cf402791d): create database mydb
INFO  : Starting task [Stage-0:DDL] in serial mode
INFO  : Completed executing command(queryId=hive_20250601081454_35b59e66-95de-49a4-a8c7-f21cf402791d); Time taken: 0.067 seconds
No rows affected (1.306 seconds)

0: jdbc:hive2://localhost:10000> show databases;
+----------------+
| database_name |
+----------------+
| default |
| mydb |
+----------------+
2 rows selected (0.028 seconds)

### 메타 데이터 확인
> ### 메타저장소 데이터에서 신규 데이터베이스 `mydb` 레코드 확인
derby에서 beeline 으로 만든 새로운 데이터베이스 mydb가 테이블에 삽입되었음을 확인한다. 데이터는 바로 확인이 안된다. 콘솔에 다시 접속해서 확인한다. 기본 데이터베이스인 default외 mydb가 생성되어 있음을 확인한다.
``` bash
hive@a1acad370e0b:/opt/hive$ java -jar /opt/hive/derby/lib/derbyrun.jar ij
ij version 10.14
ij> SELECT * FROM DBS;
IJ ERROR: Unable to establish connection
ij> CONNECT 'jdbc:derby:/opt/hive/metastore_db';
ij> SELECT * FROM DBS;
DB_ID               |DESC                                                                                                                            |DB_LOCATION_URI                                                                                                                 |NAME                                                                                                                            |OWNER_NAME                                                                                                                      |OWNER_TYPE|CTLG_NAME                                                                                                                       |CREATE_TIME|DB_MANAGED_LOCATION_URI                                                                                                         |TYPE                            |DATACONNECTOR_NAME                                                                                                              |REMOTE_DBNAME
---------------------------------------------------------------------------------------------
1                   |Default Hive database                                                                                                           |file:/opt/hive/data/warehouse                                                                                                   |default                                                                                                                         |public                                                                                                                          |ROLE      |hive                                                                                                                            |1743397677 |NULL                                                                                                                            |NATIVE                          |NULL                                                                                                                            |NULL                                                
2                   |NULL                                                                                                                            |file:/opt/hive/data/warehouse/mydb.db                                                                                           |mydb                                                                                                                            |hive                                                                                                                            |USER      |hive                                                                                                                            |1743398117 |NULL                                                                                                                            |NATIVE                          |NULL                                                                                                                            |NULL                                                

2 rows selected

HMS에서 메타 데이터 확인

  • Derby Lock 제거
ubuntu@DESKTOP-SCOK45O:~$ docker exec -it hms bash
hive@5ce2a3f8c1c4:/opt/hive$ rm -f /opt/hive/metastore_db/db.lck
hive@5ce2a3f8c1c4:/opt/hive$ rm -f /opt/hive/metastore_db/dbex.lck
  • 연결
java -jar /opt/hive/derby/lib/derbyrun.jar ij
ij version 10.14
ij> CONNECT 'jdbc:derby:/opt/hive/metastore_db';

ij> select tbl_name from tbls;
TBL_NAME
--------------------------------------------------------------------------------------------------------------------------------
employees

1 row selected

HMS 데이터 확인

  • 데이터 위치 확인
    /opt/hive/conf/hive-site.xml 파일에 데이터가 저장되는 위치가 명기되어 있다. 해당 위치에 가면 생성한 mydb 에 관한 데이터를 볼 수 있다.
    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/opt/hive/data/warehouse</value>
    </property>
  • 데이터 폴더 확인
hive@b29bce10867a:/opt/hive$ ls /opt/hive/data/warehouse
employees

0개의 댓글