phoenix使用详解

  • 一、phoenix是什么
  • 二、phoenix架构
  • 三、phoenix表与hbase表对应关系
  • 四、phoenix基本语法
  • 五、phoenix加盐表
  • 六、phoenix二级索引
  • 七、phoenix使用注意点
  • 八、java应用使用phoenix
  • 九、phoenix连接工具

一、phoenix是什么

我前面文章说过一个观点:“懒人改变世界”,phoenix的出现也验证来它的准确性。
phoenix和hive类似,它也是一个工具,hive是在hadoop之上,phoenix是在hbase之上,也是Apache基金的顶级项目。
phoenix是构建在HBase上的一个SQL层,能让我们用标椎的JDBC APIs而不是HBase客户端APIs来创建表、和对HBase数据进行CRUD。
Phoenix完全使用java编写,作为HBase内嵌的JDBC驱动,Phoenix查询引擎会将SQL查询转换为一个或多个HBase扫描(Scan),并编排执行以生成标椎的JDBC结果集。
Phoenix通过以下方式减少我们的代码量,提高生产效率,并且性能比我们自己写代码更好:
1、将SQL编译成原生的HBase scan;
2、确定scan关键字的最佳开始和结束;
3、让scan并行执行。

二、phoenix架构

架构图:

phoenix架构图如上,我们应用通过phoenix驱动通过jdbc方式连接Hbase,其中phoenix驱动会用到hbase的client。phoenix把我们熟知的sql编译转换成hbase原生的shell语法,再通过hbase client去访问hbase,后续到了hbase的流程可参考我前面文章《HBase详解》的介绍。

三、phoenix表与hbase表对应关系

默认情况下,直接在hbase中创建的表,通过phoenix是查看不到的。
如果要在phoenix中操作由hbase创建的表,则需要在phoenix中进行表的映射。
映射方式有两种:视图映射和表映射

假设Hbase中已创建表test,test有两个列簇name、company

视图映射:
Phoenix创建的视图是**【只读】**的,只能用来做查询,无法通过视图对源数据进行修改等操作。

 create view "test"(empid varchar primary key,"name"."firstname" varchar,"name"."lastname" varchar,"company"."name" varchar,"company"."address" varchar);

表映射
(1)、把create view改为create table即可
(2)、当HBase中不存在表时,使用create table指令创的表,系统将会自动在Phoenix和HBase中创建表,并会根据指令内的参数对表结构进行初始化。

create table "test"(empid varchar primary key,"name"."firstname" varchar,"name"."lastname" varchar,"company"."name" varchar,"company"."address" varchar
);

四、phoenix基本语法

!table查看表信息
!describe tablename可以查看表字段信息
SELECT

SELECT * FROM TEST where colum = '123' LIMIT 10 OFFSET 10;

UPSERT VALUES

UPSERT INTO TEST(NAME,ID) VALUES('foo',123);

UPSERT SELECT

UPSERT INTO test.targetTable(col1, col2) SELECT col3, col4 FROM test.sourceTable WHERE col5 < 100

DELETE

DELETE FROM TEST WHERE ID=123;

CREATE TABLE

CREATE TABLE my_schema.my_table ( id BIGINT not null primary key, date Date)

DROP TABLE

DROP TABLE my_schema.my_table;

ALTER

ALTER TABLE my_table ADD dept_name char(50);

CREATE INDEX

CREATE INDEX my_idx ON sales.opportunity(last_updated_date DESC)
CREATE INDEX my_idx ON log.event(created_date DESC) INCLUDE (name, payload) SALT_BUCKETS=10

DROP INDEX

DROP INDEX my_idx ON sales.opportunity

phoenix字段类型

