【问题标题】:Error Connecting to Hive with keytab kerberos authentication使用 keytab kerberos 身份验证连接到 Hive 时出错
【发布时间】: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


【解决方案1】:

您能否验证尝试使用 keytab 文件的用户是否可以使用它启动。 (keytab 文件是否有正确的权限?)

以运行 scala 的用户身份登录并执行:

kinit -kt /etc/my.keytab hive/my@test-TELEKOM.COM

很可能是 scala 用户应该拥有密钥表。这是我经常忘记做的一件非常常见的事情。

【讨论】:

  • 很高兴听到。如果您发现此答案有帮助,请点赞。如果您觉得舒服,请将此标记为答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-09
  • 1970-01-01
  • 1970-01-01
  • 2022-11-15
  • 1970-01-01
相关资源
最近更新 更多