1. 安裝
1.1 下載Phoenix
從Apache下載Phoenix(下載鏈接),從4.8.0到4.10.0各版本都有,本地安裝的Hbase版本為1.1.9,所以選擇對(duì)應(yīng)Hbase是1.1版本的下載。這里我下載的是4.9.0版本,資源包 apache-phoenix-4.9.0-HBase-1.1-bin.tar.gz
(Hbase 1.1.9版本下載鏈接)
這里注意,使用的phoeni版本一定要和hbase的版本匹配,要不然會(huì)出錯(cuò)。
1.2 配置
首先,將下載的資源包解壓到本地,將phoenix-4.9.0-HBase-1.1-client.jar和phoenix-core-4.9.0-HBase-1.1.jar兩個(gè)jar包拷貝至Hbase的/lib文件夾。另外,將Hbase的配置文件base-site.xml拷貝至Phoenix根目錄中的/bin文件夾下到此就完成了配置。
1.3 啟動(dòng)
首先啟動(dòng)Hadoop,然后啟動(dòng)Hbase,在Phoenix文件夾下執(zhí)行:
bin/sqlline.py master
如此,就可以開始對(duì)非關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行sql 語(yǔ)言的操作了。
2. hadoop、hbase、phoeni的聯(lián)合使用
三者的打開、關(guān)閉順序:
先打開hadoop,再打開hbase,最后打開Phoenix;關(guān)閉是相反的順序先關(guān)閉Phoenix,再關(guān)閉hbase,最后關(guān)閉hadoop。
啟動(dòng)
cc@cc-fibric:~$ sudo -i
[sudo] password for cc:
root@cc-fibric:~# ssh localhost
root@localhost's password:
Welcome to Ubuntu 16.04.4 LTS (GNU/Linux 4.13.0-36-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
170 packages can be updated.
11 updates are security updates.
Last login: Fri Sep 28 11:20:52 2018 from 127.0.0.1
root@cc-fibric:~#
root@cc-fibric:~# cd /usr/local/hadoop/
root@cc-fibric:/usr/local/hadoop# cd sbin/
啟動(dòng)hadoop:
root@cc-fibric:/usr/local/hadoop/sbin# ./start-all.sh
This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
Starting namenodes on [localhost]
root@localhost's password:
localhost: starting namenode, logging to /usr/local/hadoop/logs/hadoop-root-namenode-cc-fibric.out
root@localhost's password:
localhost: starting datanode, logging to /usr/local/hadoop/logs/hadoop-root-datanode-cc-fibric.out
Starting secondary namenodes [account.jetbrains.com]
root@account.jetbrains.com's password:
account.jetbrains.com: starting secondarynamenode, logging to /usr/local/hadoop/logs/hadoop-root-secondarynamenode-cc-fibric.out
starting yarn daemons
starting resourcemanager, logging to /usr/local/hadoop/logs/yarn-root-resourcemanager-cc-fibric.out
root@localhost's password:
localhost: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-root-nodemanager-cc-fibric.out
root@cc-fibric:/usr/local/hadoop/sbin# jps
12721 NodeManager
12850 Jps
12035 DataNode
11866 NameNode
12399 ResourceManager
12239 SecondaryNameNode
root@cc-fibric:/usr/local/hadoop/sbin# cd /usr/local/hbase/bin/
啟動(dòng)hbase:
root@cc-fibric:/usr/local/hbase/bin# start-hbase.sh
starting master, logging to /usr/local/hbase/logs/hbase-root-master-cc-fibric.out
root@cc-fibric:/usr/local/hbase/bin#
root@cc-fibric:/usr/local/hbase/bin# cd /usr/local/phoenix/bin/
啟動(dòng)Phoenix:
root@cc-fibric:/usr/local/phoenix/bin# ./sqlline.py localhost
Setting property: [incremental, false]
Setting property: [isolation, TRANSACTION_READ_COMMITTED]
issuing: !connect jdbc:phoenix:localhost none none org.apache.phoenix.jdbc.PhoenixDriver
Connecting to jdbc:phoenix:localhost
18/10/06 16:10:58 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Connected to: Phoenix (version 4.14)
Driver: PhoenixEmbeddedDriver (version 4.14)
Autocommit status: true
Transaction isolation: TRANSACTION_READ_COMMITTED
Building list of tables and columns for tab-completion (set fastconnect to true to skip)...
137/137 (100%) Done
Done
sqlline version 1.2.0
0: jdbc:phoenix:localhost>
Phoenix的使用:
Phoenix是構(gòu)建在HBase上的一個(gè)SQL層,能讓我們用標(biāo)準(zhǔn)的JDBC APIs而不是HBase客戶端APIs來(lái)創(chuàng)建表,插入數(shù)據(jù)和對(duì)HBase數(shù)據(jù)進(jìn)行查詢。
打開服務(wù)
root@cc-fibric:/usr/local/phoenix/bin# ./queryserver.py start
starting Query Server, logging to /tmp/phoenix/phoenix-root-queryserver.log
root@cc-fibric:/usr/local/phoenix/bin# ./sqlline.py localhost
創(chuàng)建一個(gè)表:
0: jdbc:phoenix:localhost> create table person(id varchar primary key, name varchar);
No rows affected (1.328 seconds)
插入元素:
0: jdbc:phoenix:localhost> upsert into person values ('111','jone');
1 row affected (0.073 seconds)
查找表:
0: jdbc:phoenix:localhost> select * from person;
+------+-------+
| ID | NAME |
+------+-------+
| 111 | jone |
+------+-------+
1 row selected (0.074 seconds)
顯示全部的表:
0: jdbc:phoenix:localhost> !tables
+------------+--------------+-------------+---------------+----------+------------+--------------+
| TABLE_CAT | TABLE_SCHEM | TABLE_NAME | TABLE_TYPE | REMARKS | TYPE_NAME | SELF_REFEREN |
+------------+--------------+-------------+---------------+----------+------------+--------------+
| | SYSTEM | CATALOG | SYSTEM TABLE | | | |
| | SYSTEM | FUNCTION | SYSTEM TABLE | | | |
| | SYSTEM | LOG | SYSTEM TABLE | | | |
| | SYSTEM | SEQUENCE | SYSTEM TABLE | | | |
| | SYSTEM | STATS | SYSTEM TABLE | | | |
| | | PERSON | TABLE | | | |
+------------+--------------+-------------+---------------+----------+------------+--------------+
0: jdbc:phoenix:localhost>
這里注意一個(gè)問(wèn)題,在關(guān)系型數(shù)據(jù)庫(kù)中,如mysql,不用特別指定一個(gè)主鍵元素,但是在非關(guān)系型數(shù)據(jù)庫(kù)中,需要指定一個(gè)主元素,否則會(huì)報(bào)錯(cuò):
下面的是一個(gè)錯(cuò)誤的語(yǔ)句例子,使用Mysql 與Phoenix的區(qū)別:
錯(cuò)解:
0: jdbc:phoenix:localhost> create table "test11"(id varchar,names varchar);
Error: ERROR 509 (42888): The table does not have a primary key. tableName=test11 (state=42888,code=509)
java.sql.SQLException: ERROR 509 (42888): The table does not have a primary key. tableName=test11
at org.apache.phoenix.exception.SQLExceptionCode$Factory$1.newException(SQLExceptionCode.java:494)
...........
省略不寫
...........
at sqlline.SqlLine.start(SqlLine.java:398)
at sqlline.SqlLine.main(SqlLine.java:291)
正解:
0: jdbc:phoenix:localhost> create table "test11"(id varchar primary key,names varchar);
No rows affected (1.309 seconds)
這里一定要指定一個(gè)為主鍵
關(guān)閉順序:
關(guān)閉phoenix 服務(wù):
root@cc-fibric:/usr/local/phoenix/bin# ./queryserver.py start
root@cc-fibric:/usr/local/phoenix/bin# cd /usr/local/hbase/
關(guān)閉Hbase:
root@cc-fibric:/usr/local/hbase# ls
bin conf hbase-webapps lib logs README.txt
CHANGES.txt data-tmp LEGAL LICENSE.txt NOTICE.txt
root@cc-fibric:/usr/local/hbase# cd bin/
root@cc-fibric:/usr/local/hbase/bin# stop-hbase.sh
stopping hbase....................
關(guān)閉Hadoop:
root@cc-fibric:/usr/local/hbase/bin# cd ../..
root@cc-fibric:/usr/local# cd hadoop/
root@cc-fibric:/usr/local/hadoop# ls
bin etc include lib libexec LICENSE.txt logs NOTICE.txt README.txt sbin share tmp
root@cc-fibric:/usr/local/hadoop# cd sbin/
查看進(jìn)程:
root@cc-fibric:/usr/local/hadoop/sbin# jps
6160 NodeManager
9730 Jps
5845 ResourceManager
5318 NameNode
5691 SecondaryNameNode
5486 DataNode
關(guān)閉:
root@cc-fibric:/usr/local/hadoop/sbin# ./stop-all.sh
This script is Deprecated. Instead use stop-dfs.sh and stop-yarn.sh
Stopping namenodes on [localhost]
root@localhost's password:
localhost: stopping namenode
root@localhost's password:
localhost: stopping datanode
Stopping secondary namenodes [account.jetbrains.com]
root@account.jetbrains.com's password:
account.jetbrains.com: stopping secondarynamenode
stopping yarn daemons
stopping resourcemanager
root@localhost's password:
localhost: stopping nodemanager
no proxyserver to stop
自此,全部關(guān)閉成功
root@cc-fibric:/usr/local/hadoop/sbin# jps
10479 Jps