设为首页 加入收藏

TOP

HBase的SQL引擎(1)-Phoenix
2019-02-12 13:42:13 】 浏览:15
Tags:HBase SQL 引擎 -Phoenix

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

简介

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




编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇hbase复习和压缩算法 下一篇Hadoop+hbase+zookeeper完全分布..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(214) }