首页 文章

带Kerberos的Hdfs无法从远程服务器访问

提问于
浏览
2

我使用kerberos authencication配置了HDFS,我可以使用自己的keytab文件访问HDFS集群中任何一台机器上的HDFS . 但是当我使用相同的密钥表访问HDFS集群外部的远程服务器上的HDFS时,我无法访问 . 我收到了以下错误消息,顺便说一句,我已将服务器的配置文件krb5.conf复制到hadoop集群外的远程机器上 .

java.io.IOException:本地异常失败:java.io.IOException:javax.security.sasl.SaslException:GSS启动失败[由GSS异常引起:未提供有效凭据(机制级别:无法找到任何Kerberos tgt)] ;主机详细信息:本地主机为:“ubuntu / 10.235.6.156”;目标主机是:“node0”:21200; org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:759)org.apache.hadoop.ipc.Client.call(Client.java:1164)org.apache.hadoop.ipc.ProtobufRpcEngine $ Invoker .invoke(ProtobufRpcEngine.java:202)at $ Proxy9.getFileInfo(Unknown Source)at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.getFileInfo(ClientNamenodeProtocolTranslatorPB.java:628)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) )在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)的sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)at at java.lang.reflect.Method.invoke(Method.java:597)atg位于$ Proxy10.getFileInfo(未知来源)的org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:83)上的.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:164) org.apache.hadoop.hdfs.DFSClient.getFileInfo(DFSClient.java:1507)org.apache.hadoop.hdfs.DistributedFi位于org.apache.hadoop.fs.FileSystem.getFileStatus(FileSystem.java:2106)的leSystem.getFileStatus(DistributedFileSystem.java:783)org.apache.hadoop.fs.FileSystem.globStatusInternal(FileSystem.java:1524)at org位于org.apache.hadoop.fs.shell.PathData.expandAsGlob的org.apache.hadoop.fs.FileSystem.globStatus(FileSystem.java:1481)的.apache.hadoop.fs.FileSystem.globStatus(FileSystem.java:1503) (PathData.java:271)org.apache.hadoop.fs.shell.Command.expandArgument(Command.java:224)org.apache.hadoop.fs.shell.Command.expandArguments(Command.java:207)at atg Org.apache.hadoop.fs.shell.Command.processRawArguments(Command.java:190)位于org.apache.hadoop.fs的org.apache.hadoop.fs.shell.Command.run(Command.java:154) . 位于org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)的fsShell.run(FsShell.java:254)org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84)at org .apache.hadoop.fs.FsShell.main(FsShell.java:304)引起:java.io.IOException:javax.security.sasl.SaslException:GSS启动f [由GSSException引起:没有提供有效凭据(机制级别:无法找到任何Kerberos tgt)] org.apache.hadoop.ipc.Client $ Connection $ 1.run(Client.java:548)at java.security.AccessController位于org.apache.hadoop.ipc的org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1332)的javax.security.auth.Subject.doAs(Subject.java:396)上的.doPrivileged(Native Method) .Client $ Connection.handleSaslConnectionFailure(Client.java:512)org.apache.hadoop.ipc.Client $ Connection.setupIOstreams(Client.java:596)org.apache.hadoop.ipc.Client $ Connection.access $ 1700( Client.java:220)org.apache.hadoop.ipc.Client.getConnection(Client.java:1213)org.apache.hadoop.ipc.Client.call(Client.java:1140)... 25更多引起by:javax.security.sasl.SaslException:GSS启动失败[由GSSException引起:没有提供有效凭据(机制级别:无法找到任何Kerberos tgt)]在com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client) .java:194)在org.apache的org.apache.hadoop.security.SaslRpcClient.saslConnect(SaslRpcClient.java:137)org.apache.hadoop.ipc.Client $ Connection.setupSaslConnection(Client.java:423) . hadoop.ipc.Client $ Connection.access $ 1300(Client.java:220)org.apache.hadoop.ipc.Client $ Connection $ 2.run(Client.java:589)org.apache.hadoop.ipc.Client $在org.apache.hadoop.security.UserGroupInformation上的javax.security.auth.Subject.doAs(Subject.java:396)的java.security.AccessController.doPrivileged(Native Method)连接$ 2.run(Client.java:586) .doAs(UserGroupInformation.java:1332)at org.apache.hadoop.ipc.Client $ Connection.setupIOstreams(Client.java:585)... 28更多引起:GSSException:未提供有效凭据(机制级别:无法在sun.security.jgss的sun.security.jgss.krb5.Krb5InitCredential.getInstance(Krb5InitCredential.java:130)sun.security.jgss.krb5.Krb5MechFactory.getCredentialElement(Krb5MechFactory.java:106)找到任何Kerberos tgt) . krb5.Krb5MechFactory.getMechanis mContext(Krb5MechFactory.java:172)at sun.security.jgss.GSSManagerImpl.getMechanismContext(GSSManagerImpl.java:209)at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:195)at atsun.sse.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:162)at com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:175)... 37更多

1 回答

  • 2

    最后,我找到了原因:当kerberos使用AES-256加密时,你应该安装JCE . 我在HDFS集群中的机器上安装了JCE,但我没有意识到集群外的客户端机器也需要JCE . 这就是为什么我可以在HDFS集群内的机器上访问HDFS,但不能在HDFS集群外部的机器上访问HDFS的原因 .

相关问题