类型 java 类型 长度
INTEGER java.lang.Integer -2147483648 to 2147483647
UNSIGNED_INT java.lang.Integer 0 to 2147483647
BIGINT java.lang.Long -9223372036854775807 to 9223372036854775807
UNSIGNED_LONG java.lang.Long 0 to 9223372036854775807
TINYINT java.lang.Byte -128 to 127
UNSIGNED_TINYINT java.lang.Byte 0 to 127
SMALLINT java.lang.Short -32768 to 32767
UNSIGNED_SMALLINT java.lang.Short 0 to 32767
FLOAT java. lang.Float -3.402823466 E + 38 to 3.402823466 E + 38
UNSIGNED_FLOAT java.lang.Float -3.402823466 E + 38 to 3.402823466 E + 38
DOUBLE java.lang.Double -1.7976931348623158 E+308 to 1.7976931348623158 E+308
UNSIGNED_DOUBLE java.lang.Double 0 to 1.7976931348623158 E + 308
DECIMAL java.math.BigDecimal 38 digits
BOOLEAN java.lang.Boolean
TIME java.sql.Time
DATE java.sql.Date
TIMESTAMP java.sql.Timestamp
UNSIGNED_TIME java.sql.Time
UNSIGNED_DATE java.sql.Date
UNSIGNED_TIMESTAMP java.sql.Timestamp
VARCHAR( precisionInt ) java.lang.String
CHAR ( precisionInt ) java.lang.String
BINARY ( precisionInt ) byte[]
VARBINARY byte[]

五、phoenix加盐表

1. 什么是加盐?
在密码学中,加盐是指在散列之前将散列内容(例如:密码)的任意固定位置插入特定的字符串。其作用是让加盐后的散列结果和没有加盐的结果不相同,在不同的应用情景中,这个处理可以增加额外的安全性。而Phoenix中加盐是指对pk对应的byte数组插入特定的byte数据。
2. 加盐的好处?
加盐能解决HBASE读写热点问题,例如:单调递增rowkey数据的持续写入,使得负载集中在某一个RegionServer上引起的热点问题。均匀划分region,均匀打散数据分布。

3. 怎么对表加盐?
在创建表的时候指定属性值:SALT_BUCKETS,其值表示所分buckets(region)数量, 范围是1~256。

CREATE TABLE table (key VARCHAR PRIMARY KEY, col VARCHAR) SALT_BUCKETS = 8;

4. 加盐的原理是什么?
加盐的过程就是在原来key的基础上增加一个byte作为前缀,计算公式如下:
new_row_key = (++index % BUCKETS_NUMBER) + original_key

5、加盐加多少好
加盐要是hbase节点数的倍数,最少是1倍(3个节点的就是3)
根据表数据量大小增加加盐数

六、phoenix二级索引

phoenix的二级索引是一个很好用的功能,解决了hbase没有索引的缺陷。我们创建了二级索引其实是在hbase额外建了一张表,该表数据无需我们维护,用phoenix自动维护。

七、phoenix使用注意点

1.select语句禁止全表扫描,一定要走主键索引或者二级索引,可用explain查看sql执行计划。我们可以巧妙合理的设计我们的主键。
2、使用主键索引查询时,where条件的顺序一定要和建表定义主键的顺序一致,要不然走不到主键索引。
3.使用二级索引只能查主键字段和创建索引是INCLUDE后面添加的字段,禁止查额外字段,因为查了其它字段就不会走到二级索引,是全表扫。非要查额外字段可以查两次,先查出主键,再根据主键去查。
4.建表和索引是最好都提前做加盐。

八、java应用使用phoenix

1.引入架包

<dependency><groupId>org.apache.phoenix</groupId><artifactId>phoenix-core</artifactId><version>phoenix版本</version>
</dependency>

2.phoenix连接
phoenix连接我们连接普通关系型数据库一样,可以使用阿里巴巴的连接池com.alibaba.druid.pool.DruidDataSource
驱动:org.apache.phoenix.jdbc.PhoenixDriver
连接串dbUrl为:jdbc:phoenix:zk1,zk2:2181/hbase,其中zk为Zookeeper的ip,2181为Zookeeper端口,/hbase要看我们hbase的配置选填

3.使用
可以和关系型库那样愉快的使用mybatis框架访问hbase数据.

九、phoenix连接工具

1、服务器官网下载好phoenix,进入bin目录执行如下命令即可进去phoenix,就可以使用phoenix命令操作了。

./sqlline.py zk1,zk2:2181/hbase

2、图形化界面工具
 DBeaver,SQuirrel等

更多phoenix相关内容请参考phoenix官网
http://phoenix.apache.org/

参考链接
https://blog.csdn.net/dz77dz/article/details/105784099
https://www.cnblogs.com/hbase-community/p/8727674.html

