使用 Kerberos 身份验证到 dbvisualizer 的 Hive 连接

Posted

技术标签:

【中文标题】使用 Kerberos 身份验证到 dbvisualizer 的 Hive 连接【英文标题】:Hive connection to dbvisualizer using Kerberos Authentication 【发布时间】:2018-02-07 16:43:59 【问题描述】:

我正在使用 Windows 机器并尝试使用 Hive uber jar 使用 DbVisualizer 设置 Hive。但是得到如下所述的错误。不知道为什么? https://github.com/timveil/hive-jdbc-uber-jar

我正在使用以下 exe 在 Windows 上生成 keytab 文件。 http://web.mit.edu/KERBEROS/dist/index.html

以及 github 页面上提到的所有步骤。

如果我使用用户主体,我会收到以下错误。

dbc:hive2://aaa.corp.ad.abc:2181,bbbb.corp.ad.abc:2181,ccc.corp.ad.abc:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2;principal= gaurang.shah@CORP.AD.ABC

错误信息

Long Message:
Kerberos principal should have 3 parts: gaurang.shah@CORP.AD.CTC

Details:
   Type: java.lang.IllegalArgumentException

Stack Trace:
java.lang.IllegalArgumentException: Kerberos principal should have 3 parts: gaurang.shah@CORP.AD.CTC
   at org.apache.hive.service.auth.KerberosSaslHelper.getKerberosTransport(KerberosSaslHelper.java:48)
   at org.apache.hive.jdbc.HiveConnection.createBinaryTransport(HiveConnection.java:425)
   at org.apache.hive.jdbc.HiveConnection.openTransport(HiveConnection.java:202)
   at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:166)
   at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:105)
   at sun.reflect.GeneratedMethodAccessor69.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
   at java.lang.reflect.Method.invoke(Unknown Source)
   at com.onseven.dbvis.g.B.D.ā(Z:1548)
   at com.onseven.dbvis.g.B.F$A.call(Z:1369)
   at java.util.concurrent.FutureTask.run(Unknown Source)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
   at java.lang.Thread.run(Unknown Source)

如果我使用下面提到的服务器主体,错误是不同的。

dbc:hive2://aaa.corp.ad.abc:2181,bbbb.corp.ad.abc:2181,ccc.corp.ad.abc:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2;principal= krbgt/CORP.AD.ABC@CORP.AD.ABC

错误:

Long Message:
Could not open client transport for any of the Server URI's in ZooKeeper: GSS initiate failed

Details:
   Type: java.sql.SQLException
   SQL State: 08S01

【问题讨论】:

principal 指的是 HiveServer2 使用的服务主体名称 (SPN) => 类似 hive/_HOST@CORP.AD.ABC 使用占位符而不是实际的服务器名称(因为你不'事先不知道哪个服务器会回答,这就是使用 ZK 作为目录服务的重点......) 搜索关于服务器端属性hive.server2.authentication.kerberos.principal 的上下文。 【参考方案1】:

Samson 在评论中提供的答案对我有用。

使用 prinicpal 作为hive/_HOST@CORP.AD.ABC 解决了这个问题。

【讨论】:

以上是关于使用 Kerberos 身份验证到 dbvisualizer 的 Hive 连接的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop 集群上的 Kerberos 身份验证

kerberos 身份验证-功能组

带有反应的 Kerberos 身份验证

“GSSException检测到缺陷令牌” - 尝试使用Kerberos对在Windows上运行的Tomcat进行身份验证时

Apache shiro + kerberos 身份验证

使用 Kerberos 进行 Android 身份验证