Hive Metastore
Hive는 데이터에 대한 논리적 정보와 파일의 물리적 위치 등과 같은 메타성 정보를 가진다. 메타스토어는 이러한 메타 정보를 저장하고 사용자의 요청에 따라 제공한다.
정보를 제공할 때는 Thrift(Apache Thrift; 이기종간의 통신을 위한 프로토콜)를 사용하고 메타 데이터 자체는 JDBC를 이용해 데이터베이스에 저장한다.
유형
Hive의 메타스토어 유형은 임베디드(Embedded metastore), 로컬(Local metastore), 원격(Remote metastore)으로 구분할 수 있다.
임베디드(Embedded metastore)
Hive를 설치하면 기본값으로 Derby를 메타스토어 DB로 사용하는데, 한 번에 한 명의 사용자만 접근할 수 있다. 따라서 운영 환경에는 적합하지 않다.
설정
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:derby:metastore_db;create=true </value>
<description>JDBC connect string for a JDBC metastore </description>
</property>
로컬(Local metastore)
Hive와 Mestore가 같은 JVM에서 동작하며, 메타 데이터는 MySQL, PostgreSQL과 같은 별도의 RDB에 저장된다.
설정
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://[IP]:[port]/[데이터베이스 이름]</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>org.mariadb.jdbc.Driver</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>[사용자명]</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>[암호]</value>
<description>password to use against metastore database</description>
</property>
원격(Remote metastore)
메타 데이터가 별도의 RDB에 저장되는 것은 로컬 메타스토어와 동일하지만, Metastore가 Hive와 별도의 JVM에서 동작한다. 클라이언트는 메타스토어 DB에 직접 쿼리문을 실행하는 것 대신 메타스토어 서버를 받게 된다. 이 때 클라이언트와 메타스토어 서버는 thrift 프로토콜을 이용해 통신한다.
설정
<property>
<name>hive.metastore.uris</name>
<value>thrift://[메타스토어 IP]:[메타스토어 Port]</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
설정 파라미터
위에서 메타스토어 유형에 따른 xml 설정을 적어두었는데, 각 파라미터에 대한 설명도 추가한다.
파라미터 | 설명 | 값 예시 |
javax.jdo.option.ConnectionURL | 메타스토어 DB 접속 주소 | jdbc:mysql://localhost:3310/metastore?createDatabaseIfNotExist=true |
javax.jdo.option.ConnectionDriverName | DB 연결 시 사용하는 JDBC 드라이버 | com.mysql.jdbc.Driver |
javax.jdo.option.ConnectionUserName | DB 연결 시 사용하는 계정명 | |
javax.jdo.option.ConnectionPassword | DB 연결 시 사용하는 계정 비밀번호 | |
hive.metastore.uris | 클라이언트가 메타스토어 서버와 통신하는 URI | |
hive.metastore.local | 메타스토어의 로컬/원격 여부. 로컬이면True, 원격이면 False |
|
hive.metastore.warehouse.dir | Hive 테이블이 저장되는 HDFS 상의 경우 | /user/hive/warehouse |
참고 문서
https://wikidocs.net/28353#fn:1