1. 程式人生 > >phoenix(鳳凰)與hbase整合

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的bin目錄下

四、啟動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();
            }
        }
    }