Published on

Ubuntu apache phoenix 설치 방법

Authors
  • Name
    Twitter

pre checking

phoenix는 HBase 위에서 동작하기 때문에, HBase는 이미 설치되어있어야한다. 설치는 이 문서 를 참조하여 설치한다. Phoenix는 HBase와의 version 호환이 중요하다. 내가 이전에 설치한 HBase version은 2.5.3 이다. HBase version을 확인하기 위해서는 HMaster Web UI에 접속하면 페이지 하단에서 HBase version을 확인할 수 있다.

hbase version

2.5.x version의 HBase는 Phoenix Version 5.1.3을 설치해야 한다. 그 외의 version은 Phoenix dowonload site를 참고해 적절한 version을 찾으면 된다.

hbase version

Apache Phoenix 설치 방법

HBase가 구축된 상태에서 설치 방법은 비교적 간단하다. 모든 서버에서 아래의 명령어로 피닉스 바이너리를 다운로드하고 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 directory에 넣어준다.

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를 재시작한다.

After Restarting HBase

pheonix 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 table에 pheonix에서 사용하는 다양한 metatable이 생성된 것을 확인할 수 있습니다.

hbase version

stock_symbol.sql Example 실행해보기.

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

SQLline에서 !tables로 조회해보면, STOCK_SYMBOL이라는 table이 생성된 것을 확인할 수 있다.

hbase version

CRUD examples

table의 schema를 보기위해 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 <table_name> 을 입력합니다.

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를 해보면 insert한 정보가 잘 조회되는 것을 확인할 수 있다.

JOIN

순수 HBase는 Join을 지원하지 않지만, phoenix를 이용하면 join을 사용할 수 있다. 그러나 RDBMS처럼 빠르지는 않다.

user table

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 table

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;