복붙노트

[HADOOP] hdfs - ls : 로컬 예외에 실패했습니다 : com.google.protobuf.InvalidProtocolBufferException :

HADOOP

hdfs - ls : 로컬 예외에 실패했습니다 : com.google.protobuf.InvalidProtocolBufferException :

hdfs에서 내 디렉터리를 나열하려면 아래 사용하려고합니다.

ubuntu@ubuntu:~$ hadoop fs -ls hdfs://127.0.0.1:50075/ 
ls: Failed on local exception: com.google.protobuf.InvalidProtocolBufferException: 
Protocol    message end-group tag did not match expected tag.; 
Host Details : local host is: "ubuntu/127.0.0.1"; destination host is: "ubuntu":50075; 

여기에 / etc / hosts 파일이 있습니다.

127.0.0.1       ubuntu localhost
#127.0.1.1      ubuntu

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

어떻게 내 디렉터리를 나열하려면 hdfs : // 제대로 사용합니까?

나는 couldera 4.3을 우분투 12.04에서 사용하고 있습니다.

해결법

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

    1.HDFS는 50075에서 실행되지 않습니다. hdfs 포트를 확인하려면 linux에서 다음 명령을 사용하십시오.

    HDFS는 50075에서 실행되지 않습니다. hdfs 포트를 확인하려면 linux에서 다음 명령을 사용하십시오.

    hdfs getconf -confKey fs.default.name
    

    당신은 출력을 얻을 것이다.

    hdfs://hmaster:54310
    

    그에 맞게 URL을 수정하십시오.

  2. ==============================

    2.cloudera 관리자에서 Name 노드의 구성 항목 "NameNode Service RPC Port"또는 "dfs.namenode.servicerpc-address"를 확인하십시오. URL에서 동일한 포트 번호를 추가하십시오. 그리고 그것은 잘 작동합니다.

    cloudera 관리자에서 Name 노드의 구성 항목 "NameNode Service RPC Port"또는 "dfs.namenode.servicerpc-address"를 확인하십시오. URL에서 동일한 포트 번호를 추가하십시오. 그리고 그것은 잘 작동합니다.

  3. ==============================

    3./usr/local/hadoop/etc/hadoop/core-site.xml에 있습니다.

    /usr/local/hadoop/etc/hadoop/core-site.xml에 있습니다.

    로컬 호스트 대신 0.0.0.0 즉 ..을 사용하십시오.

    hdfs : // localhost : 50075 를 다음으로 변경하십시오.

    <value>hdfs://0.0.0.0:50075</value>
    

    이것은 나를 위해 문제를 해결했다.

  4. ==============================

    4.NN은 포트 50075에서 실행되고 있습니까? 모든 디렉토리를 나열하려면 실제로 그렇게 할 필요가 없습니다. 단순히 hadoop fs -ls /를 사용하십시오. 이렇게하면 루트 디렉토리 아래에있는 모든 디렉토리가 나열됩니다.

    NN은 포트 50075에서 실행되고 있습니까? 모든 디렉토리를 나열하려면 실제로 그렇게 할 필요가 없습니다. 단순히 hadoop fs -ls /를 사용하십시오. 이렇게하면 루트 디렉토리 아래에있는 모든 디렉토리가 나열됩니다.

  5. ==============================

    5.호스트 이름을 확인할 수 있습니까? / etc / hostname 파일과 / etc / hosts 파일에 같은 이름 (우분투)이 있어야합니다.

    호스트 이름을 확인할 수 있습니까? / etc / hostname 파일과 / etc / hosts 파일에 같은 이름 (우분투)이 있어야합니다.

  6. ==============================

    6.NN의 tcp 포트가 hdfs-site.xml에 정의 된 50075에 있는지 확인하십시오.

    NN의 tcp 포트가 hdfs-site.xml에 정의 된 50075에 있는지 확인하십시오.

    <property>
    <name>dfs.namenode.rpc-address.nn1</name>
    <value>r101072036.sqa.zmf:9000</value>
    </property>
    

    내 문제는 HTTP 주소 포트를 사용하여 NN에 연결하는 것인데, 이는 같은 예외를 발생시킵니다.

    http 포트는 hdfs-site.xml에서도 설정됩니다 :

    <property>
    <name>dfs.namenode.http-address.nn1</name>
    <value>r101072036.sqa.zmf:8000</value>
    </property>
    
  7. ==============================

    7.이 오류는 다음과 같은 이유로 발생합니다.

    이 오류는 다음과 같은 이유로 발생합니다.

    netstat -tulpn 명령으로 특정 포트에서 실행중인 것을 확인하십시오. grep 8080 kill -9

  8. from https://stackoverflow.com/questions/16372997/hdfs-ls-failed-on-local-exception-com-google-protobuf-invalidprotocolbuffere by cc-by-sa and MIT license