我正在使用:
开始hdfs serverdocker 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
我尝试connect via hdfs
到我的泊坞广告容器:
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客户端运行?
答案 0 :(得分:2)
默认情况下,每个容器都将使用bridge
网络驱动程序,并拥有自己的隔离网络环境。它不是一回事,但你可以简单地认为它们是不同的服务器并拥有自己的私有IP。因此,当您启动客户端容器并尝试连接地址hdfs://localhost:50075
时,它实际上会尝试连接自身的端口50075
,而不是连接hadoop服务器容器,显然它是&#39 ;会被拒绝。有关详细信息,请参阅他们的official network docs。
同一主机上的容器可以通过其私有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
如果要在其他主机上运行客户端容器,则需要知道multi-host networking。
答案 1 :(得分:0)
对于客户端,您可以仅将瘦docker映像用于hdfs客户端之类的客户端。 其中之一是我以前使用过的非常好:https://hub.docker.com/r/ryneyang/hadoop-utils/