自动更新kerberos票证在java中不起作用

5sxhfpxr  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(539)

在我的服务器应用程序中,我从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)

根据这个答案,kerberos票证应该是自动续订的。
我的应用程序使用的是Java8,我遇到了这个bug。
但是看起来我的应用程序使用的hadoop-common-2.7.1.2.4.2.12-1.jar已经有了修复。源头可以在这里找到。
但仍然得到了相同的错误,因为自动更新没有发生。打电话后才解决 UserGroupInformation.checkTGTAndReloginFromkeytab() 在上面的回答中建议的每一个操作之前。但是这只是在使用RESTAPI时建议的,而不是在rpc中建议的,我希望本地JavaAPI只使用rpc。
为什么自动更新没有发生在上面的答案建议?

anauzrmj

anauzrmj1#

不幸的是,在使用时,存在一个已知的自动续订无法正常工作的问题 UserGroupInformation#loginUserFromKeytabAndReturnUGI 方法。目前我还不知道apachehadoop中有任何已知的代码修复。
添加呼叫的解决方案 UserGroupInformation#checkTGTAndReloginFromKeytab 是一个可行的解决方法。我建议您现在就坚持这样做,并关注apachehadoop发行说明,看看将来是否有一个修复方案。

i7uaboj4

i7uaboj42#

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

相关问题