http://www.weixuehao.com/archives/111

HBase,一个NoSQL数据库,可存储大量非关系型数据。

HBase,可以用HBase shell进行操作,也可以用HBase Java api进行操作。HBase虽然是一个数据库,但是它的查询语句,很不太好用。要是能像使用Mysql等关系型数据库一样用sql语句操作HBase,那就很Perfect了。

现有工具有很多Hive,Tez,Impala,Shark/Spark,Phoenix等。今天主要记录Phoenix。

phoenix,由saleforce.com开源的一个项目,后又捐给了Apache。它相当于一个Java中间件,帮助开发者,像使用jdbc访问关系型数据库一些,访问NoSql数据库HBase。

phoenix,操作的表及数据,存储在hbase上。phoenix只是需要和Hbase进行表关联起来。然后再用工具进行一些读或写操作。

其实,可以把Phoenix只看成一种代替HBase的语法的一个工具。虽然可以用java可以用jdbc来连接phoenix,然后操作HBase,但是在生产环境中,不可以用在OLTP(在线事务处理)中。在线事务处理的环境中,需要低延迟,而Phoenix在查询HBase时,虽然做了一些优化,但延迟还是不小。所以依然是用在OLAP(联机分析处理)中,再将结果返回存储下来。

Phoenix官网上,对Phoenix讲解已经很屌了。如果英语好,可以看官网,更正式一些。

phoenix能干嘛:官网很多描述,总结一句,就是方便操作了。其他的,没有多少优势。

phoenix不能干嘛:

①不支持事务处理

②不支持复杂的条件

③表之间的关联操作

Phoenix安装

1、下载phoenix。

phoenix与HBase版本对应关系

Phoenix 2.x – HBase 0.94.x

Phoenix 3.x – HBase 0.94.x

Phoenix 4.x – HBase 0.98.1+

我目前测试使用版本概况:

Hadoop1.0.4

HBase0.94.18

所以我可以用phoenix2.x,phoenix3.x。

官网download页面有

我选用的是phoenix3.1.0版本。

2、上传到主节点linux就ok了,解压缩

tar –zxvf phoenix.tar.gz

pwd

/root/phoenix

ll phoenix

phoenix目录结构可能会有点不同,主要是bin目录的位置,可能在hadoop1下,也可能直接在 /root/phoenix下。没关系,都差不多。

3、拷贝一些文件

既然用的hadoop1.x集群,那么我们使用phoenix目录下,hadoop1目录下的内容。

①将hadoop1下,phoenix-core-3.x.jar拷贝到hadoop集群各个节点HBase的lib目录下。

②重启一下HBase (在这里可以看出,用phoenix需要重启hbase,所以选择hbase查询工具时,需要考虑一下)

4、验证是否安成功

在主节点上,切换到/root/phoenix/hadoop1/bin目录下

输入:

./sqlline.py master:2181

如果出现这个画面,那就是成功了。如果不成功,可能是zookeeper配置的有一些问题吧。

好吧,先退出此界面,输入!quit回车然后就可以退出了。

这个phoenix挺有意思,有一些命令需要输入叹号的!

phoenix的使用

mysql的话,可以CLI命令行的方式操作;可以通过用jdbc,在Java代码中访问;可以通过用SQLyog进行访问管理;

1、phoenix,怎么用呢?~可以看成是mysql。

①Phoenix可以在CLI下操作;

②可以用jdbc操作;

③可以用phoenix的一个客户端工具Squirrel 访问;

2、先说Squirrel吧,这个简单一些。

Squirrel SQL Client,是一个连接数据库的客户端工具。一般支持JDBC的数据库都可以用它来连接。(如Squirrel连接Mysql)

下载Squirrel SQL Client,解压缩就可以了。运行

squirrel-sql.bat

就出现了图形界面。

3、这肯定要说怎样连Phoenix?

①在Squirrel安装目录的lib下,添加几个jar包

a, ?phoenix-core-xxx.jar

b, ?phoenix-3.0-client.jar

c, ?hbase-0.94.18.jar

d, ?hadoop1.0.4.jar

e, ?hadoop-common-xxx.jar

需要点击“Drivers”,将phoenix的驱动添加进去。

③点击左上角 蓝色的 “ + ” 加号,添加

