Phoenix鏈接安全模式下的HBase集羣

Phoenix鏈接安全模式下的HBase集羣

HBase集羣開啓安全模式(即啓用kerberos認證)以後,用戶不管是用HBase shell仍是Phoenix去鏈接HBase都先須要經過kerberos認證。若是沒有經過kerberos認證,則hbase shell或phoenix都會報找不到kerberos tgt的錯誤而沒法訪問HBase(如下以phoenix爲例):java

 

對於HBase shell來講,用戶能夠在命令行先用kinit命令(kinit -kt <user keytab> <user principal>)進行認證獲取tgt,而後再進入hbase shell中去建表或者跑查詢。而Phoenix由於沒有像hbase shell這樣一開始就支持kerberos認證,因此Phoenix高低版本之間對HBase的kerberos認證的支持有所差異:mysql

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

- 3.0如下版本的Phoenix默認不支持鏈接安全模式的hbase集羣shell

如下分別介紹不一樣Phoenix版本鏈接安全模式下HBase集羣的方法。apache

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文件路徑)oop

用戶能夠用上述JDBC鏈接串,經過sqlline命令,java代碼或sql鏈接器去訪問開啓了安全模式的HBase集羣(經過上述JDBC鏈接串去訪問HBase以前,不須要手動去執行kinit命令來獲取tgt)。其使用示例以下:post

(測試以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集羣了。

相關文章
相關標籤/搜索