一、Phoenix简介
Phoenix是一个HBase的开源SQL引擎。你可以使用标准的JDBC API代替HBase客户端API来创建表,插入数据,查询你的HBase数据。
Phoenix是构建在HBase之上的SQL引擎。你也许会存在“Phoenix是否会降低HBase的效率?”或者“Phoenix效率是否很低?”这样的疑虑,事实上并不会,Phoenix通过以下方式实现了比你自己手写的方式相同或者可能是更好的性能(更不用说可以少写了很多代码):
编译你的SQL查询为原生HBase的scan语句
检测scan语句最佳的开始和结束的key
精心编排你的scan语句让他们并行执行
让计算去接近数据通过
推送你的WHERE子句的谓词到服务端过滤器处理
执行聚合查询通过服务端钩子(称为协同处理器)
除此之外,Phoenix还做了一些有趣的增强功能来更多地优化性能:
实现了二级索引来提升非主键字段查询的性能
统计相关数据来提高并行化水平,并帮助选择最佳优化方案
跳过扫描过滤器来优化IN,LIKE,OR查询
优化主键的来均匀分布写压力
二、下载CDH版Phoenix
1、下载
https://github.com/chiastic-security/phoenix-for-cloudera/tree/4.8-HBase-1.2-cdh5.8
2、编译(编译时间较长,耐心等待)
mvn clean package -DskipTests
3、解压
将编译好的phoenix-4.8.0-cdh5.8.0.tar.gz解压出来
[root@master1 phoenix]#tar -zxvf phoenix-4.8.0-cdh5.8.0.tar.gz
[root@master1 phoenix]# cd phoenix-4.8.0-cdh5.8.0
[root@master1 phoenix-4.8.0-cdh5.8.0]# ll
total 166152
drwxr-xr-x 2 root root 4096 Apr 18 16:41 bin
-rw-r--r-- 1 root root 1930 Aug 8 2016 build.txt
drwxr-xr-x 3 root root 4096 Aug 8 2016 dev
drwxr-xr-x 2 root root 4096 Aug 8 2016 docs
drwxr-xr-x 3 root root 4096 Aug 8 2016 examples
drwxr-xr-x 2 root root 4096 Apr 18 16:40 lib
-rw-r--r-- 1 root root 113247548 Apr 18 14:43 phoenix-4.8.0-cdh5.8.0-client.jar
-rw-r--r-- 1 root root 6619716 Apr 18 14:30 phoenix-4.8.0-cdh5.8.0-queryserver.jar
-rw-r--r-- 1 root root 22498517 Apr 18 14:43 phoenix-4.8.0-cdh5.8.0-server.jar
-rw-r--r-- 1 root root 27739579 Apr 18 14:29 phoenix-4.8.0-cdh5.8.0-thin-client.jar
4、将phoenix-4.8.0-cdh5.8.0-server.jar拷贝到每一个RegionServer下
[root@slave1 ~]# find / -name 'phoenix-4.8.0-cdh5.8.0-server.jar'
/soft/bigdata/clouderamanager/cloudera/parcels/CDH-5.10.0-1.cdh5.10.0.p0.41/lib/hbase/lib/phoenix-4.8.0-cdh5.8.0-server.jar
5、增加hbase-site.xml 配置
<property>
<name>hbase.table.sanity.checks</name>
<value>false</value>
</property>
CDH修改方法:
在集群管理页面点击Hbase,进入Hbase管理界面
点击配置
选择高级
增加如下配置
6、重启Hbase
7、登录phoenix
进入phoenix-4.8.0-cdh5.8.0/bin目录执行
[root@master1 phoenix-4.8.0-cdh5.8.0]# cd /soft/phoenix/phoenix-4.8.0-cdh5.8.0/bin/
[root@master1 bin]# ll
total 140
-rwxr-xr-x 1 root root 32440 Aug 8 2016 daemon.py
-rwxr-xr-x 1 root root 1881 Aug 8 2016 end2endTest.py
-rw-r--r-- 1 root root 1621 Aug 8 2016 hadoop-metrics2-hbase.properties
-rw-r--r-- 1 root root 3056 Aug 8 2016 hadoop-metrics2-phoenix.properties
-rw-r--r-- 1 root root 1084 Aug 8 2016 hbase-site.xml
-rw-r--r-- 1 root root 2583 Aug 8 2016 log4j.properties
-rwxr-xr-x 1 root root 5128 Aug 8 2016 performance.py
-rwxr-xr-x 1 root root 3249 Aug 8 2016 pherf-cluster.py
-rwxr-xr-x 1 root root 2729 Aug 8 2016 pherf-standalone.py
-rwxr-xr-x 1 root root 9354 Aug 8 2016 phoenix_utils.py
-rw-r--r-- 1 root root 6082 Apr 18 16:41 phoenix_utils.pyc
-rwxr-xr-x 1 root root 2739 Aug 8 2016 psql.py
-rwxr-xr-x 1 root root 7659 Aug 8 2016 queryserver.py
-rw-r--r-- 1 root root 1820 Aug 8 2016 readme.txt
-rwxr-xr-x 1 root root 4315 Aug 8 2016 sqlline.py
-rwxr-xr-x 1 root root 5426 Aug 8 2016 sqlline-thin.py
-rw-r--r-- 1 root root 6895 Aug 8 2016 tephra
-rwxr-xr-x 1 root root 2037 Aug 8 2016 tephra-env.sh
-rwxr-xr-x 1 root root 6884 Aug 8 2016 traceserver.py
[root@master1 bin]# ./sqlline.py slave1:2181
Setting property: [incremental, false]
Setting property: [isolation, TRANSACTION_READ_COMMITTED]
issuing: !connect jdbc:phoenix:slave1:2181 none none org.apache.phoenix.jdbc.PhoenixDriver
Connecting to jdbc:phoenix:slave1:2181
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/soft/phoenix/phoenix-4.8.0-cdh5.8.0/phoenix-4.8.0-cdh5.8.0-client.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/soft/bigdata/clouderamanager/cloudera/parcels/CDH-5.10.0-1.cdh5.10.0.p0.41/jars/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
17/04/18 20:48:14 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Connected to: Phoenix (version 4.8)
Driver: PhoenixEmbeddedDriver (version 4.8)
Autocommit status: true
Transaction isolation: TRANSACTION_READ_COMMITTED
Building list of tables and columns for tab-completion (set fastconnect to true to skip)...
264/264 (100%) Done
Done
sqlline version 1.1.9
0: jdbc:phoenix:slave1:2181>
8、简单测试
三、squirrel安装(windows上phoneix可视化工具)
1、下载
下载地址:http://www.squirrelsql.org/
下载所需版本
2、安装
cmd进入命令行
在jar包存放路径下输入
java -jar squirrel-sql-snapshot-20170312_2141-standard.jar
一路next就安装完毕
3、配置连接phoneix
在squirrel的lib下添加几个jar包
双击squirrel安装目录下squirrel-sql.bat
点击Drivers然后点击+号
Name自己起,填写url,
class name填写org.apache.phoenix.jdbc.PhoenixDriver
然后点击OK
点击Aliases,然后点击+号
Name自己起,选择刚才配置的Driver
点击OK连接成功
就可以看到phoenix的table了