phoenix(鳳凰)與hbase整合
一、什麼是Phonenix?
Phoenix是構建在HBase上的一個SQL層,能讓我們用標準的JDBC APIs而不是HBase客戶端APIs來建立表,插入資料和對HBase資料進行查詢。
Phoenix完全使用Java編寫,作為HBase內嵌的JDBC驅動。Phoenix查詢引擎會將SQL查詢轉換為一個或多個HBase掃描,並編排執行以生成標準的JDBC結果集。直接使用HBase API、協同處理器與自定義過濾器,對於簡單查詢來說,其效能量級是毫秒,對於百萬級別的行數來說,其效能量級是秒。
Phoenix通過以下方式使我們可以少寫程式碼,並且效能比我們自己寫程式碼更好:
將SQL編譯成原生的HBase scans。
確定scan關鍵字的最佳開始和結束
讓scan並行執行
二、phoenix下載
2、點選連線<官網下載>下載
三、安裝phoenix
1、解壓
$ tar -zxf apache-phoenix-4.8.0-HBase-0.98-bin.tar.gz -C ../modules/
2、 與hbase整合
1)、將phoenix安裝目錄下的
phoenix-4.8.0-HBase-0.98-client.jar
phoenix-core-4.8.0-HBase-0.98.jar
拷貝到hbase的lib目錄下
2)、將hbase/conf目錄下 hbase-site.xml
四、啟動phoenix
首先:zookeeper 程序需要開啟
$ bin/zkServer.sh start
其次:hadoop 的程序需要開啟
$ bin/start-dfs.sh
再次:hbase 的需要重啟
$ bin/start-hbase.sh
最後: 在Phoenix資料夾下執行,指定zk的地址作為hbase的訪問入口:
bin/sqlline.py [hostname]:2181
進入Phoenix命令列,執行
!tables
注意:第一次啟動可能需要1分多鐘的時間,之後就會很快,主要是在hbase中做了一些初始化工作,會建立以下3張表
SYSTEM.CATALOG
SYSTEM.SEQUENCE
SYSTEM.STATS
使用命令 !help 可以顯示phoenix用法,下面是部分
如果 出現 import argparse這個錯誤:
需要安裝:$ sudo yum -y install python-argparse
五、測試
1、在show databases以及show tables是不支援的
2、-》!tables檢視有什麼表,hbase裡面也會有phoenix的系統表
3、在phoenix中建立表
create table user(
id varchar primary key,
name varchar,
password varchar
);
1)、在hbase中是區分大小寫的,在phoenix中不區分大小寫,但是預設都是大寫,加上雙引號就是小寫
2)、在hbase中desc "USER" 發現對映過來的表列簇預設是0,NAME => '0'
3)、重新建立,指定列簇與列
drop table user;
create table user(
id varchar primary key,
info.name varchar,
info.password varchar
);
4、新增資料:updata+insert結合--》upsert
upsert into user(id,name,password) values('001','admin','admin');
upsert into user(id,name,password) values('002','admin','admin');
5、查詢資料:
select * from user;
6、刪除資料:
delete from user where id='002';
在phoenix中的client介面中進行的crud操作,與RDBMS的操作沒有太大的區別7、hbase與phoenix表與表之間進行關聯
將hbase中的表對映到phoenix
create table "stu_info"(
rowkey varchar primary key,
info"."name" varchar,
"info"."age" varchar,
"info"."sex" varchar,
"degree"."xueli" varchar,
"work"."job" varchar
);
缺陷:hbase中的欄位型別都是String型別,所以,phoenix中的對映表都得是 varchar型別為好六、在Java專案中整合Phoenix
在Java專案中實現Phoenix操作Hbase,maven引入Phoenix的依賴包:
<dependency>
<groupId>org.apache.phoenix</groupId>
<artifactId>phoenix-core</artifactId>
<version>4.8.0-HBase-0.98</version>
</dependency>
但是引入這個包是不夠的,還需要另外引入一個依賴包
phoenix-4.8.0-HBase-0.98-client.jar
,這個依賴包可以在Phoenix檔案中找到,也可以通過下載Phoenix原始碼,自行編譯後匯入,自此就可以通過java的JDBC訪問操作Hbase。
java測試的原始碼如下:
public static void main(String args[]) {
Connection connection = null;
Statement statement = null;
try {
Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");
connection = DriverManager.getConnection("jdbc:phoenix:master:2181","","");
statement = connection.createStatement();
statement.execute("upsert into yinxiang_note values (3, 'note of huhong')");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
connection.close();
statement.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}