Provisioning, HMS (1/3) / Standalone

Jeonghak Cho·2025년 3월 31일

Provisioning

목록 보기
17/44

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

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

🏳️‍🌈 [궁금한점]

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

🔗[목차]

STANDALONE 설치

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

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

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

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

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

hs2 서버 실행

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

docker run -d -p 10000:10000 -p 10002:10002 --env SERVICE_NAME=hiveserver2 -v ~/hive/db-derby-10.14.2.0-bin/lib:/opt/hive/derby/lib/ --name hs2 apache/hive:4.0.1

Derby 연결

  • 컨테이너 접속 후 라이브러리 설치 확인
ubuntu@DESKTOP-SCOK45O:~/hive/db-derby-10.14.2.0-bin/lib$ d exec -it hs2 bash

hive@a1acad370e0b:/opt/hive$ ls derby/lib/
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
  • Derby가 Hive Metastore로 사용되고 있는 지 확인
hive@a1acad370e0b:/opt/hive$ ls -l /opt/hive/metastore_db
total 36
-rw-r--r-- 1 hive hive   608 Mar 31 05:07 README_DO_NOT_TOUCH_FILES.txt
-rw-r--r-- 1 hive hive    38 Mar 31 05:07 db.lck
-rw-r--r-- 1 hive hive     4 Mar 31 05:07 dbex.lck
drwxr-xr-x 2 hive hive  4096 Mar 31 05:07 log
drwxr-xr-x 2 hive hive 12288 Mar 31 05:07 seg0
-rw-r--r-- 1 hive hive   898 Mar 31 05:07 service.properties
drwxr-xr-x 2 hive hive  4096 Mar 31 05:07 tmp
  • 연결 시도
    기본적으로 Derby는 단일 인스턴스만 접근 가능하도록 LOCK 처리가 되어 있다.
hive@a1acad370e0b:/opt/hive$ java -jar /opt/hive/derby/lib/derbyrun.jar ij
ij version 10.14
ij> CONNECT 'jdbc:derby:/opt/hive/metastore_db';
ERROR XJ040: Failed to start database '/opt/hive/metastore_db' with class loader sun.misc.Launcher$AppClassLoader@33909752, see the next exception for details.
ERROR XSDB6: Another instance of Derby may have already booted the database /opt/hive/metastore_db.
  • LOCK 파일 삭제
    lock 파일을 삭제 하여 DB내용을 보고자한다
hive@a1acad370e0b:/opt/hive$ rm -f /opt/hive/metastore_db/db.lck
hive@a1acad370e0b:/opt/hive$ rm -f /opt/hive/metastore_db/dbex.lck
  • 연결
hive@a1acad370e0b:/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;

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

메타 데이터 확인

메타저장소 데이터에서 신규 데이터베이스 mydb 레코드 확인

derby에서 beeline 으로 만든 새로운 데이터베이스 mydb가 테이블에 삽입되었음을 확인한다. 데이터는 바로 확인이 안된다. 콘솔에 다시 접속해서 확인한다. 기본 데이터베이스인 default외 mydb가 생성되어 있음을 확인한다.

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

데이터 확인

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

0개의 댓글