복붙노트

[HADOOP] Kerberos 화 된 Hadoop 클러스터와 통신을 시도하는 동안 "클라이언트와 서버간에 공통된 보호 계층이 없습니다"

HADOOP

Kerberos 화 된 Hadoop 클러스터와 통신을 시도하는 동안 "클라이언트와 서버간에 공통된 보호 계층이 없습니다"

나는 kerberized Hadoop 클러스터 (CDH 5.3 / HDFS 2.5.0) 프로그래밍 방식으로 통신을 위해 노력하고있어.

유효한 Kerberos 토큰이 클라이언트쪽에 있습니다. 하지만 아래와 같은 오류가 발생합니다. "클라이언트와 서버 사이에 공통된 보호 계층이 없습니다".

이 오류는 무엇을 의미하며이를 해결하거나 해결할 수있는 방법이 있습니까?

이 것이 HDFS-5688과 관련이 있습니까? 티켓은 "hadoop.rpc.protection"속성을 "인증"(예 : this)과 같이 설정해야 함을 암시하는 것으로 보입니다.

클러스터의 모든 서버에서이를 설정해야하고 클러스터가 반송되어야합니까? 나는 클러스터에 쉽게 접근 할 수 없기 때문에 'hadoop.rpc.protection'이 실제적인 원인인지를 이해할 필요가있다. 적어도 'core-default.xml'문서에 따르면 '인증'은 기본적으로 사용되는 값이어야합니다.

java.io.IOException : 로컬 예외에 실패했습니다 : java.io.IOException : server1 / server1.acme.net@xxx.acme.net에 대한 연결을 server2.acme.net/10.XX.XXX.XXX로 설정할 수 없습니다. : 8020; 호스트 세부 정보 : 로컬 호스트 : "some-host.acme.net/168.XX.XXX.XX"; 대상 호스트 : "server2.acme.net": 8020;

    at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:764)

    at org.apache.hadoop.ipc.Client.call(Client.java:1415)

    at org.apache.hadoop.ipc.Client.call(Client.java:1364)

    at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:206)

    at com.sun.proxy.$Proxy24.getFileInfo(Unknown Source)

    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

    at java.lang.reflect.Method.invoke(Method.java:498)

    at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:187)

    at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:102)

    at com.sun.proxy.$Proxy24.getFileInfo(Unknown Source)

    at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.getFileInfo(ClientNamenodeProtocolTranslatorPB.java:707)

    at org.apache.hadoop.hdfs.DFSClient.getFileInfo(DFSClient.java:1785)

    at org.apache.hadoop.hdfs.DistributedFileSystem$17.doCall(DistributedFileSystem.java:1068)

    at org.apache.hadoop.hdfs.DistributedFileSystem$17.doCall(DistributedFileSystem.java:1064)

    at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)

    at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:1064)

    at org.apache.hadoop.fs.FileSystem.exists(FileSystem.java:1398)

    ... 11 more

원인 : java.io.IOException : principal1/server1.acme.net@xxx.acme.net에 대한 연결을 server2.acme.net/10.XX.XXX.XXX:8020에 설정할 수 없습니다.

    at org.apache.hadoop.ipc.Client$Connection$1.run(Client.java:671)

    at java.security.AccessController.doPrivileged(Native Method)

    at javax.security.auth.Subject.doAs(Subject.java:422)

    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1614)

    at org.apache.hadoop.ipc.Client$Connection.handleSaslConnectionFailure(Client.java:642)

    at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:725)

    at org.apache.hadoop.ipc.Client$Connection.access$2800(Client.java:367)

    at org.apache.hadoop.ipc.Client.getConnection(Client.java:1463)

    at org.apache.hadoop.ipc.Client.call(Client.java:1382)

    ... 31 more

원인 : javax.security.sasl.SaslException : 클라이언트와 서버간에 공통적 인 보호 계층이 없음

    at com.sun.security.sasl.gsskerb.GssKrb5Client.doFinalHandshake(GssKrb5Client.java:251)

    at com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:186)

    at org.apache.hadoop.security.SaslRpcClient.saslEvaluateToken(SaslRpcClient.java:483)

    at org.apache.hadoop.security.SaslRpcClient.saslConnect(SaslRpcClient.java:427)

    at org.apache.hadoop.ipc.Client$Connection.setupSaslConnection(Client.java:552)

    at org.apache.hadoop.ipc.Client$Connection.access$1800(Client.java:367)

    at org.apache.hadoop.ipc.Client$Connection$2.run(Client.java:717)

    at org.apache.hadoop.ipc.Client$Connection$2.run(Client.java:713)

    at java.security.AccessController.doPrivileged(Native Method)

    at javax.security.auth.Subject.doAs(Subject.java:422)

    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1614)

    at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:712)

    ... 34 more

해결법

  1. ==============================

    1.SASL에서 오는 "클라이언트와 서버 간의 공통된 보호가 없음"오류를 수정하려면 "hadoop.rpc.protection"을 클러스터의 서버 측에 설정된 것과 동일한 값으로 설정해야했습니다. 이 경우에는 "개인 정보"가 발생했습니다.

    SASL에서 오는 "클라이언트와 서버 간의 공통된 보호가 없음"오류를 수정하려면 "hadoop.rpc.protection"을 클러스터의 서버 측에 설정된 것과 동일한 값으로 설정해야했습니다. 이 경우에는 "개인 정보"가 발생했습니다.

    또한 클러스터는 HA 용으로 구성되어 있으므로 HDFS URI ( "fs.defaultFS") 및 "dfs.namenode.kerberos.principal"속성에 사용할 올바른 호스트 이름을 선택해야합니다.

    Configuration config = new Configuration();
    config.set("fs.defaultFS", "hdfs://host1.acme.com:8020");
    config.set("hadoop.security.authentication", "kerberos");
    config.set("hadoop.rpc.protection", "privacy");
    // Need this or we get the error "Server has invalid Kerberos principal":
    config.set("dfs.namenode.kerberos.principal",  
        "hdfs/host1.acme.com@ACME.DYN.ROOT.NET");
    
  2. from https://stackoverflow.com/questions/37714669/no-common-protection-layer-between-client-and-server-while-trying-to-communica by cc-by-sa and MIT license