Java:访问kerberized hadoop集群上的作业历史服务器和应用程序时间表服务器?

Java:访问kerberized hadoop集群上的作业历史服务器和应用程序时间表服务器?,hadoop,kerberos,spring-security-kerberos,apache-tez,Hadoop,Kerberos,Spring Security Kerberos,Apache Tez,我使用kerberos rest模板访问kerberized hadoop上的作业历史记录服务器,但此代码引发了一个异常: KerberosRestTemplate kerberosRestTemplate = new KerberosRestTemplate(properties.getProperty("userKeytabPath"),properties.getProperty("userprincipal")); System.out.println

我使用kerberos rest模板访问kerberized hadoop上的作业历史记录服务器,但此代码引发了一个异常:

KerberosRestTemplate kerberosRestTemplate = new KerberosRestTemplate(properties.getProperty("userKeytabPath"),properties.getProperty("userprincipal"));                   System.out.println(kerberosRestTemplate.getForObject(jobhistoryurl, String.class));
例外情况:

Exception in thread "main" org.springframework.web.client.RestClientException: Error running rest call; nested exception is org.springframework.web.client.HttpClientErrorException: 401 Authentication required
    at org.springframework.security.kerberos.client.KerberosRestTemplate.doExecute(KerberosRestTemplate.java:196)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:530)
    at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:237)
    at com.datametica.hiveconnection.hiveconnectioncheck.HivePortCheck.main(HivePortCheck.java:57)
Caused by: org.springframework.web.client.HttpClientErrorException: 401 Authentication required
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:91)
    at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:614)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:570)
    at org.springframework.security.kerberos.client.KerberosRestTemplate.doExecuteSubject(KerberosRestTemplate.java:202)
    at org.springframework.security.kerberos.client.KerberosRestTemplate.access$100(KerberosRestTemplate.java:67)
    at org.springframework.security.kerberos.client.KerberosRestTemplate$1.run(KerberosRestTemplate.java:191)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:360)
    at org.springframework.security.kerberos.client.KerberosRestTemplate.doExecute(KerberosRestTemplate.java:187)
    ... 3 more
那么,为了访问kerberos安全API,我必须在请求头中传递任何额外的参数吗? 在访问此api之前,我还使用hadoop安全的UserGroupInformation类,通过kerberosRestTemplate中提供的相同用户主体和密钥表登录了一个用户

 UserGroupInformation.loginUserFromKeytab(properties.getProperty("userprincipal"),properties.getProperty("userKeytabPath"));

在访问作业历史记录之前,我检查了当前登录的用户(通过当前用户的ugi),它告诉我该用户已登录并使用kerberos身份验证,但我仍然从作业历史记录服务器获取401状态。

要获取一些调试跟踪,添加
-Dsun.security.spnego.debug=true-Dsun.security.krb5.debug=true-Djava.security.debug=gssloginconconfig、configfile、configparser、logincontext
感谢您的建议。我试过在调试模式下运行,它显示以下错误。@Samson Scharfrichter感谢您的建议。我尝试在调试模式下运行它,显示以下错误。KrbException:在Kerberos数据库(7)中未找到服务器-查找服务器Kerberos需要规范的DNS名称,即它先进行DNS扫描,然后进行DNS反向扫描。如果IP没有指向原始名称,则Kerberos认为这是一次黑客企图(IP欺骗)。