2012-11-26 3 views
2

kerberos authencication으로 HDFS를 구성 했으므로 HDFS 클러스터 내의 모든 컴퓨터에서 자체 키 테이블을 사용하여 HDFS에 액세스 할 수 있습니다. 그러나 HDFS 클러스터 외부의 원격 서버에서 동일한 키탭을 사용하여 HDFS에 액세스하면 액세스 할 수 없습니다. 그런데 다음과 같은 오류 메시지가 나타납니다. hadoop 클러스터 외부의 원격 컴퓨터에 서버의 구성 파일 krb5.conf를 복사했습니다.Kerberos가있는 Hdfs가 원격 서버에서 액세스 할 수 없습니다.

때 java.io.IOException가 : 현지 예외에 실패했습니다 때 java.io.IOException : javax.security.sasl.SaslException : GSS는 GSSException가에 의한 [실패 시작 : 유효한 자격 증명 (제공되지기구 수준 : 실패 Kerberos tgt를 찾으려면 )]; 호스트 세부 정보 : 로컬 호스트 : "우분투/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. org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.getFileInfo (ClientNamenodeProtocolTranslatorPB.java:628) sun.reflect에서 에서 $ Proxy9.getFileInfo (알 수없는 소스)에서 ProtobufRpcEngine $ Invoker.invoke (ProtobufRpcEngine.java:202) . NativeMethodAccessorImpl.invoke0 sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method의에서 에서 sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39)에서 (기본 방법) . invoke (Method.java:597),451,515,$ Proxy10.getFileInfo에서 org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod org.apache.hadoop.io.retry.RetryInvocationHandler.invoke (RetryInvocationHandler.java:83)에서 (RetryInvocationHandler.java:164) 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) at org.apache.hadoop.fs.FileSystem.globStatusInternal (FileSystem.java:1524) at org.apache.hadoop.fs.FileSystem.globStatus (FileSystem.java:1503) at org.apache .hadoop.fs.FileSystem.globStatus (FileSystem.java:1481) at org.apache.hadoop.fs.shell.PathData.expandAsGlob (PathData.java:271) at org.apache.hadoop.fs.shell org.apache.hadoop.fs.shell.Command.expandArguments (Command.java:207) org.apache.hadoop.fs.shell.Command.processRawArguments에서 에서 .Command.expandArgument (Command.java:224) (Command.java:190) at org.apache.hadoop.fs.shell.Command.run (Command.java:154) at org.apache.hadoop.fs.FsShell.run (FsShell.java:254) at org.apache.hadoop.util.ToolRunner.run (ToolRunner.java:70) 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 시작 실패 [GSSException에 의해 발생 : 유효한 자격 증명이 제공되지 않음 에서 (메커니즘 수준 : Kerberos tgt를 찾지 못했습니다.) 에서 java.security.AccessController.doPrivileged 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) org.apache.hadoop.ipc.Client $ Connection.setupIOstreams (Client.java:596) org.apache.hadoop.ipc.Client $ Connection. org.apache.hadoop.ipc.Client.getConnection (Client.java:1213) at org.apache.hadoop.ipc.Client.call (Client.java:1140)에서 $ 1700 (Client.java:220) 에 액세스하십시오. .. 25 more 발생 원인 : javax.security.sasl.SaslException : GSS 초기화 실패 GSSException에 의해 발생 함 : 유효한 자격 증명이 제공되지 않음 ( 수준 : Kerberos tgt를 찾지 못했습니다)] com.sun.security. gmail.com org.apache.hadoop.ipc에서 org.apache.hadoop.ipc.Client $ Connection.setupSaslConnection (Client.java:423) 에서 pache.hadoop.security.SaslRpcClient.saslConnect (SaslRpcClient.java:137) . 클라이언트 $ 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 (네이티브 메소드) 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가 : 유효한 자격 증명이 없습니다 제공 (메커니즘 레벨 : 어떤에서 Kerberos TGT를 찾지 못했습니다) sun.security.jgss.krb5.Krb5InitCredential.getInstance (Krb5InitCredential.java:130)에서 에서 sun.security.jgss.krb5.Krb5MechFactory.getCredentialElement sun.security.jgss.GSSManagerImpl에서 sun.security.jgss.krb5.Krb5MechFactory.getMechanismContext (Krb5MechFactory.java:172)에서 (Krb5MechFactory.java:106) . sun.security.jgss.GSSContextImpl.initSecContex에서 getMechanismContext sun.security.jgss.GSSContextImpl.initSecContext (GSSContextImpl.java:195)에서 (GSSManagerImpl.java:209) t com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge (GssKrb5Client.java:175)에서 (GSSContextImpl.java:162) 는 ... 37 개

답변

2

마지막으로, 나는 그 이유를 찾을 수 : Kerberos가 AES-256 암호화를 사용하면 JCE를 설치해야합니다. HDFS 클러스터 내의 시스템에 JCE를 설치했지만 클러스터 외부의 클라이언트 시스템에도 JCE가 필요하다는 것을 인식하지 못했습니다. 이것이 내가 HDFS 클러스터 내에서 컴퓨터의 HDFS에 액세스 할 수 있지만 HDFS 클러스터 외부의 컴퓨터에서는 액세스 할 수없는 이유입니다.

관련 문제