복붙노트

[HADOOP] Java에서 작동하지 않는 Kerberos 티켓 자동 갱신

HADOOP

Java에서 작동하지 않는 Kerberos 티켓 자동 갱신

내 서버 응용 프로그램에서 Kerberos에 연결하면 내 Java 응용 프로그램에서 Hadoop 클러스터를 보호합니다. 응용 프로그램 시작시 전화를 겁니다.

UserGroupInformation.loginUserFromKeytabAndReturnUGI( ... );

FileSystem.exists () 및 FileSystem.delete () 같은 기본 FileSystem API를 사용하여 기본 File 작업을 수행하고 있습니다.

내 응용 프로그램은 24H 후에 다음 오류를 발생시킵니다. 그것이 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-common-2.7.1.2.4.2.12-1.jar이 내 응용 프로그램에서 이미 사용 된 것처럼 보입니다. 근원은 여기에서 찾아 낼 수있다.

그러나 자동 갱신이 일어나지 않았던 것과 같은 오류가 발생했습니다. 위의 답변에서 제안 된대로 각 작업 전에 UserGroupInformation.checkTGTAndReloginFromkeytab ()을 호출 한 후에 만 ​​해결되었지만 RPC가 아닌 나머지 API를 사용할 때만 제안되었으며 기본 Java API가 RPC 만 사용하기를 바랍니다.

위의 답변에서 제안 된대로 자동 갱신이 수행되지 않는 이유는 무엇입니까?

해결법

  1. ==============================

    1.불행히도 UserGroupInformation # loginUserFromKeytabAndReturnUGI 메소드를 사용할 때 자동 갱신이 올바르게 작동하지 않는 것으로 알려진 문제점이 있습니다. 현재 Apache Hadoop에서 알려진 코드 수정을 알지 못합니다.

    불행히도 UserGroupInformation # loginUserFromKeytabAndReturnUGI 메소드를 사용할 때 자동 갱신이 올바르게 작동하지 않는 것으로 알려진 문제점이 있습니다. 현재 Apache Hadoop에서 알려진 코드 수정을 알지 못합니다.

    UserGroupInformation # checkTGTAndReloginFromKeytab에 대한 호출을 추가하는 솔루션은 실행 가능한 해결 방법입니다. 지금 당장이 문제를 고수하고 Apache Hadoop 릴리스 노트를 참고하여 향후 수정 될 수정 사항이 있는지 확인하는 것이 좋습니다.

  2. ==============================

    2.자바 응용 프로그램에서 사용되는 hadoop-common jar 파일이 서버와 일치하지 않는 것 같습니다. 서버에있는 hadoop jar와 동일한 버전을 사용하도록 Java 응용 프로그램을 수정하십시오.

    자바 응용 프로그램에서 사용되는 hadoop-common jar 파일이 서버와 일치하지 않는 것 같습니다. 서버에있는 hadoop jar와 동일한 버전을 사용하도록 Java 응용 프로그램을 수정하십시오.

  3. from https://stackoverflow.com/questions/41087997/auto-renewal-of-kerberos-ticket-not-working-from-java by cc-by-sa and MIT license