Split View: Ubuntu apache phoenix 설치 방법
Ubuntu apache phoenix 설치 방법
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;
Ubuntu Apache Phoenix Installation Guide
Pre-checking
Phoenix runs on top of HBase, so HBase must already be installed. For installation, refer to this document. Version compatibility between Phoenix and HBase is important. The HBase version I previously installed is 2.5.3. To check the HBase version, you can access the HMaster Web UI and find the HBase version at the bottom of the page.

For HBase version 2.5.x, you need to install Phoenix Version 5.1.3. For other versions, refer to the Phoenix download site to find the appropriate version.

Apache Phoenix Installation
The installation is relatively straightforward once HBase is set up. Download and untar the Phoenix binary on all servers using the commands below.
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
Then, copy the phoenix-server-hbase-2.5-5.1.3.jar file from the phoenix-hbase-2.5-5.1.3-bin folder into the lib directory of all servers where HMaster and RegionServer are installed.
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/
Then restart HBase.
After Restarting HBase
Connecting via Phoenix sqlline.py
Replace the hbase-site.xml file inside the phoenix-hbase-2.5-5.1.3-bin/bin folder with the hbase-site.xml of the HBase you want to connect to. Then run the following to connect to Phoenix via JDBC.
./sqlline.py
If the connection is successful, you can confirm that various meta-tables used by Phoenix have been created in the HBase tables, as shown below.

Running the stock_symbol.sql Example
python sqlline.py latte01,latte02,latte03 ../examples/STOCK_SYMBOL.sql
If you query with !tables in SQLLine, you can confirm that a table called STOCK_SYMBOL has been created.

CRUD Examples
Run describe to see the table schema.
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 |
+-----------+-------------+--------------+-------------+-----------+-----------+-------------+---------------+----------------+----------------+----------+---------+------------+---------------+------------------+-------------------+--------+
To find the PK, enter !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
A key point when performing UPSERT in SQLLine is that double quotes cause errors, so you must use single quotes.
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)
Running a SELECT confirms that the inserted data is retrieved correctly.
JOIN
Native HBase does not support joins, but using Phoenix, you can use joins. However, it is not as fast as 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;
Quiz
Q1: What is the main topic covered in "Ubuntu Apache Phoenix Installation Guide"?
Ubuntu Apache Phoenix Installation Guide
Q2: What is UPSERT?
A key point when performing UPSERT in SQLLine is that double
quotes cause errors, so you must use single quotes. Running a SELECT confirms that the inserted
data is retrieved correctly.
Q3: Explain the core concept of JOIN.
Native HBase does not support joins, but using Phoenix, you can use joins. However, it is not as
fast as RDBMS. user table orders table