Kerberosとphoenixの統合に関する問題

2800 ワード

本人が使用しているphoenix 5.0.xおよびクラスタhdp 3.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

実測には何の問題もない!問題があったら連絡してください.