Hive Metastore 데이터베이스로 TiDB 사용하기
Hive Metastore 데이터베이스로 TiDB 사용하기 (Using TiDB as the Hive Metastore database)
Hive Metastore 데이터베이스로 MySQL 호환·분산 SQL 데이터베이스인 TiDB를 사용하는 방법을 설명해요. 기존 MySQL 메타스토어가 데이터·쿼리 성능 병목이 됐을 때 TiDB로 수평 확장하는 전체 과정(클러스터 배포, Hive 구성, 메타데이터 초기화, 실행)을 다룹니다.
출처: 문서
본문
왜 Hive의 Metastore 데이터베이스로 TiDB를 쓰나요? (Why use TiDB in Hive as the Metastore database?)
TiDB는 PingCAP과 그 오픈소스 커뮤니티가 만든 분산 SQL 데이터베이스입니다. MySQL과 호환되며 수평 확장성, 강한 일관성, 고가용성을 특징으로 합니다. OLTP(Online Transactional Processing)와 OLAP(Online Analytical Processing) 워크로드 모두를 위한 원스톱 솔루션입니다.
데이터양이 엄청난 시나리오에서는 TiDB의 분산 아키텍처 덕분에 쿼리 성능이 단일 머신의 성능에 제한되지 않습니다. 데이터량이 병목에 도달하면 노드를 추가해 TiDB의 저장 용량을 늘릴 수 있습니다.
TiDB는 MySQL 프로토콜과 호환되기 때문에 Hive의 Metastore 데이터베이스를 TiDB로 쉽게 전환할 수 있습니다. 거의 변경 없이 MySQL을 사용하듯 TiDB를 사용할 수 있습니다:
- 기존 Hive 클러스터의 경우
mysqldump도구로 MySQL의 모든 데이터를 TiDB로 복제할 수 있습니다. - Hive에 포함된 메타데이터 초기화 도구로 새 Hive 클러스터를 만들 수 있습니다.
TiDB로 Hive 클러스터를 만드는 방법 (How to create a Hive cluster with TiDB)
TiDB로 Hive 클러스터를 만드는 과정은 다음 단계를 포함합니다:
- 컴포넌트 요구사항 충족
- Hive 클러스터 설치
- TiDB 클러스터 배포
- Hive 구성
- 메타데이터 초기화
- Metastore 실행 및 테스트
필요한 컴포넌트 (Components required)
| Component | Version |
|---|---|
| Hive | 3.1.2 |
| Hadoop | 2.6.0-cdh-5.16.1 |
| TiDB | 4.0 |
| Java Development Kit (JDK) | 1.8.0_221 |
컴포넌트 버전에 대한 의무적 요구사항은 없습니다. 컴포넌트가 서로 호환되는 한 됩니다. Hadoop과 JDK를 성공적으로 설치해 직접 사용할 수 있다고 확인한 뒤 다음 단계로 진행하면 됩니다.
Hive 클러스터 설치 (Install a Hive cluster)
1단계: TiDB 클러스터 배포 (Step 1: Deploy a TiDB cluster)
- TiDB 클러스터를 구성하려면 이 문서를 참고하세요.
- TiDB에 Hive 사용자를 만들고 비밀번호를 설정하세요.
hive라는 이름의 데이터베이스를 만들고hive사용자에게 권한을 부여하세요.
-- Hive Metastore용 데이터베이스 생성.
create database hive;
-- Hive Metastore용 사용자와 비밀번호 생성.
create user 'hive'@'%' identified by '123456';
-- 사용자에게 권한 부여.
grant all privileges on hive.* to 'hive'@'%' identified by '123456';
-- 권한 플러시.
flush privileges;
- 구성 항목을 설정합니다.
set global tidb_skip_isolation_level_check=1;
이 구성 항목을 설정하지 않으면 Metastore가 실행 중 다음 예외를 던집니다:
MetaException(message:The isolation level 'SERIALIZABLE' is not supported. Set tidb_skip_isolation_level_check=1 to skip this error)
2단계: Hive 구성 (Step 2: Configure Hive)
- Hive를 내려받아 압축을 풉니다. 이 예시에서 Hive의 압축 해제 디렉터리는 ${HIVE_HOME}입니다.
hive-site.xml구성 파일을 편집하려면vim ${HIVE_HOME}/conf/hive-site.xml을 실행하세요. (구성 항목은 최소 구성만 사용합니다.)
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://host:port/hive</value>
<description>TiDB address</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
<description>TiDB username</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
<description>TiDB password</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://localhost:9083</value>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
</configuration>
- hive-env.sh 구성 파일을 편집하려면 vim ${HIVE_HOME}/conf/hive-env.sh을 실행하세요.
export HADOOP_HOME=...
export JAVA_HOME=...
- mysql-connector-java-${version}.jar를 Hive의 lib 디렉터리에 복사합니다.
cp ${MYSQL_JDBC_PATH}/mysql-connector-java-${version}.jar ${HIVE_HOME}/lib
3단계: 메타데이터 초기화 (Step 3: Initialize metadata)
Hive 메타데이터용 테이블을 만들기 위해 이 단계를 수행합니다. SQL 스크립트는 ${HIVE_HOME}/scripts/metastore/upgrade/mysql에 있습니다.
메타데이터를 초기화하려면 다음 명령을 실행하세요.
${HIVE_HOME}/bin/schematool -dbType mysql -initSchema --verbose
마지막 줄에 schemaTool completed가 나타나면 메타데이터가 성공적으로 초기화된 것입니다.
4단계: Metastore 실행 및 테스트 (Step 4: Launch Metastore and test)
- Metastore를 실행합니다.
${HIVE_HOME}/bin/hive --service metastore
- 테스트용 Hive 클라이언트를 시작합니다.
${HIVE_HOME}/bin/hive
결론 (Conclusion)
Hive Metastore 데이터베이스로 MySQL을 사용하면 Hive의 데이터가 늘어남에 따라 MySQL이 전체 시스템의 병목이 될 수 있습니다. 이런 경우 TiDB는 좋은 해결책인데, MySQL 프로토콜과 호환되고 우수한 수평 확장성을 가지기 때문입니다. 분산 아키텍처 덕분에 TiDB는 대규모 데이터 셋과 많은 수의 동시 쿼리에서 MySQL보다 훨씬 뛰어난 성능을 보입니다.
이 글은 TiDB를 Metastore 데이터베이스로 사용하는 Hive 클러스터를 배포하는 방법을 보여줬습니다. TiDB가 Hive Metastore를 수평 확장해 성장하는 비즈니스 요구를 충족시키는 데 도움이 되길 바랍니다.
또한 MySQL에서 TiDB로의 마이그레이션 스토리에 관심이 있다면 이 글을 확인하세요.
자주 묻는 질문 (FAQ)
- Hive 호환 버전?
| Hive Version | Status |
|---|---|
| 1.x | Not tested |
| 2.0.x | Tested |
| 2.1.x | Tested and verified in production |
| 2.3.x | Tested and verified in production |
| 3.x | Tested |
- Hive metastore 데이터베이스의 스키마를 변경해야 하나요? Hive 버전 2.1.x와 2.3.x의 경우 스키마 변경이 필요 없습니다.
- Hive metastore 데이터베이스 테이블의 외래 키 제약이 TiDB로 마이그레이션에 영향을 주나요? 테스트된 버전에서는 외래 키 제약이 TiDB를 Hive metastore로 사용하는 데 영향을 주지 않습니다.
MetaException(message:The isolation level 'SERIALIZABLE' is not supported. Set tidb_skip_isolation_level_check=1 to skip this error)예외는 어떻게 처리하나요? TiDB에서 다음 명령을 실행하세요:
set global tidb_skip_isolation_level_check=1;
을 실행해 체크를 건너뜁니다.
더 알아보기 (Learn more)
TiDB는 MySQL 호환 분산 DB라서 Hive 메타스토어를 거의 수정 없이 전환할 수 있어요. TiDB에 hive DB·사용자를 만들고, hive-site.xml의 JDBC URL만 jdbc:mysql://host:port/hive로 바꾼 뒤 schematool로 스키마를 초기화하고 metastore를 실행하면 됩니다. SERIALIZABLE 격리 레벨 예외는 tidb_skip_isolation_level_check=1로 해결합니다.