繁体   English   中英

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

[英]Hdfs with Kerberos cannot access from remote server

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

java.io.IOException:本地异常失败:java.io.IOException:javax.security.sasl.SaslException:GSS启动失败[由GSSException引起:没有提供有效的凭据(机制级别:找不到任何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.NativeMethodAccessorImplNative Methodinvoke0(Unknown Source) ) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org .apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:164) at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:83) at $Proxy10.getFileInfo(Unknown Source) at org.apache.hadoop.hdfs.DFSClient.getFileInfo(DFSClient.java:1507) 在 org.apache.hadoop.hdfs.DistributedFi leSystem.getFileStatus(DistributedFileSystem.java:783) at org.apache.hadoop.fs.FileSystem.getFileStatus(FileSystem.java:2106) at org.apache.hadoop.fs.FileSystem.globStatusInternal(FileSystem.java:1524) at org .apache.hadoop.fs.FileSystem.globStatus(FileSystem.java:1503) 在 org.apache.hadoop.fs.FileSystem.globStatus(FileSystem.java:1481) 在 org.apache.hadoop.fs.shell.PathData.expandAsGlob (PathData.java:271) at org.apache.hadoop.fs.shell.Command.expandArgument(Command.java:224) at org.apache.hadoop.fs.shell.Command.expandArguments(Command.java:207) at org.apache.hadoop.fs.shell.Command.processRawArguments(Command.java:190) 在 org.apache.hadoop.fs.shell.Command.run(Command.java:154) 在 org.apache.hadoop.fs。 FsShell.run(FsShell.java:254) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) at 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 在 org.apache.hadoop.ipc.Client$Connection$1.run(Client.java:548) 在 java.security.AccessController 上出现了 [由 GSSException 引起:没有提供有效凭据(机制级别:找不到任何 Kerberos tgt)] .doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:396) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1332) at org.apache.hadoop.ipc .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 更多作者:javax.security.sasl.SaslException:GSS 启动失败 [由 GSSException 引起:未提供有效凭据(机制级别:无法找到任何 Kerberos tgt)] 在 com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client) .java:194) 在 org.apache.hadoop.security.SaslRpcClient.saslConnect(SaslRpcClient.java:137) 在 org.apache.hadoop.ipc.Client$Connection.setupSaslConnection(Client.java:423) 在 org.apache。 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$ Connection$2.run(Client.java:586) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:396) at org.apache.hadoop.security.UserGroupInformation .doAs(UserGroupInformation.java:1332) at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:585) ... 28 导致:GSSException:未提供有效凭据(机制级别:未能在 sun.security.jgss.krb5.Krb5InitCredential.getInstance(Krb5InitCredential.java:130) at sun.security.jgss.krb5.Krb5MechFactory.getCredentialElement(Krb5MechFactory.java:106) at sun.security.jgsss 中找到任何 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 sun.security.jgss.GSSContextImpl .initSecContext(GSSContextImpl.java:162) 在 com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:175) ... 37 更多

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM