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

HBase集群开启安全模式(即启用kerberos认证)之后,用户无论是用HBase shell还是Phoenix去连接HBase都先需要通过kerberos认证。如果没有通过kerberos认证,则hbase shell或phoenix都会报找不到kerberos tgt的错误而无法访问HBase(以下以phoenix为例):

 

对于HBase shell来说,用户可以在命令行先用kinit命令(kinit -kt <user keytab> <user principal>)进行认证获取tgt,然后再进入hbase shell中去建表或者跑查询。而Phoenix因为没有像hbase shell这样一开始就支持kerberos认证,所以Phoenix高低版本之间对HBase的kerberos认证的支持有所差别:

- 3.0及以上版本的Phoenix原生支持连接安全模式的hbase集群

- 3.0以下版本的Phoenix默认不支持连接安全模式的hbase集群

以下分别介绍不同Phoenix版本连接安全模式下HBase集群的方法。

Phoenix 3.0及以上版本连接安全模式下的HBase集群

Phoenix从3.0版本开始增加了连接安全模式下的HBase集群的支持,连接安全模式的HBase集群的JDBC URL格式如下:

jdbc:phoenix:<quorom>:<port>:[zk_rootNode]:<principal>:<keytab>

(参数里的quorom是zookeeper节点列表,port是zookeeper的端口,zk_rootNode是HBase的zookeeper目录,principal为hbase用户的principal,keytab为hbase用户的keytab文件路径)

用户可以用上述JDBC连接串,通过sqlline命令,java代码或sql连接器去访问开启了安全模式的HBase集群(通过上述JDBC连接串去访问HBase之前,不需要手动去执行kinit命令来获取tgt)。其使用示例如下:

(测试以HDP 2.6为准<HBase1.2.2,phoenix4.>,CDH或Apache社区版本的HBase的配置也类似)

 

另外,我们发现如果用kinit命令去手动获取tgt之后,依然可以通过非kerberos模式下的JDBC连接串(即jdbc:phoenix:<quorom>:<port>:[zk_rootNode] 格式的连)访问HBase集群,因为当前命令执行的上下文里以及有了kerberos tgt的缓存信息:

 

Phoenix 3.0以下版本连接安全模式下的HBase集群

对于3.0之前的版本,Phoenix默认是不支持连接安全模式下的HBase集群的。但是,我们可以通过修改phoenix的sqlline脚本并增加一些java参数来使phoenix能够连接开启kerberos的HBase集群(只需要增加一些参数,而不必修改phoenix代码本身)。

需要在sqlline里增加的java参数如下:

- zookeeper的jaas文件路径

- krb5.conf文件路径

- 集群配置文件和jar包的路径,包括:

- hadoop的配置文件路径

- hbase的配置文件路径

- hbase jar包的路径

- zookeeper jar包的路径

- hadoop auth jar包的路径

- phoenix-x.x.x.jar的路径

sqlline脚本最终执行的java命令类似下面:
java -Djava.security.auth.login.config=/etc/zookeeper/conf/zookeeper_client_jaas.conf -Djava.security.krb5.conf=/etc/krb5.conf -cp "/etc/hbase/conf:/usr/hdp/2.4.0.0-169/zookeeper/zookeeper-3.4.6.2.4.0.0-169.jar:/usr/hdp/2.4.0.0-169/hadoop/hadoop-auth-2.7.1.2.4.0.0-169.jar:/usr/hdp/2.4.0.0-169/phoenix/bin/../phoenix-4.4.0.2.4.0.0-169-client.jar:::/etc/hadoop/conf:/usr/hdp/2.4.0.0-169/hadoop/conf:/usr/hdp/2.4.0.0-169/hadoop/lib/*:/usr/hdp/2.4.0.0-169/hadoop/.//*:/usr/hdp/2.4.0.0-169/hadoop-hdfs/./:/usr/hdp/2.4.0.0-169/hadoop-hdfs/lib/*:/usr/hdp/2.4.0.0-169/hadoop-hdfs/.//*:/usr/hdp/2.4.0.0-169/hadoop-yarn/lib/*:/usr/hdp/2.4.0.0-169/hadoop-yarn/.//*:/usr/hdp/2.4.0.0-169/hadoop-mapreduce/lib/*:/usr/hdp/2.4.0.0-169/hadoop-mapreduce/.//*::mysql-connector-java-5.1.17.jar:mysql-connector-java.jar:postgresql-9.3-1101-jdbc4.jar:postgresql.jar:/usr/hdp/2.4.0.0-169/tez/*:/usr/hdp/2.4.0.0-169/tez/lib/*:/usr/hdp/2.4.0.0-169/tez/conf" -Dlog4j.configuration=file:/usr/hdp/2.4.0.0-169/phoenix/bin/log4j.propertiessqlline.SqlLine -d org.apache.phoenix.jdbc.PhoenixDriver -u jdbc:phoenix:ocdpbroker.jcloud.local:2181:/hbase-secure:hbase/ocdpbroker.jcloud.local@ASIAINFO.COM:/etc/security/keytabs/hbase.service.keytab -n none -p none —color=true —fastConnect=false —verbose=true —isolation=TRANSACTION_READ_COMMITTED

