码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-09-20 18:42:41      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:abs   sql   base   read   org   jar   图片   webp   shu   

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集群

标签:abs   sql   base   read   org   jar   图片   webp   shu   

原文地址:https://www.cnblogs.com/felixzh/p/11558711.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!