phoenix使用详解相关推荐

  1. phoenix中文详解

    https://www.cnblogs.com/linbingdong/p/5832112.html

  2. Phoenix的使用方式详解

    本篇博客小菌为大家分享的是关于Phoenix的使用方式与常用shell. 前文传送门:<Phoenix(凤凰)的安装介绍> Phoenix使用 先让我们来看看Phoenix的几种方法调用 ...

  3. 通俗易懂word2vec详解词嵌入-深度学习

    https://blog.csdn.net/just_so_so_fnc/article/details/103304995 skip-gram 原理没看完 https://blog.csdn.net ...

  4. bootloader详解(转载)

    一.bootloader介绍 bootloader是硬件在加电开机后,除BIOS固化程序外最先运行的软件,负责载入真正的操作系统,可以理解为一个超小型的os.目前在Linux平台中主要有lilo.gr ...

  5. 【NLP】Google BERT详解

    版权声明:博文千万条,版权第一条.转载不规范,博主两行泪 https://blog.csdn.net/qq_39521554/article/details/83062188 </div> ...

  6. 逆透视变换详解 及 代码实现(一)

    逆透视变换详解 及 代码实现(一) 中主要是原理的说明: 一.世界坐标轴和摄像机坐标轴 从下图中可以看到,世界坐标为(X,Y,Z)  相机坐标为(Xc,Yc,Zc) 而世界坐标变换到相机坐标存在一个旋 ...

  7. oracle通过dblink连接mysql配置详解(全Windows下)

    oracle通过dblink连接mysql配置详解(全Windows下) 关于oracle通过dblink连接mysql,经过了两周的空闲时间研究学习,终于配置好了,真是不容易啊,仔细想想的话,其实也 ...

  8. 万字HBase详解带你畅游大数据的海豚湾

    写在前面:我是「且听风吟」,目前是某上市游戏公司的大数据开发工程师,热爱大数据开源技术,喜欢分享自己的所学所悟,现阶段正在从头梳理大数据体系的知识,以后将会把时间重点放在Spark和Flink上面. ...

  9. 计算机bios设置论文,玩转电脑必看知识——各种BIOS设置详解 的更多相关文章

    7.IDE Primary Master UDMA(第一个IDE主控制器下的UDMA模式) 8.IDE Primary Slave UDMA(第一个IDE从控制器下的UDMA模式) 9.IDE Sec ...

最新文章

  1. gtkorphan清理孤立软件包
  2. 《JAVA练习题目4》 训练要点:String和StringTokenizer的使用,以及排序算法。
  3. python中if elif语句优化_python – 最有效的方式做一个if-elif-elif-else语句当else做的最多?...
  4. 一文让你明白Redis持久化 1
  5. fprintf,sprintf,sscanf,fscanf
  6. 编译器角度看C++复制构造函数
  7. netty系列之:netty中的Channel详解
  8. 编译器——指令的汇编
  9. CodeProject上的两个简单绘图程序
  10. UWB定位系统场景的分析
  11. “虚度”一下时光,给老友写封信
  12. Android Bottom Sheet详解
  13. [POJ 3311] Hie with the Pie
  14. eclipse鼠标变成十字架
  15. Django+Vue开发生鲜电商平台之11.首页、商品数量、缓存和限速功能开发
  16. 小米路由器忘记管理密码后重置密码
  17. 鼠标侧键设置工具X-Mouse安装教程
  18. 天顶围棋 8 zenith 8_2019年第九届世界围棋巅峰对决盛大启幕 安徽阜阳点燃黑白激情...
  19. 非CS专业的人如何学才能够像CS专业一样
  20. java数组字符串转数组或集合

热门文章

  1. ps入门第15天_运用路径工具绘制矢量图形_根据照片用路径画卡通
  2. 广东大爷10栋房收租,外卖小哥为5块钱崩溃大哭:成人世界是你想不到的心酸...
  3. 0x000007FEFD72A06D 处(位于 Opencv_Test.exe 中)引发的异常: Microsoft C++ 异常: cv::Exception
  4. 解决Eclipse中progress一直在右下角跳出来的问题
  5. 推荐好用的天气插件(天气网)
  6. 数据挖掘与机器学习:Weka
  7. 180220——折腾:U盘作启动盘安装win 7
  8. 网盘不限速下载神器,亲测可用,速度10MB/s以上!
  9. 汇编语言程序设计钱晓捷第五版期末复习参考
  10. 苹果Windows装oracle10,苹果MacBook安装Win10系统教程