【发布时间】: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 而不是在代码中设置所有配置吗?它可能会干净得多。 (你可能会找到更好的支持,因为这是一个普遍的问题)
标签: scala apache-spark jdbc hive kerberos