-
[Hive] Remote Metastore Database 구성하기Hive 2024. 11. 18. 11:15반응형
- 목차
들어가며.
이번 글에서는 Hive Metastore 에서 Local Database 인 Derby 가 아닌 Remote Database 와 연결하는 전반적인 과정을 설명합니다.
AdminManual Metastore Administration - Apache Hive - Apache Software Foundation
All the metadata for Hive tables and partitions are accessed through the Hive Metastore. Metadata is persisted using JPOX ORM solution (Data Nucleus) so any database that is supported by it can be used by Hive. Most of the commercial relational databases a
cwiki.apache.org
Remote Database 는 MySQL 를 사용하며, Docker 기반으로 실습 환경 구축을 설명합니다.
MySQL ConnectorJ 를 포함하는 Hive Docker Image 구성.
먼저 Hive 는 기본적으로 MySQL Connector 드라이버를 포함하고 있지 않습니다.
따라서 Hive 가 MySQL 과 JDBC 통신을 하기 위하여 드라이버가 필요하며, 이를 포함하는 Docker 이미지를 빌드합니다.
베이스 이미지로써 apache/hive:4.0.1 을 사용하였습니다.
그리고 MySQL Connector Driver 를 다운로드하여 Hive 가 사용하는 Classpath 하위에 등록합니다.
mkdir -p ./dockers cat <<EOF> ./dockers/hive-docker FROM apache/hive:4.0.1 USER root RUN apt-get update && apt-get install -y wget RUN wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.30/mysql-connector-java-8.0.30.jar \ -O /opt/hive/lib/mysql-connector-java-8.0.30.jar USER hive EOF docker build -t hive-mysql:4.0.1 -f ./dockers/hive-docker .hive-site.xml 구성.
우선 Hive 와 Remote Database 를 연결하기 위해서는 아래의 설정들이 추가된 hive-site.xml 파일이 필요합니다.
javax.jdo.option.ConnectionURL
기본적으로 Hive 와 외부 데이터베이스들은 JDBC 기반으로 통신을 하게 됩니다.
그리하여 MySQL Connector Driver 의 설치과정이 수반되었던 것이며,
javax.jdo.option.ConnectionURL 은 "jdbc:mysql://mysql:3306/metastore" 와 같은 형식의 주소 URL 을 입력합니다.
javax.jdo.option.ConnectionDriverName
ConnectionDriverName 은 미리 설치하였던 MySQL Connector Driver 를 Fully Qualified Name 을 사용합니다.
"com.mysql.jdbc.Driver"
javax.jdo.option.ConnectionUserName / javax.jdo.option.ConnectionPassword
Hive Client 를 위해서 생성한 UserName & Password 를 입력하여 사용합니다.
결과적으로 아래와 같은 형식으로 hive-site.xml 파일을 준비해주시면 Hive Metastore 와 Remote Database 사이의 연결 준비가 끝이 납니다.
<configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://mysql:3306/metastore?createDatabaseIfNotExist=true</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.cj.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>hive123</value> </property> <property> <name>hive.metastore.uris</name> <value>thrift://hive:9083</value> </property> <property> <name>hive.metastore.authorization.storage.checks</name> <value>true</value> </property> </configuration>Hive 와 MySQL 실행.
아래의 내용들은 Hive 와 MySQL 을 Docker Container 로 실행하기 위한 방법과 순서를 설명합니다.
MySQL ConnectorJ 를 추가한 Hive Docker Image.
mkdir -p ./dockers cat <<EOF> ./dockers/hive-docker FROM apache/hive:4.0.1 USER root RUN apt-get update && apt-get install -y wget RUN wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.30/mysql-connector-java-8.0.30.jar \ -O /opt/hive/lib/mysql-connector-java-8.0.30.jar USER hive EOF docker build -t hive-mysql:4.0.1 -f ./dockers/hive-docker .Config Files.
cat <<EOF> ./dockers/user.sql CREATE DATABASE metastore; CREATE USER 'hive'@'%' IDENTIFIED BY 'hive123'; GRANT ALL PRIVILEGES ON metastore.* TO 'hive'@'%'; FLUSH PRIVILEGES; EOF cat <<EOF> ./dockers/hive-site.xml <configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://mysql:3306/metastore?createDatabaseIfNotExist=true</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.cj.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>hive123</value> </property> <property> <name>hive.metastore.uris</name> <value>thrift://hive:9083</value> </property> <property> <name>hive.metastore.authorization.storage.checks</name> <value>true</value> </property> </configuration> EOFdocker-compose.yaml
cat <<EOF> $(pwd)/dockers/docker-compose.yaml version: '3.9' services: mysql: image: mysql:8.0.30 platform: linux/amd64 container_name: mysql hostname: mysql volumes: - $(pwd)/dockers/user.sql:/docker-entrypoint-initdb.d/user.sql environment: MYSQL_ROOT_PASSWORD: 1234 ports: - "3306:3306" networks: - hive hive-metastore: image: hive-mysql:4.0.1 container_name: hive-metastore hostname: hive-metastore entrypoint: ["/bin/bash", "-c"] command: > "schematool -dbType mysql -initSchema; hive --service metastore" volumes: - $(pwd)/dockers/hive-site.xml:/opt/hive/conf/hive-site.xml environment: HIVE_METASTORE_USER: hive HIVE_METASTORE_PASSWORD: hive123 HIVE_METASTORE_DB_TYPE: mysql HIVE_METASTORE_HOST: mysql SERVICE_NAME: metastore DB_ROOT_PASSWORD: 1234 depends_on: - mysql ports: - "9083:9083" networks: - hive networks: hive: driver: bridge EOF docker-compose -f ./dockers/docker-compose.yaml -p hive up -d위 docker-compose 가 실행되면 아래의 이미지와 같은 2개의 Container 를 확인할 수 있습니다.

