最具影响力的数字化技术在线社区

168大数据

 找回密码
 立即注册

QQ登录

只需一步,快速开始

1 2 3 4 5
打印 上一主题 下一主题
开启左侧

[Hbase] HBase的SQL引擎(1)-Phoenix

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-5 16:21:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

主要是根据实际情况整合了网上的一些相关资料。

简介

Phoenix是构建在Apache HBase(列式大数据存储)之上的一个SQL中间层。Phoenix完全使用Java编写,代码 位于GitHub上,并且提供了一个客户端可嵌入的JDBC驱动。根据项目所述,Phoenix被Salesforce.com内部使用,对于简单的低延迟查询,其量级为毫秒;对于百万级别的行数来说,其量级为秒。Phoenix并不是像HBase那样用于map-reduce job的,而是通过标准化的语言来访问HBase数据的。根据项目创建者所述, 对于10M到100M的行的简单查询来说,Phoenix要胜过Hive。对于使用了HBase API、协同处理器及自定义过滤器的Impala与OpenTSDB来说,进行相似的查询Phoenix的速度也会更快一些。

一、版本

hadoop:hadoop 2.6.0-cdh5.10.0

Hive:hive-common-1.1.0-cdh5.10.0.jar

Hbase:hbase 1.2.0-cdh5.10.0

之前的Phoenix版本并不能很好的和HBase的CDH版本进行继承,要想使用Phoenix的话需要对其进行重新编译,但最近Phoenix发布了4.13.1-cdh5.11.2版本,经初步测试可以不进行修改直接用于cdh5.10.0版本。

二、下载安装

①下载地址:https://phoenix.apache.org/download.html , 版本:apache-phoenix-4.13.2-cdh5.11.2-bin.tar.gz,解压并上传到集群任一服务器,如slave02。

②在安装了Phoenix的服务器slave02上配置环境变量


③复制其中的phoenix-[version]-server.jar到所有 region server 和master上hbase/lib路径下

④将集群上的配置文件hbase-site.xml、 core-site.xml 、hdfs-site.xml放到phoenix-*/bin/下,替换Phoenix原来的配置文件。

⑤修改phoenix-*/bin/下的psql.py和sqlline.py两个文件的权限为777

命令:chmod 777 文件名

⑥看到如下信息,则安装成功


三、简单查询

①hbase表映射到phoenix

有两种映射方式,视图映射和表映射,表映射时需要注意对映射表进行的修改会反映到源表上,和hive一样,不同的是Phoenix删除映射表源表也会删除。视图映射则不会影响源表。

a. 表映射

例如:create table "tt" (pk varchar not null primary key,"c"."name" varchar,"c"."age" varchar);

表名、字段名称必须和hbase中的表一致,区分大小写,如果hbase中是小写的话,phoenix建表时需要加双引号。

b. 视图映射

和表映射写法类似:create view "t" (pk varchar not null primary key,"c"."name" varchar,"c"."age" varchar);

②关联

网上很多教程都说phoenix不支持关联查询,但现在使用的这个版本是支持的:

例如:select * from "t" a,"tt" b where a.pk=b.pk;


③插入or更新

phoenix中没有insert和update,合并成upsert。插入数据的字符串要用单引号括起来,用双引号会报错。

例如:upsert into "tt" values ('1_b_1','b','14');

四、安装SQuirrel

为了便于操作,安装phoenix的客户端GUI——SQuirrel

①下载地址:http://squirrel-sql.sourceforge.net/,版本:squirrel-sql-3.8.1-standard.jar 上传导集群

②双击安装,一路next,只有两个地方需要注意,一是选择安装路径,二是选择安装的包,有很多,可根据自己的需求选择。其他是否创建快捷方式随意。

③复制安装的 phoenix 中的phoenix-[version]-client.jar 到squirrel 的 lib 路径下,Windows 是双击 squirrel-sql.bat 启动 squirrel sql client。

④配置phoenix驱动程序



地址示例的格式构造 URL : jdbc:phoenix: zookeeper quorum server,默认端口2181是可选的,如果改了端口,必须要带上端口。添加的驱动程序就是上一步中复制的phoenix-[version]-client.jar 。成功界面如下:


⑤设置别名


名字、用户名密码都可以随便写,用户名密码可以为空。然后点击测试,成功后点击确定。

⑥点击连接,开始写SQL。



问题

1、数据量较大时,phoenix报错,如:


解决:

修改phoenix-*/bin/下的hbase-site.xml,增加或修改以下四个参数:

<property>
<name>hbase.client.scanner.timeout.period</name>
<value>600000</value>
</property>
<property>
<name>hbase.rpc.timeout</name>
<value>600000</value>
</property>
<property>
<name>phoenix.query.keepAliveMs</name>
<value>600000</value>
</property>
<property>
<name>phoenix.query.timeoutMs</name>
<value>600000</value>

</property>

重启phoenix客户端。

2、关联查询时,数据量超过100M,报错如下:


解决:

①增加或修改hbase-site.xml中的phoenix.query.maxServerCacheBytes 参数,改成更大的数值,默认是104857600bytes (100M)。

②phoenix默认的是hash join,需要将其中一张表放入内存,表很大时就会报这个错误,如果无法确定最大的表一定小于某个值,使用Sort-Merge Join比较方便。使用方法是:

select /*+ USE_SORT_MERGE_JOIN*/ * from "t" a, "tt" bwhere a.pk=b.pk;

参考链接

http://www.daniubiji.cn/archives/111

https://phoenix.apache.org/language/index.html#split_point

https://phoenix.apache.org/installation.html


楼主热帖
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 赞 踩

168大数据 - 论坛版权1.本主题所有言论和图片纯属网友个人见解,与本站立场无关
2.本站所有主题由网友自行投稿发布。若为首发或独家,该帖子作者与168大数据享有帖子相关版权。
3.其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和168大数据的同意,并添加本文出处。
4.本站所收集的部分公开资料来源于网络,转载目的在于传递价值及用于交流学习,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
5.任何通过此网页连接而得到的资讯、产品及服务,本站概不负责,亦不负任何法律责任。
6.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源,若标注有误或遗漏而侵犯到任何版权问题,请尽快告知,本站将及时删除。
7.168大数据管理员和版主有权不事先通知发贴者而删除本文。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

关于我们|小黑屋|Archiver|168大数据 ( 京ICP备14035423号|申请友情链接

GMT+8, 2024-5-1 09:48

Powered by BI168大数据社区

© 2012-2014 168大数据

快速回复 返回顶部 返回列表