Skip to content
Published on

Ubuntu Apache Phoenixインストール方法

Authors
  • Name
    Twitter

事前確認

PhoenixはHBase上で動作するため、HBaseが既にインストールされている必要がある。インストールはこのドキュメントを参照して行う。PhoenixはHBaseとのバージョン互換性が重要だ。以前インストールしたHBaseのバージョンは2.5.3だ。HBaseのバージョンを確認するには、HMaster Web UIにアクセスするとページ下部でHBaseバージョンを確認できる。

hbase version

2.5.xバージョンのHBaseにはPhoenix Version 5.1.3をインストールする必要がある。その他のバージョンはPhoenixダウンロードサイトを参考に適切なバージョンを見つければよい。

hbase version

Apache Phoenixのインストール方法

HBaseが構築された状態であれば、インストール方法は比較的簡単だ。すべてのサーバーで以下のコマンドでPhoenixバイナリをダウンロードしてuntarする。

wget https://dlcdn.apache.org/phoenix/phoenix-5.1.3/phoenix-hbase-2.5-5.1.3-bin.tar.gz

tar -zxvf phoenix-hbase-2.5-5.1.3-bin.tar.gz

その後、生成されたphoenix-hbase-2.5-5.1.3-binフォルダのphoenix-server-hbase-2.5-5.1.3.jarファイルを、HMasterとRegionServerがインストールされたすべてのサーバーのlibディレクトリに配置する。

cd phoenix-hbase-2.5-5.1.3-bin
cp phoenix-server-hbase-2.5.jar /usr/local/hbase/lib/
cp phoenix-server-hbase-2.5-5.1.3.jar /usr/local/hbase/lib/

その後、HBaseを再起動する。

HBase再起動後

Phoenix sqlline.pyで接続する

SQLLine manual

phoenix-hbase-2.5-5.1.3-bin/binフォルダ内のhbase-site.xmlファイルを、接続したいHBaseのhbase-site.xmlに変更する。その後、以下のように実行するとPhoenixにJDBC経由で接続できる。

./sqlline.py

接続が成功すると、以下のようにHBaseテーブルにPhoenixが使用する様々なメタテーブルが作成されたことを確認できる。

hbase version

stock_symbol.sqlの例を実行してみる

 python sqlline.py  latte01,latte02,latte03 ../examples/STOCK_SYMBOL.sql

SQLLineで!tablesで照会すると、STOCK_SYMBOLというテーブルが作成されたことを確認できる。

hbase version

CRUDの例

テーブルのスキーマを確認するためにdescribeを実行する。

0: jdbc:phoenix:> !describe STOCK_SYMBOL
+-----------+-------------+--------------+-------------+-----------+-----------+-------------+---------------+----------------+----------------+----------+---------+------------+---------------+------------------+-------------------+--------+
| TABLE_CAT | TABLE_SCHEM |  TABLE_NAME  | COLUMN_NAME | DATA_TYPE | TYPE_NAME | COLUMN_SIZE | BUFFER_LENGTH | DECIMAL_DIGITS | NUM_PREC_RADIX | NULLABLE | REMARKS | COLUMN_DEF | SQL_DATA_TYPE | SQL_DATETIME_SUB | CHAR_OCTET_LENGTH | ORDINA |
+-----------+-------------+--------------+-------------+-----------+-----------+-------------+---------------+----------------+----------------+----------+---------+------------+---------------+------------------+-------------------+--------+
|           |             | STOCK_SYMBOL | SYMBOL      | 12        | VARCHAR   | null        | null          | null           | null           | 0        |         |            | null          | null             | null              | 1      |
|           |             | STOCK_SYMBOL | COMPANY     | 12        | VARCHAR   | null        | null          | null           | null           | 1        |         |            | null          | null             | null              | 2      |
+-----------+-------------+--------------+-------------+-----------+-----------+-------------+---------------+----------------+----------------+----------+---------+------------+---------------+------------------+-------------------+--------+

PKを確認するには!primarykeys テーブル名を入力する。

0: jdbc:phoenix:> !primarykeys STOCK_SYMBOL
+-----------+-------------+--------------+-------------+---------+---------+-------------+-----------+-----------+-------------+---------+---------------+
| TABLE_CAT | TABLE_SCHEM |  TABLE_NAME  | COLUMN_NAME | KEY_SEQ | PK_NAME | ASC_OR_DESC | DATA_TYPE | TYPE_NAME | COLUMN_SIZE | TYPE_ID | VIEW_CONSTANT |
+-----------+-------------+--------------+-------------+---------+---------+-------------+-----------+-----------+-------------+---------+---------------+
|           |             | STOCK_SYMBOL | SYMBOL      | 1       |         | A        | 12        | VARCHAR   | null        | 12      |               |
+-----------+-------------+--------------+-------------+---------+---------+-------------+-----------+-----------+-------------+---------+---------------+

SELECT

0: jdbc:phoenix:> select * from STOCK_SYMBOL;
+--------+----------------+
| SYMBOL |    COMPANY     |
+--------+----------------+
| CRM    | SalesForce.com |
+--------+----------------+

UPSERT

SQLLineでUPSERT時に注意すべき点は、ダブルクォートはエラーを発生させるため、シングルクォートを使用しなければならないことだ。

0: jdbc:phoenix:> UPSERT INTO STOCK_SYMBOL  VALUES ('CRM2', 'youngju.dev');
1 row affected (0.1 seconds)
0: jdbc:phoenix:> UPSERT INTO STOCK_SYMBOL (SYMBOL, COMPANY) VALUES ('CRM3', 'chaos.and.order');
1 row affected (0.036 seconds)
0: jdbc:phoenix:> select * from STOCK_SYMBOL;
+--------+-----------------+
| SYMBOL |     COMPANY     |
+--------+-----------------+
| CRM    | SalesForce.com  |
| CRM2   | youngju.dev     |
| CRM3   | chaos.and.order |
+--------+-----------------+
3 rows selected (0.054 seconds)

SELECTを実行すると、挿入した情報が正しく照会されることを確認できる。

JOIN

純粋なHBaseはJoinをサポートしないが、Phoenixを利用すればJoinを使用できる。 ただし、RDBMSほど高速ではない。

userテーブル

CREATE TABLE IF NOT EXISTS users (
    user_id INTEGER NOT NULL,
    first_name VARCHAR,
    last_name VARCHAR,
    age INTEGER,
    CONSTRAINT pk_users PRIMARY KEY (user_id)
);

ordersテーブル

CREATE TABLE IF NOT EXISTS orders (
    order_id INTEGER NOT NULL,
    user_id INTEGER,
    product_name VARCHAR,
    order_date DATE,
    CONSTRAINT pk_orders PRIMARY KEY (order_id)
);
SELECT users.first_name, users.last_name, orders.product_name, orders.order_date
FROM users
JOIN orders ON users.user_id = orders.user_id;