按上面的顺序,依次填写。

第一步,Name:随便写个名字,标记连接;

第二步,Example URL:相当于mysql的jdbc连接串,这里的alias写zookeeper的主机名称,端口号,可以写,可以不写,我一般不写;

第三步,选择Phoenix-core的jar包;

第四步,就是手动输入org.apache.phoenix.jdbc.PhoenixDriver。

然后点击OK。

④配置连接

Name:为随便起的名称。

Driver:选中③中添加的phoenix驱动。

URL:写如上内容,jdbc:phoenix:node1,node2,master等这里主要是zookeeper主机名。

User Name:要连接的主机的用户名

Password:要连接的主机的密码

点击Test可以进行测试,或点OK连接。

连接完毕,启动后,就可以看到如下的效果了。这里我已经创建了几个表了,这些表都是存在于HBase上的。

4、Squirrel的一些布局简介(看上面这个图):

1,用squirrel建立的一些连接

2,当前连接下,所有对象,包括主见系统表,普通表,视图。

3,为表,这些表都是实际存在于zookeeper所管理的HBase上的。右键此表,可以对表进行管理。

4,为视图。

5,编写sql脚本的地方,可以输入脚本执行。脚本执行方式,在5上面有一个小人,选中sql,点击小人就可以执行了。或者按ctrl + enter键,执行。

6,为选中的对象的一些基本信息,列信息,行数等。

7,为sql执行的一些状态。

5、在Squirrel中建表或视图

在Squirrel中创建表的过程主要是编写sql,进行执行。sql该怎么写,需要看phoenix驱动都支持什么效果。

这需要看phoenix的官网了。

需要注意的是phoenix是区分大小写的;

自己定义的HBase中的 HTableName,ColumnFamily,以及字段Column,需要和Phoenix中保持一致。(最好都用大写)

phoenix操作hbase,我们有两种方式,创建表,创建视图。

这两种方式,有区别。

创建表的话,可读可写,就可以对HBase进行插入,查询,删除操作。

视图的话,是只读的,一般就只可以进行查询操作

虽然看起来,表的功能,比视图更强大一些。但是就像是mysql等关系型数据库一样,删除表操作,会将表删掉。但是删除视图操作,却不会影响原始表的结构。

因为使用phoenix,创建表后,会自动和hbase建立关联映射。当你使用phoenix删除和hbase之间的关系时,就会将hbase中的表也删掉了

所以用视图,会对原始的HBase表影响小一些。

6、用phoenix可以创建表

(1)若hbase中,不存在名为htablename或htablename2的HTable:

1
2
3
4
5
6
create htablename(
    pk VARCHAR primary key not null,
    col1 VARCHAR null,
    col2 VARCHAR null,
    col3 VARCHAR null
)

1
2
3
4
5
6
7
create htablename2(
    pk VARCHAR primary key null,
    "cf"."col1" VARCHAR null,
    "cf"."col2" VARCHAR null,
    "cf2"."col3" VARCHAR null,
    "cf2"."col4" VARCHAR null
)

在SQuirreL中执行上面的SQL脚本,执行过程中,如果出现错误,会在工具的下面进行提示。

若成功后,就可以在HBase中看到这个表了,而且在SQuirrel中,看到此表。

(2)若hbase存在htablename3,但SQuirrel中看不到时

当安装好SQuirrel时,本以为连上hbase后,就可以在SQuirrel中看到hbase中的表了。但是并没有看到,也不会显示。

如果要想看到hbase中已存在的表,还需要一些操作。

也就是如果想要在SQuirrel中,看到htablename3,且想要对htablename3进行操作。

也还是需要在SQuirreL中进行执行创建表的操作,执行完毕后,就会将HBase的htablename3,映射到SQuirreL中。

这样我们就可以在Java api中进行操作了。否则是不可以的。

那么需要哪些具体操作呢?其实很简单,我当时没想到

就像创建表一样,使用Create table就可以了。就这样简单。

