2012-11-26 48 views
2

訪問我配置的HDFS使用Kerberos authencication,我可以用我自己的密鑰表文件來訪問任何HDFS集羣內的機器的HDFS。但是,當我使用相同的密鑰表訪問HDFS集羣外部的遠程服務器上的HDFS時,我無法訪問。我收到以下錯誤消息,順便說一下,我已經拷入服務器的配置文件的krb5.conf到遠程機器上的Hadoop集羣之外。HDFS與Kerberos無法從遠程服務器

產生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)at org.apache.hadoop.ipc.Client.call(Client.java:1164)at org.apache.hadoop.ipc。 ProtobufRpcEngine $ Invoker.invoke(ProtobufRpcEngine.java:202) 在$ Proxy9.getFileInfo(來源不明)在 org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.getFileInfo(ClientNamenodeProtocolTranslatorPB.java:628) 在sun.reflect。 NativeMethodAccessorImpl.invoke0(本地方法)在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在java.lang.reflect.Method中。調用(Method.java:597) org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:164) 在 org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:83) 在$ Proxy10.getFileInfo在 org.apache在 org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:783)(未知源)在 org.apache.hadoop.hdfs.DFSClient.getFileInfo(DFSClient.java:1507) .hadoop.fs.FileSystem.getFileStatus(FileSystem.java:2106) 在 org.apache.hadoop.fs.FileSystem.globStatusInternal(FileSystem.java:1524) 在org.apache.hadoop.fs.FileSystem.globStatus( FileSystem.java:1503) at org.apache .hadoop.fs.FileSystem.globStatus(FileSystem.java:1481) 在 org.apache.hadoop.fs.shell.PathData.expandAsGlob(PathData.java:271) 在 org.apache.hadoop.fs.shell .Command.expandArgument(Command.java:224) 在 org.apache.hadoop.fs.shell.Command.expandArguments(Command.java:207) 在 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)在 org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)在 org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84)在 org.apache.hadoop.fs.FsShell.main(FsShell.java:304)產生的原因: 產生java.io.IOException:javax.security.sasl.SaslException:GSS啓動 失敗[由GSSException,並引起:沒有有效的憑證提供 (機制級別:無法找到任何的Kerberos TGT)在 java.security.AccessController.doPrivileged(本機方法)]在 org.apache.hadoop.ipc.Client $連接$ 1.run(Client.java:548)在 javax.security.auth.Subject.doAs(Subject.java:396)at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1332) at org.apache.hadoop.ipc。客戶端$ Connection.handleSaslConnectionFailure(Client.java:512) at org.apache.hadoop.ipc.Client $ Connection.setupIOstreams(Client.java:596) at org.apache.hadoop.ipc.Client $ Connection。訪問$ 1700(Client.java:220) at org.apache.hadoop.ipc.Client.getConnection(Client.java:1213)at org.apache.hadoop.ipc.Client.call(Client.java:1140)。 ..更多 原因:javax.security.sasl.SaslException:GSS啓動失敗 [由GSSException引起:未提供有效的憑據(機制 級別:無法找到任何Kerberos tgt)]在 com.sun.security。 sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:194) at org.a pache.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) at org.apache.hadoop.ipc.Client $ Connection $ 2.run(Client.java:589)at 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) 在 :沒有有效憑據提供 (無法找到任何的Kerberos TGT機制級) sun.security.jgss.krb5.Krb5MechFactory.getCredentialElement(Krb5MechFactory.java:106) 在 sun.security.jgss.krb5.Krb5MechFactory.getMechanismContext(Krb5MechFactory.java:172) 在 sun.security.jgss.GSSManagerImpl。 getMechanismContext(GSSManagerImpl.java:209) 在 sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:195) 在 sun.security.jgss.GSSContextImpl.initSecContex T(GSSContextImpl.java:162) 在 com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:175) ...... 37多個

回答

2

最後,我找到了原因:當kerberos使用AES-256加密時,您應該安裝JCE。我在HDFS集羣內的機器上安裝了JCE,但我沒有意識到集羣外的客戶機也需要JCE。這就是爲什麼我可以在HDFS集羣內的機器上訪問HDFS,但不能在HDFS集羣外的機器上訪問HDFS的原因。