【发布时间】:2019-09-03 01:19:59
【问题描述】:
我对一个 Hadoop 应用程序进行了 docker 化,并且出于显而易见的原因尝试从容器外部访问名称节点。
我使用 Dockerfile 暴露了端口:
EXPOSE 2122 9000
我用以下方式启动容器:
$ docker run -dit --rm --privileged --pid=host -p 2122:2122 -p 9000:9000 --name hnode ns/hnode
2122 是我用于 SSH 的端口。我已经安装了 SSH 服务器,试了一下,我能够从容器外部通过 SSH 连接。
我还向 Hadoop 添加了使用此 SSH 端口的选项,而不是 ENV HADOOP_SSH_OPTS="-p 2122"。
使用以下 core-site.xml:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
当我尝试从容器内部远程登录 9000 时,一切都很好:
[hadoop@1f5c7934fe45 hadoop]$ telnet localhost 9000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
|��☼►☻↑ ")org.apache.hadoop.ipc.RPC$VersionMismatch*>Server IPC version 9 cannot communicate with client version 130♫: @☺Connection closed by foreign host.
您清楚地看到它是另一端的名称节点。
但是当我尝试使用主机 ip 从容器内部远程登录 namenode 使用的 9000 端口时,我得到:
[hadoop@1f5c7934fe45 hadoop]$ telnet 172.17.0.2 9000
Trying 172.17.0.2...
telnet: connect to address 172.17.0.2: Connection refused
即使 SSH 工作正常:
[hadoop@1f5c7934fe45 hadoop]$ telnet 172.17.0.2 2122
Trying 172.17.0.2...
Connected to 172.17.0.2.
Escape character is '^]'.
SSH-2.0-OpenSSH_7.4
Protocol mismatch.
Connection closed by foreign host.
为什么 SSH 可以工作,而不是 Hadoop 的 namenode?p>
【问题讨论】:
-
我添加了 Hadoop 组件的 HTTP 接口的端口,这些端口在外部运行良好。只有namenode不会和陌生人说话。 namenode 日志中也没有什么特别的内容。
-
我刚刚使用容器的外部 IP 更改了
core-site.xml属性。 Telnet 有效,很有希望。