如何让我的hdfs docker客户端运行?

ruarlubt  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(423)

我正在启动hdfs服务器:

docker run -d sequenceiq/hadoop-docker:2.6.0

我正在观察docker进程的运行情况

docker ps

得到以下结果:

6bfa4f2fd3b5        sequenceiq/hadoop-docker:2.6.0   "/etc/bootstrap.sh -d"   
31 minutes ago      Up 31 minutes       22/tcp, 8030-8033/tcp, 8040/tcp, 
8042/tcp, 8088/tcp, 49707/tcp, 50010/tcp, 50020/tcp, 50070/tcp, 50075/tcp, 
50090/tcp   kind_hawking

我正试着通过 hdfs 到我的docker容器:

sudo docker run -ti davvdg/hdfs-client hadoop fs -fs hdfs://localhost:50075 -ls /

结果如下:

ls: Call From a48f81b8e1bb/172.17.0.3 to localhost:50075 failed on 
connection exception: java.net.ConnectException: Connection refused; For 
more details see:  http://wiki.apache.org/hadoop/ConnectionRefused

我的问题是:如何让我的hdfs docker客户端运行?
编辑:感谢@shizhz的一些有用的反馈,我正在更新这个问题。
这是我的 Dockerfile ```
FROM sequenceiq/hadoop-docker:2.6.0

CMD ["/etc/bootstrap.sh", "-d"]

Hdfs ports

EXPOSE 50010 50020 50070 50075 50090 8020 9000

Mapred ports

EXPOSE 10020 19888

Yarn ports

EXPOSE 8030 8031 8032 8033 8040 8042 8088

Other ports

EXPOSE 49707 2122

EXPOSE 9000

EXPOSE 2022

以下是我如何塑造形象:

sudo docker build -t my-hdfs .

下面是我运行图像的方式:

sudo docker run -d -p my-hdfs

以下是我检查流程的方式:

sudo docker ps

结果如下:

d9c9855cfaf0 my-hdfs "/etc/bootstrap.sh -d" 2 minutes ago
Up 2 minutes 0.0.0.0:32801->22/tcp, 0.0.0.0:32800->2022/tcp,
0.0.0.0:32799->2122/tcp, 0.0.0.0:32798->8020/tcp, 0.0.0.0:32797->8030/tcp,
0.0.0.0:32796->8031/tcp, 0.0.0.0:32795->8032/tcp, 0.0.0.0:32794->8033/tcp,
0.0.0.0:32793->8040/tcp, 0.0.0.0:32792->8042/tcp, 0.0.0.0:32791->8088/tcp,
0.0.0.0:32790->9000/tcp, 0.0.0.0:32789->10020/tcp, 0.0.0.0:32788->19888/tcp,
0.0.0.0:32787->49707/tcp, 0.0.0.0:32786->50010/tcp, 0.0.0.0:32785->50020/tcp,
0.0.0.0:32784->50070/tcp, 0.0.0.0:32783->50075/tcp, 0.0.0.0:32782->50090/tcp
agitated_curran

以下是如何获取ip地址:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' d9c9855cfaf0

结果如下:

172.17.0.3

下面是我如何运行测试:

sudo docker run --rm sequenceiq/hadoop-docker:2.6.0 /usr/local/hadoop-2.6.0/bin/hadoop fs -fs hdfs://192.168.0.3:9000 -ls /

结果如下:

17/04/08 19:51:54 INFO ipc.Client: Retrying connect to server:
192.168.0.3/192.168.0.3:9000. Already tried 0 time(s); maxRetries=45
ls: Call From fafcd377f4a0/172.17.0.2 to 192.168.0.3:9000 failed on connection
exception: java.net.ConnectException: Connection refused; For more details
see: http://wiki.apache.org/hadoop/ConnectionRefused

我的问题是:如何让我的hdfs docker客户端运行?
wlwcrazw

wlwcrazw1#

对于客户端,您可以仅对hdfs客户端这样的客户端使用瘦docker映像。其中一个很好,我以前用过:https://hub.docker.com/r/ryneyang/hadoop-utils/

jucafojl

jucafojl2#

默认情况下,每个容器将使用 bridge 网络驱动程序有自己的隔离网络环境。这不是一回事,但你可以简单地认为他们是不同的服务器,有自己的私人IP。所以当你启动一个客户端容器并尝试连接地址 hdfs://localhost:50075 ,它实际上会尝试连接端口 50075 显然,它将被拒绝,而不是连接hadoop服务器容器。更多信息请参考他们的官网文档。
同一主机上的容器可以通过它们的私有ip相互通信,因此要连接到hadoop服务器容器,首先可以通过以下方法找到它的私有ip:

$> docker inspect --format '{{ .NetworkSettings.IPAddress }}' 378
192.168.0.2

然后我可以使用客户端(我认为端口应该是9000):

$> docker run --rm sequenceiq/hadoop-docker:2.6.0 /usr/local/hadoop-2.6.0/bin/hadoop fs -fs hdfs://192.168.0.2:9000 -ls /
Found 1 items
drwxr-xr-x   - root supergroup          0 2015-01-15 04:04 /user

如果您想在另一台主机上运行客户机容器,那么您需要了解多主机网络。

相关问题