Hive 와 MySQL 의 연결 시도의 성공 결과로써 아래와 같은 Database 와 Table 이 생성됨을 확인할 수 있습니다.
show databases; +------------------+ |Database | +------------------+ |information_schema| |metastore | |mysql | |performance_schema| |sys | +------------------+show tables; +-----------------------------+ |Tables_in_metastore | +-----------------------------+ |AUX_TABLE | |BUCKETING_COLS | |CDS | |COLUMNS_V2 | |COMPACTION_METRICS_CACHE | |COMPACTION_QUEUE | |COMPLETED_COMPACTIONS | |COMPLETED_TXN_COMPONENTS | |CTLGS | |DATABASE_PARAMS | |DATACONNECTORS | |DATACONNECTOR_PARAMS | |DBS | |DB_PRIVS | |DC_PRIVS | |DELEGATION_TOKENS | |FUNCS | |FUNC_RU | |GLOBAL_PRIVS | |HIVE_LOCKS | |I_SCHEMA | |KEY_CONSTRAINTS | |MASTER_KEYS | |MATERIALIZATION_REBUILD_LOCKS| |METASTORE_DB_PROPERTIES | |MIN_HISTORY_LEVEL | |MIN_HISTORY_WRITE_ID | |MV_CREATION_METADATA | |MV_TABLES_USED | |NEXT_COMPACTION_QUEUE_ID | |NEXT_LOCK_ID | |NEXT_WRITE_ID | |NOTIFICATION_LOG | |NOTIFICATION_SEQUENCE | |NUCLEUS_TABLES | |PACKAGES | |PARTITIONS | |PARTITION_EVENTS | |PARTITION_KEYS | |PARTITION_KEY_VALS | |PARTITION_PARAMS | |PART_COL_PRIVS | |PART_COL_STATS | |PART_PRIVS | |REPLICATION_METRICS | |REPL_TXN_MAP | |ROLES | |ROLE_MAP | |RUNTIME_STATS | |SCHEDULED_EXECUTIONS | |SCHEDULED_QUERIES | |SCHEMA_VERSION | |SDS | |SD_PARAMS | |SEQUENCE_TABLE | |SERDES | |SERDE_PARAMS | |SKEWED_COL_NAMES | |SKEWED_COL_VALUE_LOC_MAP | |SKEWED_STRING_LIST | |SKEWED_STRING_LIST_VALUES | |SKEWED_VALUES | |SORT_COLS | |STORED_PROCS | |TABLE_PARAMS | |TAB_COL_STATS | |TBLS | |TBL_COL_PRIVS | |TBL_PRIVS | |TXNS | |TXN_COMPONENTS | |TXN_LOCK_TBL | |TXN_TO_WRITE_ID | |TXN_WRITE_NOTIFICATION_LOG | |TYPES | |TYPE_FIELDS | |VERSION | |WM_MAPPING | |WM_POOL | |WM_POOL_TO_TRIGGER | |WM_RESOURCEPLAN | |WM_TRIGGER | |WRITE_SET | +-----------------------------+반응형'Hive' 카테고리의 다른 글
[Hive] hive.metastore.warehouse.dir 알아보기 (0) 2024.11.18 [Hive Metastore] DBS 테이블 알아보기 (0) 2024.10.01 [Hive Metastore] hive.metastore.uris 알아보기 (0) 2024.02.04 Hive & Hadoop 연결하기 (0) 2023.12.17 Hive MySQL Metastore 알아보기 (0) 2023.12.17