MariaDB로 Metastore 구성하기
MariaDB로 Metastore 구성하기 (Setting up Metastore backed by MariaDB)
Hive Metastore(HMS)의 메타데이터 저장소로 MariaDB를 사용하는 방법을 알아봐요. 특정 MySQL 드라이버 버전과 MariaDB 사이에서 발생하는 호환성 문제와 그 해결 방법도 함께 다룹니다.
출처: 문서
본문
주의 (Note)
mysql-connector-java 8.0.12부터는 기본 MySQL 드라이버로는 Metastore가 기동되지 않을 수 있습니다.
소개 (Introduction)
mysql-connector-java 8.0.12부터 MySQL 드라이버는 Metastore 초기화 시 MySQLAdapter(DataNucleus)에 의해 트리거된 getSQLKeywords 호출로 이 데이터베이스의 키워드를 조회합니다. 그런데 MariaDB의 백업 테이블 KEYWORDS는 MySQL의 그것과 달라져서 Metastore가 다음과 같은 예외를 던지며 시작에 실패하게 됩니다:
Caused by: java.sql.SQLSyntaxErrorException: Unknown column 'RESERVED' in 'where clause'
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) ~[mysql-connector-java.jar:8.0.22]
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) ~[mysql-connector-java.jar:8.0.22]
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-java.jar:8.0.22]
at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1200) ~[mysql-connector-java.jar:8.0.22]
at com.mysql.cj.jdbc.DatabaseMetaDataUsingInfoSchema.getSQLKeywords(DatabaseMetaDataUsingInfoSchema.java:1178) ~[mysql-connector-java.jar:8.0.22]
at org.datanucleus.store.rdbms.adapter.BaseDatastoreAdapter.<init>(BaseDatastoreAdapter.java:288) ~[datanucleus-rdbms-5.2.10.jar:?]
같은 문제를 겪고 있다면 MySQL 드라이버 대신 MariaDB 드라이버로 전환하는 것을 권장합니다.
구성 (Configuration)
시작하기 전에 MariaDB에 접근 가능한지 확인하고, Hive Metastore가 연결에 사용할 전용 데이터베이스와 보안 사용자 계정을 만들어 두세요.
MariaDB JDBC Connector JAR(예: mariadb-java-client-x.x.x.jar)를 내려받아 Hive $HIVE_HOME/lib 디렉터리에 넣습니다.
처음 Hive Metastore 서비스를 시작할 때는 데이터베이스를 Hive 스키마로 초기화해야 합니다. Hive 설치에 포함된 schematool 유틸리티를 사용할 수 있습니다. Hive 설치 디렉터리($HIVE_HOME/bin)에서 이 명령을 실행하세요:
schematool -driver org.mariadb.jdbc.Driver -dbType mysql -initOrUpgradeSchema -url "jdbc:mariadb://<MariaDB_Host>:<Port>/${db}" -userName hive_user -passWord your_strong_password
Metastore의 주요 구성 파일은 $HIVE_HOME/conf/hive-site.xml이며, 여기에서 Metastore 서비스(HMS)가 MariaDB 데이터베이스에 어떻게 연결할지 지정합니다. hive-site.xml에 다음 XML 속성을 추가하거나 갱신해야 합니다:
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mariadb://<MariaDB_Host>:<Port>/${db}?createDatabaseIfNotExist=false&useSSL=false</value>
<description>JDBC connection URL for the Metastore database.</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>org.mariadb.jdbc.Driver</value>
<description>The JDBC driver class name for MariaDB.</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive_user</value>
<description>Username for the Metastore database connection.</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>your_strong_password</value>
<description>Password for the Metastore database connection.</description>
</property>
</configuration>
중요(Important):
<MariaDB_Host>:<Port>를 올바른 호스트명/IP 주소로 바꾸세요.- JDBC URL에서
&는 XML에서&로 이스케이프해야 합니다.
모든 구성을 마친 뒤 Hive Metastore 서비스를 시작할 수 있습니다.
hive --service metastore
새 드라이버를 빠르게 시험해보고 싶다면 Docker 이미지를 사용해 보세요.
더 알아보기 (Learn more)
Metastore를 MariaDB로 구성할 때는 드라이버 선택이 핵심이에요. mysql-connector-java 8.0.12 이상과 MariaDB 조합은 KEYWORDS 테이블 차이 때문에 Metastore 기동 실패를 유발하니, mariadb-java-client 드라이버를 쓰는 쪽이 안전합니다. 스키마 초기화는 schematool로, 연결 정보는 hive-site.xml의 javax.jdo.option 속성으로 설정합니다.