总结一下,需要首先在命令行用kinit命令手动获取tgt,然后再执行上述的java命令就可以访问开启kerberos认证的HBase集群了。

Phoenix连接安全模式下的HBase集群的更多相关文章

  1. HBase学习之路 (二)HBase集群安装

    前提 1.HBase 依赖于 HDFS 做底层的数据存储 2.HBase 依赖于 MapReduce 做数据计算 3.HBase 依赖于 ZooKeeper 做服务协调 4.HBase源码是java编 ...

  2. 读者来信 | 刚搭完HBase集群,Phoenix一启动,HBase就全崩了,是什么原因?(已解决)

    前言:之前有朋友加好友与我探讨一些问题,我觉得这些问题倒挺有价值的:于是就想在本公众号开设一个问答专栏,方便技术交流与分享,专栏名就定为:<读者来信>.如遇到本人能力有限难以解决的问题,我 ...

  3. 基于docker快速搭建hbase集群

    一.概述 HBase是一个分布式的.面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文"Bigtable:一个结构化数据的分布式存储系统".就像Bigt ...

  4. hbase集群的启动,注意几个问题

    1.hbase的改的会影响器他的组件的使用, 故而, 在修改 hadoop的任何组件后, 一定要记得其它的组件也能受到影响, 一下是我在将hadoop的集群改了之后 , 再次运行hbase的时候, 就 ...

  5. Hbase集群搭建及所有配置调优参数整理及API代码运行

    最近为了方便开发,在自己的虚拟机上搭建了三节点的Hadoop集群与Hbase集群,hadoop集群的搭建与zookeeper集群这里就不再详细说明,原来的笔记中记录过.这里将hbase配置参数进行相应 ...

  6. hadoop(四): 本地 hbase 集群配置 Azure Blob Storage

    基于 HDP2.4安装(五):集群及组件安装 创建的hadoop集群,修改默认配置,将hbase 存储配置为 Azure Blob Storage 目录: 简述 配置 验证 FAQ 简述: hadoo ...

  7. 高可用Hadoop平台-HBase集群搭建

    1.概述 今天补充一篇HBase集群的搭建,这个是高可用系列遗漏的一篇博客,今天抽时间补上,今天给大家介绍的主要内容目录如下所示: 基础软件的准备 HBase介绍 HBase集群搭建 单点问题验证 截 ...

  8. Kubernetes+Flannel 环境中部署HBase集群

    2015-12-14注:加入新节点不更改运行节点参数需求已满足,将在后续文章中陆续总结. 注:目前方案不满足加入新节点(master节点或regionserver节点)而不更改已运行节点的参数的需求, ...

  9. Apache HBase 集群安装文档

    简介: Apache HBase 是一个分布式的.面向列的开源 NoSQL 数据库.具有高性能.高可靠性.可伸缩.面向列.分布式存储的特性. HBase 的数据文件最终落地在 HDFS 之上,所以在 ...

随机推荐

  1. python测试开发django-69.templates模板过滤器filter

    前言 templates 模板里面过滤器 filter 的作用是对变量的出来,比如小写转大写,替换一些特殊字符,对列表取值,排序等操作. 内置的过滤器有很多,本篇拿几个常用的过滤器做案例讲解下相关的功 ...

  2. vmware-vmx.exe进程应该怎么杀掉

    如何解决VMware-vmx.exe无法彻底删除的问题 遇见的问题就是 虚拟机一直黑屏,强制关机之后,无法再次打开的问题. 显示:无法创建新虚拟机: 无法打开配置文件 以独占方式锁定此配置文件失败.另 ...

  3. 关于ID命名 一个页面唯一

    1.一般ID在一个区域内必须是唯一的.这样是一个规范而且在IE中使用JS通过ID获取这个对象永远只能获取第一个. 2.js无法找到重复的ID,用js获取时,只能得到第一个ID元素,但,如果不同的区域范 ...

  4. 基于react开发package.json的配置

    项目依赖 react网页开发的3件套: react, react-dom, react-router-dom, redux, react-reduxreact的UI组件库: antd(pc端), an ...

  5. 5-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(配置MQTT的SSL证书,验证安全通信)

    4-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(为域名申请SSl证书) 前面的准备工作终于完了 复制这两个证书 放到云端MQTT的这个位置,其实放哪里都可以 ...

  6. css规范思维导图(仅限于自己)

  7. 使用nodejs编写cli工具

    1.创建一个文件夹(my-cli); 2.在当前文件夹打开命令行输入 npm init,创建一个package.json,并配置bin字段,配置后才可以在控制台使用你的命令 "bin&quo ...

  8. xsxs

    import subprocess compilePopen = subprocess.Popen('gcc haha',shell=True,stderr=subprocess.PIPE) comp ...

  9. 特征值、特征向量与PCA算法

    一.复习几个矩阵的基本知识 1. 向量 1)既有大小又有方向的量成为向量,物理学中也被称为矢量,向量的坐标表示a=(2,3),意为a=2*i + 3*j,其中i,j分别是x,y轴的单位向量. 2)向量 ...

  10. Servlet 4.0 入门

    Java™ Servlet API 是主流服务器端 Java 的基本构建块,也是 Java EE 技术的一部分,例如,用于 Web 服务的 JAX - RS.JSF (JavaServer Faces ...