복붙노트

[HADOOP] Hadoop HDFS - 마스터의 포트에 연결할 수 없음

HADOOP

Hadoop HDFS - 마스터의 포트에 연결할 수 없음

테스트 용으로 작은 Hadoop 클러스터를 설정했습니다. 설치 프로그램은 NameNode (1 기계), SecondaryNameNode (1) 및 모든 DataNodes (3)를 사용하여 상당히 잘 수행되었습니다. 머신의 이름은 "master", "secondary"및 "data01", "data02"및 "data03"입니다. 모든 DNS가 올바르게 설정되었으며 암호가없는 SSH가 마스터 / 보조에서 모든 시스템으로 구성되었습니다.

bin / hadoop namenode -format으로 클러스터를 포맷 한 다음 bin / start-all.sh를 사용하여 모든 서비스를 시작했습니다. 모든 노드의 모든 프로세스가 jps로 가동되어 실행 중인지 확인했습니다. 기본 구성 파일은 다음과 같습니다.

<!-- conf/core-site.xml -->
<configuration>
  <property>
    <name>fs.default.name</name>
    <!-- 
      on the master it's localhost
      on the others it's the master's DNS
      (ping works from everywhere)
    -->
    <value>hdfs://localhost:9000</value>
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <!-- I picked /hdfs for the root FS -->
    <value>/hdfs/tmp</value>
  </property>
</configuration>

<!-- conf/hdfs-site.xml -->
<configuration>
  <property>
    <name>dfs.name.dir</name>
    <value>/hdfs/name</value>
  </property>
  <property>
    <name>dfs.data.dir</name>
    <value>/hdfs/data</value>
  </property>
  <property>
    <name>dfs.replication</name>
    <value>3</value>
  </property>
</configuration>

# conf/masters
secondary

# conf/slaves
data01
data02
data03

지금 HDFS를 올바로 실행하려고합니다.

나는 hadoop fs -mkdir 테스트를 테스트하기 위해 dir을 만들었고, hadoop fs -copyFromLocal /tmp/*.txt 테스트를 사용하여 파일을 복사하려고 시도했다. 이것은 hadoop이 충돌 할 때, 내게이 정도를 준다.

WARN hdfs.DFSClient: DataStreamer Exception: org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /user/hd/testing/wordcount1.txt could only be replicated to 0 nodes, instead of 1
  at ... (such and such)

WARN hdfs.DFSClient: Error Recovery for block null bad datanode[0] nodes == null
  at ...

WARN hdfs.DFSClient: Could not get block locations. Source file "/user/hd/testing/wordcount1.txt" - Aborting...
  at ...

ERROR hdfs.DFSClient: Exception closing file /user/hd/testing/wordcount1.txt: org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /user/hd/testing/wordcount1.txt could only be replicated to 0 nodes, instead of 1
  at ...

등등. hadoop fs -lsr을 실행하려고해도 비슷한 문제가 발생합니다. DataNode 머신에서 다음을 얻기 위해서만 필요합니다 :

12/01/02 10:02:11 INFO ipc.Client: Retrying connt to server master/192.162.10.10:9000. Already tried 0 time(s).
12/01/02 10:02:12 INFO ipc.Client: Retrying connt to server master/192.162.10.10:9000. Already tried 1 time(s).
12/01/02 10:02:13 INFO ipc.Client: Retrying connt to server master/192.162.10.10:9000. Already tried 2 time(s).
...

이것이 포트 가용성 문제라고 의심하기 때문에 비슷한 말입니다. 텔넷 마스터 9000을 실행하면 포트가 닫혀 있음을 알 수 있습니다. 나는 이것이 IPv6 충돌 문제 일 수 있으며, 따라서 conf / hadoop-env.sh에서 다음을 정의한 어딘가를 읽었다.

export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true

그러나 그것은 그 속임수를하지 않았다. 마스터에서 netstat을 실행하면 다음과 같은 결과가 나타납니다.

Proto Recv-Q Send-Q  Local Address       Foreign Address      State
tcp        0      0  localhost:9000      localhost:56387      ESTABLISHED
tcp        0      0  localhost:56386     localhost:9000       TIME_WAIT
tcp        0      0  localhost:56387     localhost:9000       ESTABLISHED
tcp        0      0  localhost:56384     localhost:9000       TIME_WAIT
tcp        0      0  localhost:56385     localhost:9000       TIME_WAIT
tcp        0      0  localhost:56383     localhost:9000       TIME_WAIT

이 시점에서 나는 문제가 포트 (9000)에 있다는 것을 확신하지만 구성에 관한 한 내가 무엇을 놓쳤는 지 확신하지 못한다. 어떤 아이디어? 감사.

DNS 이름을 / etc / hosts에 하드 코딩하면이 문제를 해결할뿐만 아니라 연결 속도가 빨라진다는 것을 알게되었습니다. 단점은 클러스터의 모든 시스템에서이 작업을 수행해야하며 새 노드를 추가해야한다는 것입니다. 또는 DNS 서버를 설정할 수도 있습니다.

다음은 클러스터에있는 하나의 노드 샘플입니다 (노드의 이름은 hadoop01, hadoop02 등이며 마스터와 보조 노드는 01과 02 임). 그것의 대부분이 OS에 의해 생성되는 노드 :

# this is a sample for a machine with dns hadoop01
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastrprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allroutes

# --- Start list of nodes
192.168.10.101 hadoop01
192.168.10.102 hadoop02
192.168.10.103 hadoop03
192.168.10.104 hadoop04
192.168.10.105 hadoop05
192.168.10.106 hadoop06
192.168.10.107 hadoop07
192.168.10.108 hadoop08
192.168.10.109 hadoop09
192.168.10.110 hadoop10
# ... and so on

# --- End list of nodes

# Auto-generated hostname. Please do not remove this comment.
127.0.0.1 hadoop01 localhost localhost.localdomain

희망이 도움이됩니다.

해결법

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

    1.NameNode에 연결하는 원격 노드가있는 경우 NameNode의 fs.default.name 등록 정보에 대해 hdfs : // localhost : 9000을 ip-address 또는 hostname으로 대체하십시오.

    NameNode에 연결하는 원격 노드가있는 경우 NameNode의 fs.default.name 등록 정보에 대해 hdfs : // localhost : 9000을 ip-address 또는 hostname으로 대체하십시오.

    로그 파일에 오류가있을 수 있습니다. jps는 프로세스가 실행 중인지 확인합니다.

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

    2./ etc / hosts 파일을 수정하여 localhost를 포함 시키거나 코어 사이트 파일을 수정하여 HDFS 파일 시스템을 호스트하는 노드의 IP 또는 호스트 이름을 지정하십시오.

    / etc / hosts 파일을 수정하여 localhost를 포함 시키거나 코어 사이트 파일을 수정하여 HDFS 파일 시스템을 호스트하는 노드의 IP 또는 호스트 이름을 지정하십시오.

  3. from https://stackoverflow.com/questions/8699753/hadoop-hdfs-cannot-connect-to-port-on-master by cc-by-sa and MIT license