CUBE SUGAR CONTAINER

技術系のこと書きます。

Apache Hive のメタストアに MariaDB を使う

Apache Hive はテーブルのスキーマ定義などメタデータを RDBMS に保存する。 デフォルトでは Java で書かれた組み込み RDBMS の Apache Derby が使われる。 今回は、その Apache Derby の代わりに MariaDB (MySQL) を使う方法について。

使った環境は次の通り。 Apache Hadoop と Apache Hive はメタストアの初期化直前までセットアップされていることを想定している。

$ cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core) 
$ uname -r
3.10.0-693.11.1.el7.x86_64
$ hive --version
Hive 2.3.2
Git git://stakiar-MBP.local/Users/stakiar/Desktop/scratch-space/apache-hive -r 857a9fd8ad725a53bd95c1b2d6612f9b1155f44d
Compiled by stakiar on Thu Nov 9 09:11:39 PST 2017
From source with checksum dc38920061a4eb32c4d15ebd5429ac8a
$ hadoop version
Hadoop 2.8.3
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r b3fe56402d908019d99af1f1f4fc65cb1d1436a2
Compiled by jdu on 2017-12-05T03:43Z
Compiled with protoc 2.5.0
From source with checksum 9ff4856d824e983fa510d3f843e3f19d
This command was run using /home/vagrant/hadoop-2.8.3/share/hadoop/common/hadoop-common-2.8.3.jar

コミュニティ版の Apache Hive をセットアップする方法については以下の記事に記載した。

blog.amedama.jp

下準備

まずは Apache Hive のメタストアとして使うための MariaDB をインストールしておく。

$ sudo yum -y install mariadb-server

インストールが終わったら MariaDB のサービスを起動する。

$ sudo systemctl enable mariadb
$ sudo systemctl start mariadb

続いてログイン用の情報を設定する。 今回は手早く root ユーザでやっちゃうけど、本来ならアクセス制御をしたユーザでやるのが好ましい。

$ mysqladmin password rootpassword -u root

上記で設定したアカウントで MariaDB にログインできることを確認しておこう。

$ mysql -uroot -prootpassword
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 5.5.56-MariaDB MariaDB Server

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

これで準備が整った。

Hive のメタデータ保存先に MariaDB を指定する

Hive の設定は hive-site.xml という設定ファイルで行う。 ここに、先ほどセットアップした MariaDB への接続情報を記載する。

$ cat << 'EOF' > $HIVE_HOME/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?createDatabaseIfNotExist=true</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
  </property>
  <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>rootpassword</value>
  </property>
</configuration>
EOF

MariaDB (MySQL) を使う場合、接続用のドライバが必要になる。 今回は yum でインストールできるものを使うことにした。 もちろん Web サイトからダウンロードしてきても構わない。

$ sudo yum -y install mysql-connector-java
$ ln -s /usr/share/java/mysql-connector-java.jar $HIVE_HOME/lib

あとは schematool コマンドを使ってメタストアを初期化する。 これで必要なデータベースやテーブル類が一式作られる。 メタストアに MariaDB (MySQL) を使うときは -dbType オプションに mysql を指定するのがポイントとなる。

$ schematool -dbType mysql -initSchema 2>/dev/null
Metastore connection URL:    jdbc:mysql://localhost/metastore?createDatabaseIfNotExist=true
Metastore Connection Driver :  com.mysql.jdbc.Driver
Metastore connection User:   root
Starting metastore schema initialization to 2.3.0
Initialization script hive-schema-2.3.0.mysql.sql
Initialization script completed
schemaTool completed

メタストアの情報がちゃんと初期化されたことを -info オプションで確認しておこう。

$ schematool -dbType mysql -info 2>/dev/null
Metastore connection URL:    jdbc:mysql://localhost/metastore?createDatabaseIfNotExist=true
Metastore Connection Driver :  com.mysql.jdbc.Driver
Metastore connection User:   root
Hive distribution version:   2.3.0
Metastore schema version:    2.3.0
schemaTool completed

Apache Hive でテーブルを作ってみる

次は Apache Hive を使ったことで、ちゃんとメタストアに情報が保存されることを確認してみよう。

Hive CLI を起動する。

$ hive

適当にテーブルを定義してみる。

hive> CREATE TABLE users (
    >   name STRING,
    >   age INT
    > );
OK
Time taken: 1.498 seconds

あとは MariaDB のメタストア用データベースに、上記で定義したテーブル情報が保存されていることを確認する。

$ mysql -uroot -prootpassword metastore -e "SELECT * FROM TBLS\G";
*************************** 1. row ***************************
            TBL_ID: 1
       CREATE_TIME: 1517579457
             DB_ID: 1
  LAST_ACCESS_TIME: 0
             OWNER: vagrant
         RETENTION: 0
             SD_ID: 1
          TBL_NAME: users
          TBL_TYPE: MANAGED_TABLE
VIEW_EXPANDED_TEXT: NULL
VIEW_ORIGINAL_TEXT: NULL
IS_REWRITE_ENABLED:  

どうやら、ちゃんと保存されているようだ。

めでたしめでたし。

プログラミング Hive

プログラミング Hive

  • 作者: Edward Capriolo,Dean Wampler,Jason Rutherglen,佐藤直生,嶋内翔,Sky株式会社玉川竜司
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2013/06/15
  • メディア: 大型本
  • この商品を含むブログ (3件) を見る

ビッグデータ分析・活用のためのSQLレシピ

ビッグデータ分析・活用のためのSQLレシピ