[How to] Phoenix 与 CDH5.4.2 HBase的整合
1.简介
Phoenix将SQL带回到了NOSQL的世界,其在HBase之上做了一个layer,客户端通过SQL调用Phoenix,Phoenix在转化为HBase客户算API进行访问HBase,其很多计算也是通过HBase的协处理器的机制来完成的。当前很多场景下使用CDH版本的HBase,可惜Cloudrea公司并没有官方支持,内有将Phoenix纳入发布版本中,所以造成社区的Phoenix并不能很好的和HBase的cdh版本进行继承,本文通过重新编译Phoenix的方式将两者结合。
2.Phoenix版本选取
Phoenix并没有纳入CDH正式版本中。现在只是CDH版本的lab项目,基于这一点如果我们要使用CDH版本的HBase所适配的Phoenix则需要自己去编译。网上也有很多编译方法,但是这些方法在修改完毕POM文件中的HBase版本后(指定为CDH的HBase版本)通常编译不能通过,唯一的方法是修改Phoneix的源代码,这种在没有经过完整测试的情况下是很危险的,即使修改完毕代码后编译通过对于后续在使用在也是后果自负。
CDH对于Phoneix纳入lab项目的官方声明如下:
http://blog.cloudera.com/blog/2015/05/apache-phoenix-joins-cloudera-labs/
对于Phoneix的工作在如下git中进行,我们可以根据当前自身的HBase版本来选取对应的phoinex版本:
https://github.com/cloudera-labs/phoenix
在我们的生产环境使用的cdh5.4.2版本的HBase,所以在上述git中选取最接近的1.1.0分支,正如上述,虽然是lab版本但是对于“胡乱”修改代码自行编译的版本还是靠谱些。
我们也可以在Cloudera的下载目录中找到Phoneix的版本,但是这些都是parcel格式,这种格式的文件只能通过cloudera manager来安装!
http://archive.cloudera.com/cloudera-labs/phoenix/parcels/
3.Phoenix的安装
Phoneix并不是以集群方式或者说起并没有独立的runtime环境,主要以客户端包被继承与应用客户端来运行,以服务端包被继承于HBase服务端来运行,在客户端将“sql”语句解析成HBase的API来进行访问,当进行二级索引的操作的时候又使用到协处理机制来处理主表与索引表的记录等。
安装方法:
- 将 phoenix-[version]-server.jar 加入到HBase节点的classpath中,通常可以直接放入带lib目录下。
- 修改配置文件
<property>
<name>hbase.regionserver.wal.codec</name>
<value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
</property><property>
<name>hbase.region.server.rpc.scheduler.factory.class</name>
<value>org.apache.hadoop.hbase.ipc.PhoenixRpcSchedulerFactory</value>
<description>Factory to create the Phoenix RPC Scheduler that uses separate queues for index and metadata updates</description>
</property>
<property>
<name>hbase.rpc.controllerfactory.class</name>
<value>org.apache.hadoop.hbase.ipc.controller.ServerRpcControllerFactory</value>
<description>Factory to create the Phoenix RPC Scheduler that uses separate queues for index and metadata updates</description>
</property><property>
<name>hbase.master.loadbalancer.class</name>
<value>org.apache.phoenix.hbase.index.balancer.IndexLoadBalancer</value>
</property>
<property>
<name>hbase.coprocessor.master.classes</name>
<value>org.apache.phoenix.hbase.index.master.IndexMasterObserver</value>
</property>
<property>
<name>hbase.coprocessor.regionserver.classes</name>
<value>org.apache.hadoop.hbase.regionserver.LocalIndexMerger</value>
</property>- 重启集群
- 将 phoenix-[version]-client.jar 继承到应用程序中.
4. bug fix
此版本在limit上有一个bug需要解决,patch:PHOENIX-2601
[How to] Phoenix 与 CDH5.4.2 HBase的整合的更多相关文章
- Phoenix连接安全模式下的HBase集群
Phoenix连接安全模式下的HBase集群 HBase集群开启安全模式(即启用kerberos认证)之后,用户无论是用HBase shell还是Phoenix去连接HBase都先需要通过kerber ...
- HBase详解(05) - HBase优化 整合Phoenix 集成Hive
HBase详解(05) - HBase优化 整合Phoenix 集成Hive HBase优化 预分区 每一个region维护着startRow与endRowKey,如果加入的数据符合某个region维 ...
- hive与hbase的整合
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行.其优点学习成本低,可以通过类S ...
- Hive与Hbase关系整合
近期工作用到了Hive与Hbase的关系整合,虽然从网上参考了很多的资料,但是大多数讲的都不是很细,于是决定将这块知识点好好总结一下供大家分享,共同掌握! 本篇文章在具体介绍Hive与Hbase整合之 ...
- Phoenix实现用SQL查询HBase
博客已转移,请借一步说话,http://www.weixuehao.com/archives/111 HBase,一个NoSQL数据库,可存储大量非关系型数据. HBase,可以用HBase shel ...
- 大数据平台搭建 - cdh5.11.1 - hbase集群搭建
一.简介 HBase是一种构建在HDFS之上的分布式.面向列的存储系统.在需要实时读写.随机访问超大规模数据集时,可以使用HBase. 尽管已经有许多数据存储和访问的策略和实现方法,但事实上大多数解决 ...
- phoenix将hdfs数据导入hbase
http://phoenix.apache.org/bulk_dataload.html
- Hadoop Hive与Hbase关系 整合
用hbase做数据库,但因为hbase没有类sql查询方式,所以操作和计算数据很不方便,于是整合hive,让hive支撑在hbase数据库层面 的 hql查询.hive也即 做数据仓库 1. 基于Ha ...
- apache-kylin-2.5.2-bin-cdh57与cdh-5.13.0集群整合运用
1.下载kylin最新版apache-kylin-2.5.2-bin-cdh57: 2.解压配置环境变量: export BASE_PATH="/opt/cloudera/parcels/C ...
随机推荐
- 数据挖掘领域经典分类算法 —— C4.5算法(附python实现代码)
目录 理论介绍 什么是分类 分类的步骤 什么是决策树 决策树归纳 信息增益 相关理论基础 计算公式 ID3 C4.5 python实现 参考资料 理论介绍 什么是分类 分类属于机器学习中监督学习的一种 ...
- BZOJ2529 [Poi2011]Sticks 【贪心】
题目链接 BZOJ2529 题解 要组成三角形,当且仅当最长边长度小于另两条边之和 我们就枚举最长边,另两条边当然是越大越好 我们将所有边排序,从小枚举并记录各个颜色的最长边 当枚举到当前边时,找到除 ...
- 【bzoj4804】欧拉心算 解题报告
[bzoj4804]欧拉心算 Description 给出一个数字\(N\),计算 \[\sum_{i=1}^n\sum_{j=1}^n \varphi(\gcd(i,j))\] Input 第一行为 ...
- 【codeforces gym】Increasing Costs
Portal --> Increasing Costs Description 给你一个\(n\)个点无重边无自环的无向连通图,每条边有一个边权,对于每一条边,询问去掉这条边之后有多少个点到\( ...
- Python 装饰器(进阶篇)
装饰器是什么呢? 我们先来打一个比方,我写了一个python的插件,提供给用户使用,但是在使用的过程中我添加了一些功能,可是又不希望用户改变调用的方式,那么该怎么办呢? 这个时候就用到了装饰器.装饰器 ...
- P4514 上帝造题的七分钟
P4514 上帝造题的七分钟 题意: 二维区间修改 区间查询 --- 错误日志: 写了个 4 重循环忘记调用 \(i\) Solution 二维树状数组 巨尼玛毒瘤 听说二维线段树会 \(MLE\) ...
- python基础-异常(exception)处理
python基础-异常(exception)处理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 程序中难免出现错误,而错误分成两种,即语法错误和逻辑错误.语法错误根本过不了pyth ...
- SQL统计每科前三名的学生的语句
偶然在论坛看到一个网友的帖子,关于他遇到一个面试题的,网站写了很多,我看了一下,结果应该是没问题的,但是为何面试官还是不满意,我想面试官可能并不是想考你真能把这道题做出来,而是看你如何简洁的通过一个s ...
- java 锁的分类
java中为了解决多线程并发带来的线程安全问题,引入了锁机制. 一.公平锁和非公平锁 1.公平锁:按照申请锁的顺序(FIFO队列)来获取锁. 2.非公平锁:所有线程都会竞争,获取的锁的顺序和申请顺序无 ...
- Autolayout下使用代码改变frame无效
在使用自动布局的情况下,子视图的边框无法改变.就算调用setFrame方法也不会有效果.自动布局引擎对于子视图的大小和位置有最终的决定权.如果你需要在运行时改变边框,那就得用NSLayoutConst ...