【问题标题】:Auto renewal of Kerberos ticket not working from JavaKerberos 票证的自动续订在 Java 中不起作用
【发布时间】:2016-12-11 15:50:11
【问题描述】:

在我的服务器应用程序中,我从我的 java 应用程序连接到受 Kerberos 保护的 Hadoop 集群。在应用程序启动时,我确实调用了

UserGroupInformation.loginUserFromKeytabAndReturnUGI( ... );

我正在使用原生 FileSystem API (如 FileSystem.exists()FileSystem.delete())进行基本文件操作

我的应用程序在 24 小时后抛出以下错误。这就是 Kerberos 票证的到期时间。

Caused by: java.io.IOException: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]
        at org.apache.hadoop.ipc.Client$Connection$1.run(Client.java:690)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:422)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1709)
        at org.apache.hadoop.ipc.Client$Connection.handleSaslConnectionFailure(Client.java:653)
        at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:740)
        at org.apache.hadoop.ipc.Client$Connection.access$2900(Client.java:378)
        at org.apache.hadoop.ipc.Client.getConnection(Client.java:1492)
        at org.apache.hadoop.ipc.Client.call(Client.java:1402)
        ... 27 more
Caused by: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]
        at com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:211)
        at org.apache.hadoop.security.SaslRpcClient.saslConnect(SaslRpcClient.java:413)
        at org.apache.hadoop.ipc.Client$Connection.setupSaslConnection(Client.java:563)

来自this 的回答,Kerberos 票证应该是自动更新的。

我的应用程序正在使用 Java 8,我遇到了 this bug

但是看起来我的应用程序使用的hadoop-common-2.7.1.2.4.2.12-1.jar 已经修复了。源码可以在here找到。

但由于没有发生自动续订,仍然出现相同的错误。仅在上述answer 中建议的每个操作之前调用UserGroupInformation.checkTGTAndReloginFromkeytab() 后才解决。但这仅在使用Rest API 而不是RPC 时建议,我希望本机Java API 仅使用RPC。

为什么没有按照上面answer的建议进行自动续订?

【问题讨论】:

    标签: java hadoop kerberos


    【解决方案1】:

    不幸的是,使用UserGroupInformation#loginUserFromKeytabAndReturnUGI 方法时,自动续订无法正常工作存在一个已知问题。目前我不知道 Apache Hadoop 中有任何已知的代码修复。

    添加对UserGroupInformation#checkTGTAndReloginFromKeytab 的调用的解决方案是一种可行的解决方法。我建议您暂时坚持下去,并密切关注 Apache Hadoop 发行说明,看看将来是否有修复。

    【讨论】:

    • UserGroupInformation#loginUserFromKeytabAndReturnUGI 的已知问题是什么?你能给我指一个 Jira 吗?
    【解决方案2】:

    看起来您的 java 应用程序中使用的 hadoop-common jar 与服务器不匹配。请修改您的 java 应用程序以使用服务器中存在的相同版本的 hadoop jars。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-07
      • 2021-10-20
      • 1970-01-01
      • 2017-10-23
      • 2021-10-02
      相关资源
      最近更新 更多