不过这个语句怎么写呢?怎样对应呢?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
create htablename3(
    --这句话直接写就可以了,这样的话,HBase中的RowKey转换成phoenix中的主键,列名就叫 pk。
    --rowkey自动会和primary key进行对应。
    pk VARCHAR primary key null,
    --将名为cf的columnFamily下,字段名为col1的字段,写在这里。
    "cf"."col1" VARCHAR null,
    --将名为cf的columnFamily下,字段名为col2的字段,写在这里。。。下面就以此类推
    "cf"."col2" VARCHAR null,
    "cf2"."col3" VARCHAR null,
    "cf2"."col4" VARCHAR null
)

然后在SQuirreL中执行,然后就可以看到数据了。

不过此时,可能还会有问题,乱码。 在SQuirrel中,主键以及一些包含汉字的字段,都是方块等乱码了。这个怎么解决???(暂未解决)

7、用phoenix可以创建视图

假如,要对刚刚创建的表htablenameX创建视图操作

CREATE ?VIEW ?”htablenameX” ? (pk VARCHAR primary key) ? default_column_family = ‘FM’

创建完成后,这里的“htablenameX” 是HBase中table “htablenameX”的名称。然后定义一个主键,就可以了。

可能还不太清楚,看下面

(1)第一种视图,假如HBase中存在表”DAMAI”,需要以视图的方式,操作它,那么开始创建视图

CREATE VIEW “DAMAI” ( PK VARCHAR PRIMARY KEY) DEFAULT_COLUMN_FAMILY=’FM’

这里双引号内的 “DAMAI” 和HBase中的表名是一样的,所以会自动关联。

会自动对应表名,自动关联字段。

这里需要注意:创建视图时,要保证在SQuirrel工具中,没有相同名称的表存在。

那么,如果想针对HBase中的一个表,建多个视图呢?慢慢来

(2)第二种视图,可以在Phoenix table的基础上创建

CREATE VIEW my_VIEW (new_col VARCHAR,new_col2 VARCHAR) AS SELECT * FROM phoenix_TableWHERE ……

也就是,原来在phoenix中,已经创建了表了。

例如:htablename2。在htablename2上建立一个视图,叫”mingzisuibian” ?(名字随便)

CREATE VIEW mingzisuibian ( new_col VARCHAR, new_col2 ?VARCHAR ) ?AS SELECT * FROM htablename2?WHERE ….(针对htablename2的查询条件)

(3)第三种建视图的方式,是在视图之上建立视图

CREATE VIEW my_VIEW_ON_VIEW AS SELECT * FROM MY_VIEW WHERE ……

在(1)中,我们创建了一个视图 “DAMAI”。这里面包括了全部的字段。

所以说,在创建DAMAI视图的时候,可以将全部字段都包括进来。

所以,我们可以在DAMAI这个视图之上,创建其它视图,这样视图的名称,就可以随便定了。

例如:

CREATE VIEW BIGBIG AS SELECT * FROM DAMAI?WHERE ……

不断往hbase中,添加数据,随着数据的增长,在phoenix建的视图中也可以看到的数据的条数,在同步增加。

综上所述,从上面可以看出,为了避免影响hbase的表信息,最好是创建一个视图。然后在视图的基础上,再创建其它视图。

也就是,先执行视图里面的(1),再执行视图里面的(3)。

推荐阅读,系列文章:

在SQuirrel中使用Phoenix操作HBase——创建表和视图

在SQuirrel中使用Phoenix操作HBase——基本的sql查询

用SHELL命令来操作phoenix

使用用Phoenix的Java api操作HBase

