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

2.5.x version의 HBase는 Phoenix Version 5.1.3을 설치해야 한다. 그 외의 version은 Phoenix dowonload site를 참고해 적절한 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로 접근하기
phoenix-hbase-2.5-5.1.3-bin/bin 폴더 내부의 hbase-site.xml
파일을 접속하고자 하는 hbase의 hbase-site.xml로 변경합니다. 이후 아래처럼 실행하면 phoenix에 jdbc로 접근 가능합니다.
./sqlline.py
접근이 성공적으로 되면,아래와 같이 hbase table에 pheonix에서 사용하는 다양한 metatable이 생성된 것을 확인할 수 있습니다.

stock_symbol.sql Example 실행해보기.
python sqlline.py latte01,latte02,latte03 ../examples/STOCK_SYMBOL.sql
SQLline에서 !tables
로 조회해보면, STOCK_SYMBOL
이라는 table이 생성된 것을 확인할 수 있다.

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;