【发布时间】:2017-02-10 19:53:14
【问题描述】:
描述:我已经构建了一个应用程序,它从应用了 Kerberos 身份验证的远程集群中获取 HDFS(Hadoop 分布式文件系统)文件。我可以从 Eclipse 执行 HDFS.copyToLocalFile(path1, path2) 并且效果很好。但是当我将项目导出为可运行的 jar 并尝试通过命令行运行它时,它会引发以下错误。注意:我已经按照@https://sourceforge.net/p/jsch/mailman/message/26939797/ 中提到的步骤进行了操作,并且成功地从 Eclipse 运行了该项目。我在 Eclipse 中检查了其他文件,但找不到任何文件。我安装了 Kerberos V5 MIT 和 Network Identity Manager(4.0 版)
Caused by: java.io.IOException: org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]
at org.apache.hadoop.ipc.Client$Connection$1.run(Client.java:680)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Unknown Source)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1628)
at org.apache.hadoop.ipc.Client$Connection.handleSaslConnectionFailure(Client.java:643)
at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:730)
at org.apache.hadoop.ipc.Client$Connection.access$2800(Client.java:368)
at org.apache.hadoop.ipc.Client.getConnection(Client.java:1521)
at org.apache.hadoop.ipc.Client.call(Client.java:1438)
... 70 more
Caused by: org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]
at org.apache.hadoop.security.SaslRpcClient.selectSaslClient(SaslRpcClient.java:172)
at org.apache.hadoop.security.SaslRpcClient.saslConnect(SaslRpcClient.java:396)
at org.apache.hadoop.ipc.Client$Connection.setupSaslConnection(Client.java:553)
at org.apache.hadoop.ipc.Client$Connection.access$1800(Client.java:368)
at org.apache.hadoop.ipc.Client$Connection$2.run(Client.java:722)
at org.apache.hadoop.ipc.Client$Connection$2.run(Client.java:718)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Unknown Source)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1628)
at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:717)
... 73 more
注意:我已将 eclipsed 相关参数配置到 Configuration.xml 中,并将其捆绑到类路径中。
<property>
<name>java.security.auth.login.config</name>
<value>./Configuration/login.conf</value>
</property>
<property>
<name>java.security.krb5.conf</name>
<value>./Configuration/krb5.conf</value>
</property>
<property>
<name>javax.security.auth.useSubjectCredsOnly</name>
<value>false</value>
</property>
【问题讨论】:
-
在 "Low-level secrets" 下,您有一些关于启用 Kerberos 调试跟踪的提示,例如
export HADOOP_JAAS_DEBUG=true和-Dsun.security.krb5.debug=true,另外,如果您使用的是 REST 接口,-Dsun.security.spnego.debug=true -
我还将添加我的个人风格:
-Djava.security.debug=gssloginconfig,configfile,configparser,logincontext对于理解配置问题非常有用。 -
如果你在 Windows 上运行测试——在你的帖子中并不是 100% 清楚——那么你也可以从一些关于 Kerberos 票证缓存的细节信息中受益,例如stackoverflow.com/questions/41763936/…
标签: java eclipse hadoop kerberos