Автообновление билета Kerberos не работает с Java

В моем серверном приложении я подключаюсь к защищенному кластеру Hadoop Kerberos из моего Java-приложения. При запуске приложения я звоню

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 должен быть автоматически продлен.

Мое приложение использует Java 8, и я столкнулсяэта ошибка.

Но тогда выглядит какHadoop-синфазного 2.7.1.2.4.2.12-1.jar используемый моим приложением уже имеет исправление. Источник можно найтиВот.

Но все равно получена та же ошибка, что автоматического обновления не происходило. Это было решено только после звонкаUserGroupInformation.checkTGTAndReloginFromkeytab() перед каждым действием, как предложено вышеответ .Но это было предложено только при использовании API Rest, а не для RPC, и я надеюсь, что нативные API Java используют только RPC.

Почему автоматическое обновление не происходит, как указано вышеответ?

Ответы на вопрос(2)

Ваш ответ на вопрос