Metastore 는 데이터베이스 · 테이블 · 파티션 · 컬럼 · 저장 위치 · SerDe 같은 메타데이터를 보관한다. 실제 데이터는 HDFS 나 오브젝트 스토리지에 있고, Metastore 는 "어디에 어떤 형태로 있는지"만 안다. Hive 뿐 아니라 Spark · Trino · Impala · Flink 가 같은 Metastore 를 바라보며 카탈로그로 쓴다.
구성은 두 층이다. 메타데이터를 실제로 담는 백엔드 데이터베이스(MariaDB · MySQL · PostgreSQL · Oracle)와, 클라이언트에게 Thrift API 를 제공하는 Metastore 서비스다.
| 방식 | 설명 | 쓰임 |
|---|---|---|
| Embedded | Derby 를 내장해 같은 JVM 에서 동작. 동시 접속 하나 | 로컬 시험용 |
| Local | 클라이언트 JVM 안에서 Metastore 코드가 돌고 백엔드 DB 에 직접 접속 | 소규모 |
| Remote | Metastore 가 독립 프로세스로 뜨고 클라이언트는 Thrift 로 접속 | 운영 표준 |
Remote 방식이 표준인 이유는 백엔드 DB 접속 정보를 클라이언트에 뿌리지 않아도 되고, 여러 엔진이 하나의 카탈로그를 공유하며, 인증과 권한을 한 지점에서 통제할 수 있기 때문이다.
<property>
<name>hive.metastore.uris</name>
<value>thrift://metastore01:9083</value>
</property>
배포 파일이 두 갈래다.
| 패키지 | 들어 있는 것 |
|---|---|
apache-hive-<ver>-bin |
Hive CLI(Beeline), HiveServer2, Metastore, 실행 엔진 연동, 설정 파일 일체 |
hive-standalone-metastore-<ver> |
Metastore 서비스와 관련 라이브러리, schematool 만 |
standalone 패키지에는 HiveServer2 와 쿼리 실행 엔진이 없다. Hive 로 쿼리를 돌릴 계획이 없고 Trino · Spark · Flink 의 카탈로그로만 쓸 때 선택한다. HiveServer2 로 HiveQL 을 받아야 한다면 전체 패키지가 필요하다.
Hive 4.1.0(2025-07-31)부터 Metastore 를 독립 구성 요소로 바이너리와 도커 이미지 형태로 함께 제공한다. 이후 4.2.0 은 2025-11-23 에 나왔고 최소 요구 JDK 가 21 이다. 4.1.0 이 JDK 17 을 지원한 다음 단계다. 도입 전에 함께 쓰는 엔진의 JDK 지원 범위를 확인한다.
백엔드 DB 스키마를 먼저 만든다. 자동 생성 기능에 기대지 않고 schematool 로 명시적으로 처리한다.
schematool -dbType postgres -initSchema
schematool -dbType postgres -info
Remote 방식으로 띄운다.
hive --service metastore
nohup hive --service metastore > /var/log/hive/metastore.log 2>&1 &
ss -lntp | grep 9083
tail -f /var/log/hive/metastore.log
standalone 패키지는 자체 기동 스크립트를 쓴다.
bin/start-metastore
운영에서는 systemd 유닛으로 등록해 관리한다.
beeline -u "jdbc:hive2://hiveserver01:10000/default" -e "show databases;"
Metastore 가 뜨지 않으면 백엔드 DB 접속 정보(javax.jdo.option.ConnectionURL, 사용자, 드라이버 JAR), 스키마 버전, 포트 충돌 순서로 확인한다. 스키마 버전 불일치는 Hive Schema version does not match metastore's schema version 으로 드러난다.