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

时间:2017-04-08 12:45:24

标签: hadoop docker hdfs

我正在使用:

开始hdfs server
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

我尝试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客户端运行?

2 个答案:

答案 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/