使用 keytab kerberos 身份验证连接到 Hive 时出错
Posted
技术标签:
【中文标题】使用 keytab kerberos 身份验证连接到 Hive 时出错【英文标题】:Error Connecting to Hive with keytab kerberos authentication 【发布时间】:2022-01-17 16:28:28 【问题描述】:我正在尝试连接到远程 CDH 集群中的 hive。
使用的依赖:
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>1.1.0</version>
<classifier>standalone</classifier>
</dependency>
代码:
val url: String = "jdbc:hive2://ip-11-11-5-228.eu-central-1.compute.internal:10000/test;" +
"principal=hive/my@test-TELEKOM.COM;"
val driver = "org.apache.hive.jdbc.HiveDriver"
val fullTableName = "test.student_data"
val keytab_path = "/etc/my.keytab"
val conf:org.apache.hadoop.conf.Configuration = new org.apache.hadoop.conf.Configuration()
System.setProperty("java.security.krb5.conf", "/etc/krb5.conf")
System.setProperty("java.security.krb5.realm", "my-test.COM")
System.setProperty("HADOOP_CONF_DIR", "/etc/hadoop/conf/")
System.setProperty("java.security.krb5.kdc", "ip-11-11-5-228.eu-central-1.compute.internal")
conf.set("hadoop.security.authentication", "kerberos")
conf.set("hadoop.security.authorization", "true")
UserGroupInformation.setConfiguration(conf)
UserGroupInformation.loginUserFromKeytab("hive/my@test-TELEKOM.COM",
keytab_path)
Class.forName("org.apache.hive.jdbc.HiveDriver")
DriverManager.getConnection(url)
运行时出错:
javax.security.auth.login.LoginException: 无法从用户获取密码
我已将收到的 keytab 文件放在本地,但仍然出现错误
【问题讨论】:
你能用机器上的keytab启动吗? kinit -t /etc/my.keytab hive/my@test-TELEKOM.COM 您会考虑使用 Jaas 而不是在代码中设置所有配置吗?它可能会干净得多。 (你可能会找到更好的支持,因为这是一个普遍的问题) 【参考方案1】:您能否验证尝试使用 keytab 文件的用户是否可以使用它启动。 (keytab 文件是否有正确的权限?)
以运行 scala 的用户身份登录并执行:
kinit -kt /etc/my.keytab hive/my@test-TELEKOM.COM
很可能是 scala 用户应该拥有密钥表。这是我经常忘记做的一件非常常见的事情。
【讨论】:
很高兴听到。如果您发现此答案有帮助,请点赞。如果您觉得舒服,请将此标记为答案。以上是关于使用 keytab kerberos 身份验证连接到 Hive 时出错的主要内容,如果未能解决你的问题,请参考以下文章
在 Windows 上生成 kerberos 密钥表文件需要啥?