Kerberos与phoenix整合所遇问题

本人使用的为phoenix 5.0.x 以及集群hdp3.1
hbase 2.0.2

报错信息为

19/08/27 14:32:09 INFO RpcRetryingCallerImpl :Call exception, tries=10, retries=35, started=38465 ms ago, cancelled=false, msg=row 'bvuser,195861555,99999999999999' on table 'hbase:meta' at region=hbase:meta,,1.1588230740, hostname=blueview-t07,16020,1478499043493, seqNum=0 
failed on local exception ;javax.security.sasl.SaslException:GSS initate failed  [
Caused by GSSException :No  valid credentials provided (Mechanism level :S
ever not  found in Kerberos databases(7)  -  LOOKING UP SERVER],

我们可以看到明确的信息是sever not found in Kerberos databases。

由于我使用hbase api 连接是没问题的。

我个人的phoenix配置也是反复检查是正确的。

19/08/27 14:31:52  INFO UserGroupinformation:Login successful for user it1
using keytab file /home/user/user.keytab

代码报出个人信息验证是正确的!

那么问题出在后面获取服务权限!

个人推断是由于hdp服务未配置phoenix querysever ,导致Kerberos配置未注册这个phoenix的 principe name。导致虽然个人用户可以验证,但是无法获取访问h指定sever的权限。故报此错误。

正在联系运维讨论如何处理!


大致是清楚了。由于代码当中对phoenix的连接。需要对hbase的conf做定义,我个人定义hbase.master.kerberos.principal该属性有误。集群配置被运维更新了。后面重新配置更新后的属性。即成功访问了,以下代码内网。纯手打。已作隐私处理


val preperties=new Properties()
//相关hbase配置
properties.setProperty("hbase.zookeeper.quorum","localhost")
properties.setProperty("hbase.master.kerberos.principal","hbase/_HOST@***")
properties.setProperty("hbase.regionserver.kerberos.principal","hbase/_HOST@***")
properties.setProperty("phoenix.queryserver.kerberos.principal","HTTP/_HOST@***")
properties.setProperty("hadoop.security.authentication","kerberos")
properties.setProperty("hbase.security.authentication","kerberos")
properties.setProperty("zookeeper.znode.parent","/hbase-secure")
//个人的用户验证文件
properties.setProperty("hbase.myclient.principal","user/@**")
properties.setProperty("hbase.myclient.keytab","***/user.keytab")

看完以上配置后就如同正常的jdbc的路线来写就好了

//此处url需要拼接一下用户的principal并且要用:连接
//localhost位置换成zk的node地址就可以了用,隔开
val url="jdbc:phoenix:localhost:2181:/hbase-secure:/user@***"
var connection:Connecion=null
val sql="select * from **"
try{
Class.forname("org.apache.phoenix.jdbc.PhoenixDriver")
connection=DriverManager.getConnection(url,properties)
val statement=connection.createStatement()
val rs=statement.executeQuery(sql)

while(rs.next()){
val aa=rs.getStrin("aa")

array+= aa
}

}catch{
case t:Throwable=> t.printStackTrace()
}
array

实测没有任何问题!
有问题请联系我!

你可能感兴趣的:(phoenix)