HiveでMySQLを使ったLocal Metastoreの設定方法
情報はあるけど一応めもっとく
Cloudera版のHive 0.7.1をインストールするとデフォルトではEmbeded Metastoreになっている。
この状態だとHiveのメタデータの管理がDerbyという組み込みDBを使っているので、単一プロセスからしか接続できない。
なので複数のプロセスから扱おうとすると以下のようなエラーが出る。
hive> show tables; FAILED: Error in metadata: javax.jdo.JDOFatalDataStoreException: Failed to start database '/var/lib/hive/metastore/metastore_db', see the next exception for details. NestedThrowables: java.sql.SQLException: Failed to start database '/var/lib/hive/metastore/metastore_db', see the next exception for details. FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask
そこで組み込みDBではなくMySQL(PostgreSQLでもいいけど)を使って複数のプロセスから扱えるようにします。これがLocal Metastoreです。
元ネタはこの辺
- https://ccp.cloudera.com/display/CDHDOC/Hive+Installation#HiveInstallation-ConfiguringtheHiveMetastore
- https://cwiki.apache.org/confluence/display/Hive/AdminManual+MetastoreAdmin#AdminManualMetastoreAdmin-LocalMetastore
- http://blog.katsuma.tv/2009/10/hive_local_metastore.html
基本的にはClouderaの記事を参考にしました。
$ curl -L 'http://www.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.15.tar.gz/from/http://mysql.he.net/' | tar xz $ sudo cp mysql-connector-java-5.1.15/mysql-connector-java-5.1.15-bin.jar /usr/lib/hive/lib/
これを忘れると
hive> show tables; FAILED: Error in metadata: javax.jdo.JDOFatalInternalException: Error creating transactional connection factory
とか言われる。
MySQLのインストール
# yum install mysql-server
MySQLの設定
# mysql -u root -p mysql> CREATE DATABASE metastore; mysql> USE metastore; mysql> SOURCE /usr/lib/hive/scripts/metastore/upgrade/mysql/hive-schema-0.7.0.mysql.sql; mysql> CREATE USER hiveuser@localhost IDENTIFIED BY 'password'; mysql> GRANT ALL PRIVILEGES ON metastore.* TO hiveuser@localhost; mysql> FLUSH PRIVILEGES;
/etc/hive/conf/hive-site.xmlを以下のように設定
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost/metastore</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hiveuser</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>password</value> </property> <property> <name>datanucleus.autoCreateSchema</name> <value>false</value> </property> <property> <name>datanucleus.fixedDatastore</name> <value>true</value> </property> </configuration>
いじょ