Hadoop HDFS - 无法连接到master上的端口

时间:2012-01-02 10:28:42

标签: networking hadoop port 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 testing的目录,然后尝试使用hadoop fs -copyFromLocal /tmp/*.txt testing将一些文件复制到其中。这是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 ...

等等。当我尝试从DataNode计算机运行hadoop fs -lsr .时,会出现类似的问题,但只能获得以下内容:

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).
...

我说它很相似,因为我怀疑这是一个端口可用性问题。运行telnet master 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服务器,我没有。

以下是我的群集中我的一个节点的示例(节点名为hadoop01hadoop02等,其中主节点和辅助节点为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

希望这有帮助。

2 个答案:

答案 0 :(得分:9)

当有远程节点连接到NameNode时,将名称替换为hdfs:// localhost:9000中的localhost,使用ip-address或hostname作为NameNode中的fs.default.name属性。

  

检查所有节点上的所有进程是否已启动并运行jps

日志文件中可能存在一些错误。 jps确保进程正在运行。

答案 1 :(得分:0)

更正/ etc / hosts文件以包含localhost或更正核心站点文件以指定承载 HDFS 文件系统的节点的ip或主机名。