在内部(即内部网络;专用IP地址到专用IP地址),我可以使用以下命令访问我的HDFS:
hdfs dfs -ls hdfs://#.#.#.#/
但是,当我在HDFS名称节点所驻留的网络外部的计算机上尝试相同的操作时(显然使用名称节点计算机的WAN IP而不是其LAN IP),我得到:
ls: DestHost:destPort ec2-▒-▒-▒-▒.compute-1.amazonaws.com:8020 , LocalHost:localPort mymachine/127.0.0.1:0. Failed on local exception: java.io.IOException: Connection reset by peer
namenode日志显示为:
INFO org.apache.hadoop.ipc.Server: Socket Reader #1 for port 8020: readAndProcess from client ▒.▒.▒.▒:▒ threw exception [java.io.IOException: Connection reset by peer]
java.io.IOException: Connection reset by peer
at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
at sun.nio.ch.IOUtil.read(IOUtil.java:197)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:377)
at org.apache.hadoop.ipc.Server.channelRead(Server.java:3486)
at org.apache.hadoop.ipc.Server.access$2600(Server.java:138)
at org.apache.hadoop.ipc.Server$Connection.readAndProcess(Server.java:2144)
at org.apache.hadoop.ipc.Server$Listener.doRead(Server.java:1389)
at org.apache.hadoop.ipc.Server$Listener$Reader.doRunLoop(Server.java:1245)
at org.apache.hadoop.ipc.Server$Listener$Reader.run(Server.java:1216)
我的core-site.xml
读为:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://0.0.0.0:8020</value>
</property>
</configuration>
请注意,我还尝试将fs.defaultFS
的值设置为hdfs://#.#.#.#:8020
。我还尝试将其设置为hdfs://hadoophost:8020
,并将#.#.#.# hadoophost
添加到/etc/hosts
的顶部。 (在这两种情况下,#.#.#.#
显然都是名称节点计算机的LAN IP。)结果是相同的。
我的hdfs-site.xml
读为:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>file:///home/hadoop/hadoopdata/hdfs/namenode</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>file:///home/hadoop/hadoopdata/hdfs/datanode</value>
</property>
</configuration>
请注意,我可以在端口telnet
上从外部8020
到名称节点的机器上。
启用外部访问Hadoop文件系统时需要缺少哪些设置?