Apache Phoenixは、HBase上でSQLクエリを可能にするレイヤーを提供し、NoSQLデータベースであるHBaseをリレーショナルデータベースのように扱うことを可能にします。ここでは、PhoenixとHBaseを連携させるための基本的なインストールと設定の手順を解説します。
1. Apache Phoenixバイナリの準備と配置
まず、Apache Phoenixのバイナリパッケージをダウンロードし、システム上の任意のディレクトリに展開します。一般的な配置場所として、/usr/local/ディレクトリ以下にphoenixという名前で配置する例を示します。
# 例: ダウンロードしたアーカイブ(例: apache-phoenix-4.13.0-HBase-1.3-bin.tar.gz)をサーバーにアップロード
# その後、/usr/local/ へ展開
tar -zxvf apache-phoenix-4.13.0-HBase-1.3-bin.tar.gz -C /usr/local/
# 展開されたディレクトリ名を簡潔にするため、'phoenix' にリネーム
mv /usr/local/apache-phoenix-4.13.0-HBase-1.3-bin /usr/local/phoenix
上記コマンド例のバージョン番号(4.13.0-HBase-1.3)は、お使いのPhoenixおよびHBaseのバージョンに合わせて適宜変更してください。
2. HBaseライブラリへのPhoenix JARファイルの展開
PhoenixがHBaseと連携して動作するためには、PhoenixのサーバーサイドコンポーネントをHBaseのクラスパスに追加する必要があります。これにより、HBaseのリージョンサーバーがPhoenixのデータモデルとクエリ処理を理解し、実行できるようになります。
# PhoenixサーバーJARファイルをHBaseのlibディレクトリにコピー
cp /usr/local/phoenix/phoenix-4.13.0-HBase-1.3-server.jar /usr/local/hbase/lib/
# PhoenixコアJARファイルもHBaseのlibディレクトリにコピー(一部のバージョンや設定で必要となる場合があります)
cp /usr/local/phoenix/phoenix-core-4.13.0-HBase-1.3.jar /usr/local/hbase/lib/
これらのJARファイルは、HBaseクラスタ内のすべてのHBaseリージョンサーバーノードに配置する必要があります。
3. HBaseサービスの再起動
HBaseのlibディレクトリに新しいJARファイルを追加した後は、HBaseクラスタを再起動して、これらの変更をHBaseサービスに反映させる必要があります。
# HBaseを停止します
/usr/local/hbase/bin/stop-hbase.sh
# HBaseを開始します
/usr/local/hbase/bin/start-hbase.sh
クラスタ環境の場合、すべてのHBaseサービス(MasterとRegionServer)が適切に再起動されたことを確認してください。
4. Phoenix接続の検証
最後に、Phoenixのコマンドラインツールsqlline.pyを使用して、HBaseとの接続が正常に確立されているかを確認します。
/usr/local/phoenix/bin/sqlline.py hadoop1 # 'hadoop1' はHBaseが動作しているホスト名またはZooKeeperクォーラムを指定します
接続が成功すると、以下のような出力が表示されます。途中でSLF4Jに関する警告が表示されることがありますが、通常は機能上の問題はありません。
Setting property: [incremental, false]
Setting property: [isolation, TRANSACTION_READ_COMMITTED]
issuing: !connect jdbc:phoenix:hadoop1 none none org.apache.phoenix.jdbc.PhoenixDriver
Connecting to jdbc:phoenix:hadoop1
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/phoenix/phoenix-4.13.0-HBase-1.3-client.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
17/11/16 11:09:37 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Connected to: Phoenix (version 4.13)
Driver: PhoenixEmbeddedDriver (version 4.13)
Autocommit status: true
Transaction isolation: TRANSACTION_READ_COMMITTED
Building list of tables and columns for tab-completion (set fastconnect to true to skip)...
92/92 (100%) Done
Done
sqlline version 1.2.0
0: jdbc:phoenix:hadoop1> !tables
+------------+--------------+-------------+---------------+----------+------------+----------------------------+-----------------+
| TABLE_CAT | TABLE_SCHEM | TABLE_NAME | TABLE_TYPE | REMARKS | TYPE_NAME | SELF_REFERENCING_COL_NAME | REF_GENERATION |
+------------+--------------+-------------+---------------+----------+------------+----------------------------+-----------------+
| | SYSTEM | CATALOG | SYSTEM TABLE | | | | |
| | SYSTEM | FUNCTION | SYSTEM TABLE | | | | |
| | SYSTEM | SEQUENCE | SYSTEM TABLE | | | | |
| | SYSTEM | STATS | SYSTEM TABLE | | | | |
+------------+--------------+-------------+---------------+----------+------------+----------------------------+-----------------+
上記の出力のように、!tablesコマンドを実行してPhoenixのシステムテーブル(例: SYSTEM.CATALOG)が表示されれば、PhoenixとHBaseの連携は正しく設定されています。sqlline.pyセッションを終了するには、Ctrl+Dを押してください。