在SQUIRREL中使用PHOENIX操作HBASE——创建表和视图相关推荐

  1. SpringBoot 使用Phoenix操作HBase数据库教程

    SpringBoot 使用Phoenix操作HBase数据库教程 文章目录 添加 Phoenix 相关依赖 控制器实现Hbase数据库操作 好的html源码下载 文章目录 借助 Apache Phoe ...

  2. 客快物流大数据项目(四十四):Spark操作Kudu创建表

    Spark操作Kudu创建表 Spark与KUDU集成支持: DDL操作(创建/删除) 本地Kudu RDD Native Kudu数据源,用于DataFrame集成 从kudu读取数据 从Kudu执 ...

  3. python 笔记 之 sqlalchemy操作数据库-创建表

    2019独角兽企业重金招聘Python工程师标准>>> ''' pip install SQLAlchemy 操作数据库-创建表 ''' import sqlalchemy''' s ...

  4. abap视图字段限制_创建表维护视图(SE54)

    在SAP中,很多自定义数据库表需要人工维护数据库表中的数据,大多数的情况下通过SE16或SE16N维护,而是为表创建一个表维护视图来维护数据.下面详细介绍一下如果创建表维护视图. 1, 前提条件 首先 ...

  5. springboot集成phoenix,操作hbase

    文章目录 前言 1.版本要求 1.1 对hbase版本的支持 2.微服务集成 2.1 创建gradle项目,添加依赖 2.2 application.yml配置 2.3 准备调试环境 2.3.1 服务 ...

  6. Java 操作Hbase 建表

    参考文档:感谢博主的分享作者:DaleyZou https://www.cnblogs.com/daleyzou/p/8668727.htmlstatic Configuration config = ...

  7. mysql中create使用_mysql怎么创建表之create用法

    mysql的基础,创建一个表,但是高手和菜鸟就会有区别,合适的字段,字段描述,索引等细节很能体现一个程序员的水平,下面介绍用create创建表 在mysql数据库中不管我们是通过导入还是其它的工具创建 ...

  8. 如何解决SQL Server 2008 R2中“阻止保存要求重新创建表的更改”的问题!

    今天在讲解SQL Server 2008  R2课程中,有学生遇到一个问题,在SQL Server 2008  R2管理控制台中创建一个新表后,如果再次打开该表进行修改保存时,发现对每个表的修改都不成 ...

  9. MFC中使用sqlite3操作数据库 创建,插入数据,查询数据

    需要用到的文件有sqlite3.h .sqlite3.dll.sqlite3.lib.网上很多人分享下载地址这里不再赘述. 将这三个文件拷贝到自己新建MFC项目目录下,在解决方案窗口下 添加现有项,选 ...

  10. 图形化界面客户端连接phoenix操作hbase

    下载客户端软件 DBeaver https://dbeaver.io/download/ 选择对应系统的版本,我这里选择解压版windows64位 创建连接 注意:URL模板就不要一般是默认 选择合适 ...

最新文章

  1. Supplier接口练习之获取最大值
  2. 用eclipse往mysql插入中文出现乱码解决方法
  3. 第三十三期:连接池中非常关键的两个参数,到底是干啥用的?
  4. 苹果上新了!新款iPad Pro发布:妙控键盘成最大惊喜
  5. linux Apache启动提示 httpd: apr_sockaddr_info_get() failed f
  6. Vite 配置项目别名-最新版
  7. [.NET] 《Effective C#》快速笔记(四)- 使用框架
  8. 微软Whitehorse modeler的背后
  9. 【React】react实现前端播放m3u8格式视频
  10. idea 安装 jclasslib 插件
  11. 阻抗分析仪(LCR表)与矢量网络分析仪
  12. 1:0 本立而道生!
  13. 一条机器“龙”,堪称史上最快异形机器人!
  14. JavaScript中实现键值对的方法
  15. 【CVPR 2021】Cylinder3D:用于LiDAR点云分割的圆柱体非对称3D卷积网络
  16. Berzerk CodeForces - 787C (BFS)题解
  17. 2018首届传神者大会:“语言+新技术”将推动语言产业生态化发展 2018首届传神者大会圆满落幕,...
  18. 有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒, 所有在场的人平分喝下,有几个人倒下了。再打开一瓶酒平分,又有倒下的, 再次重复...... 直到开了第4瓶酒,坐着的
  19. UltraISO软碟通制作U盘启动盘
  20. np.quantile()详解

热门文章

  1. SQL2008系统统计函数
  2. .net学习笔记图片链接20060523
  3. 原创 leetcode[349]两个数组的交集/ Intersection of Two Arrays 哈希策略
  4. Sketch中文版教程,已加星标的更新如何使用?什么是Sketch星标功能?
  5. 苹果Mac记事本中快速计算应用:Soulver
  6. fcpx教程从入门到精通「4」检查器窗口的认识
  7. 如何在 macOS Monterey 上自定义光标?
  8. Battery Health 3 for Mac(电池健康管理工具)
  9. 玛雅三维动画制作Maya 2022 for Mac
  10. Photo Size Changer三步压缩太大的jpg照片