使用 Phoenix-4.11.0連線 Hbase 叢集 ,並使用 JDBC 查詢測試

搜雲庫技術團隊發表於2017-09-21

什麼是 Phoenix ?

Apache Phoenix 是執行在Hbase之上的高效能關係型資料庫,通過Phoenix可以像使用jdbc訪問關係型資料庫一樣訪問hbase。

Phoenix,操作的表以及資料儲存在hbase上。phoenix只需要和hbase進行表關聯。然後在用工具進行一些讀寫操作。

可以把Phoenix 只看成一種代替Hbase語法的工具。雖然Java可以用jdbc來連線phoenix,然後操作hbase,但是在生產環境中,不可以用OLTP中。

phoenix在查詢hbase時,雖然做了一些優化,但是延遲還是不小。所以依然用在OLAT中,在將結果返回儲存下來。

準備工作

環境

JDK:1.8  
Hadoop Release:2.7.4  
centos:7.3  

node1(master)  主機: 192.168.252.121  
node2(salve)  從機: 192.168.252.122  
node3(salve)  從機: 192.168.252.123  

node4(ZooKeeper)  主機: 192.168.252.124
複製程式碼

依賴環境

Hadoop

Hadoop-2.7.4 叢集快速搭建

HBase

HBase-1.3.1 叢集搭建

安裝

下載解壓

在 ndoe1 上操作

su hadoop
cd /home/hadoop/
wget https://mirrors.tuna.tsinghua.edu.cn/apache/phoenix/apache-phoenix-4.11.0-HBase-1.3/bin/apache-phoenix-4.11.0-HBase-1.3-bin.tar.gz
tar -zxvf apache-phoenix-4.11.0-HBase-1.3-bin.tar.gz
mv apache-phoenix-4.11.0-HBase-1.3-bin phoenix-4.11.0
複製程式碼

配置 Phoenix

複製 JAR

進入 /phoenix-4.11.0 檔案目錄

cd /home/hadoop/phoenix-4.11.0/
複製程式碼

把兩個 jar 包 phoenix-4.11.0-HBase-1.3-client.jar,phoenix-core-4.11.0-HBase-1.3.jar 拷貝至 Hbase/lib資料夾。

cp phoenix-4.11.0-HBase-1.3-client.jar /home/hadoop/hbase-1.3.1/lib/
cp phoenix-core-4.11.0-HBase-1.3.jar /home/hadoop/hbase-1.3.1/lib/
複製程式碼

複製 base-site.xml

進入 Hbase conf配置目錄

cd /home/hadoop/hbase-1.3.1/conf/
複製程式碼

把 Hbase 的配置檔案 base-site.xml拷貝至 Phoenix 根目錄中的 /bin 資料夾下到此就完成了配置。

cp hbase-site.xml /home/hadoop/phoenix-4.11.0/bin
複製程式碼

配置叢集

複製節點

將 phoenix-4.11.0資料夾重打包後複製到其他子節點

cd /home/hadoop/
複製程式碼
tar zcvf phoenix.tar.gz phoenix-4.11.0
scp phoenix.tar.gz hadoop@node2:/home/hadoop/
scp phoenix.tar.gz hadoop@node3:/home/hadoop/
複製程式碼

在 node2,node3 節點解壓

cd /home/hadoop/
tar -zxvf phoenix.tar.gz
複製程式碼

進入 node2,node3 節點 phoenix-4.11.0 檔案目錄

cd /home/hadoop/phoenix-4.11.0/
複製程式碼

把兩個 jar 包 phoenix-4.11.0-HBase-1.3-client.jar,phoenix-core-4.11.0-HBase-1.3.jar 拷貝至 Hbase/lib資料夾。

cp phoenix-4.11.0-HBase-1.3-client.jar /home/hadoop/hbase-1.3.1/lib/
cp phoenix-core-4.11.0-HBase-1.3.jar /home/hadoop/hbase-1.3.1/lib/
複製程式碼

啟動

cd /home/hadoop/phoenix-4.11.0/bin
複製程式碼
./sqlline.py 192.168.252.124:2181
複製程式碼

如果看到如下資訊,證明,配置沒毛病

Setting property: [incremental, false]
Setting property: [isolation, TRANSACTION_READ_COMMITTED]
issuing: !connect jdbc:phoenix:node4:2181 none none org.apache.phoenix.jdbc.PhoenixDriver
Connecting to jdbc:phoenix:node4:2181
17/09/21 13:58:09 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Connected to: Phoenix (version 4.11)
Driver: PhoenixEmbeddedDriver (version 4.11)
Autocommit status: true
Transaction isolation: TRANSACTION_READ_COMMITTED
Building list of tables and columns for tab-completion (set fastconnect to true to skip)...
92/92 (100%) Done
Done
sqlline version 1.2.0
0: jdbc:phoenix:node4:2181>
複製程式碼

命令列測試

建立表

create table test (mykey integer not null primary key, mycolumn varchar);
複製程式碼

增加,修改表資料

upsert into test values (1,'Hello');
upsert into test values (2,'www.ymq.io');
複製程式碼

查詢表資料

select * from test;
複製程式碼

響應

+--------+-------------+
| MYKEY  |  MYCOLUMN   |
+--------+-------------+
| 1      | Hello       |
| 2      | www.ymq.io  |
+--------+-------------+
2 rows selected (0.083 seconds)
複製程式碼

刪除表

drop table test;
複製程式碼

常用命令

!tables		#檢視錶
!exit 		#退出phoenix
create table、drop table、desc table
複製程式碼

phoenix 語法

phoenix.apache.org/language/in…

JDBC 測試

github-原始碼:https://github.com/souyunku/ymq-example/tree/master/ymq-example/ymq-apache-phoenix

public static void main(String[] args) throws Throwable {

	try {

		Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");

		//這裡配置zookeeper的地址,可單個,多個(用","分隔)可以是域名或者ip

		String url = "jdbc:phoenix:node4:2181";

		Connection conn = DriverManager.getConnection(url);

		Statement statement = conn.createStatement();

		long time = System.currentTimeMillis();

		ResultSet rs = statement.executeQuery("select * from test");

		while (rs.next()) {
			String myKey = rs.getString("MYKEY");
			String myColumn = rs.getString("MYCOLUMN");

			System.out.println("myKey=" + myKey + "myColumn=" + myColumn);
		}

		long timeUsed = System.currentTimeMillis() - time;

		System.out.println("time " + timeUsed + "mm");

		// 關閉連線
		rs.close();
		statement.close();
		conn.close();

	} catch (Exception e) {
		e.printStackTrace();
	}
}
複製程式碼

響應

myKey=1myColumn=Hello
myKey=2myColumn=www.ymq.io
time 127mm
複製程式碼

如果有報錯,請參考,反正我是沒報錯 www.cnblogs.com/huxinga/p/6…

Contact

  • 作者:鵬磊
  • 出處:www.ymq.io
  • Email:admin@souyunku.com
  • 版權歸作者所有,轉載請註明出處
  • Wechat:關注公眾號,搜雲庫,專注於開發技術的研究與知識分享

關注公眾號-搜雲庫
搜雲庫

相關文章