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的整合的更多相关文章

  1. Phoenix连接安全模式下的HBase集群

    Phoenix连接安全模式下的HBase集群 HBase集群开启安全模式(即启用kerberos认证)之后,用户无论是用HBase shell还是Phoenix去连接HBase都先需要通过kerber ...

  2. HBase详解(05) - HBase优化 整合Phoenix 集成Hive

    HBase详解(05) - HBase优化 整合Phoenix 集成Hive HBase优化 预分区 每一个region维护着startRow与endRowKey,如果加入的数据符合某个region维 ...

  3. hive与hbase的整合

    Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行.其优点学习成本低,可以通过类S ...

  4. Hive与Hbase关系整合

    近期工作用到了Hive与Hbase的关系整合,虽然从网上参考了很多的资料,但是大多数讲的都不是很细,于是决定将这块知识点好好总结一下供大家分享,共同掌握! 本篇文章在具体介绍Hive与Hbase整合之 ...

  5. Phoenix实现用SQL查询HBase

    博客已转移,请借一步说话,http://www.weixuehao.com/archives/111 HBase,一个NoSQL数据库,可存储大量非关系型数据. HBase,可以用HBase shel ...

  6. 大数据平台搭建 - cdh5.11.1 - hbase集群搭建

    一.简介 HBase是一种构建在HDFS之上的分布式.面向列的存储系统.在需要实时读写.随机访问超大规模数据集时,可以使用HBase. 尽管已经有许多数据存储和访问的策略和实现方法,但事实上大多数解决 ...

  7. phoenix将hdfs数据导入hbase

    http://phoenix.apache.org/bulk_dataload.html

  8. Hadoop Hive与Hbase关系 整合

    用hbase做数据库,但因为hbase没有类sql查询方式,所以操作和计算数据很不方便,于是整合hive,让hive支撑在hbase数据库层面 的 hql查询.hive也即 做数据仓库 1. 基于Ha ...

  9. 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 ...

随机推荐

  1. yii2 查询数据库语法

    $query0 = ImGroupUser::find()->where(['gid'=>'56680dfc60b215d62104a4d8'])->select('user_cli ...

  2. Ants on tree

    Description 从前有一个策略游戏, 叫做 蚂蚁上树 游戏中有一棵 nn 个节点, 以 11 为根的有根树 初始始每个节点都为空, 游戏系统会进行两种操作 : 1 x , 表示往 xx 节点放 ...

  3. 《Linux内核分析》期末总结及学习心得

    [洪韶武 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ] 一.学习心得 本学 ...

  4. SrervletContext和文件下载

    ServletContext对象 生命周期(从生命周期可以看出这个是个全局对象) 项目启动的时候创建 项目关闭的时候销毁 概念:代表整个web应用,可以和程序的容器(服务器)来通信. 获取 通过req ...

  5. 【bug】Could not find method compile() 解决

     集成第三方库出现 Error:Could not find method compile() for arguments [com.android.support:design:23.4.0] on ...

  6. 解题:SDOI 2017 数字表格

    题面 反演题,推式子么=.= $\prod\limits_{d=1}^{min(n,m)}\prod\limits_{i=1}^n\prod\limits_{j=1}^m[gcd(i,j)==d]fi ...

  7. CodeForces475

    A. Splits #include <cstdio> #include <cstdlib> #include <cmath> #include <cstri ...

  8. laravel 获取所有表名

    $tables = DB::connection()->getDoctrineSchemaManager()->listTableNames(); 需要 doctrine/dbal 扩展, ...

  9. Java入门:Java中获取键盘输入值的三种方法

    Java程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值的现成函数!Java没有提供这样的函数也不代 ...

  10. PhantomJS的替代品--无头浏览器(Headless Chrome)

    在使用PhantomJS时候,出现提示: UserWarning: Selenium support for PhantomJS has been deprecated, please use hea ...