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

Hadoop 如何让我的hdfs docker客户端运行?,hadoop,docker,hdfs,Hadoop,Docker,Hdfs,我从以下几点开始: 我正在观察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

我从以下几点开始:

我正在观察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
我正在尝试使用以下内容来连接我的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 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
172.17.0.3
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
以下是我获取IP地址的方式:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' d9c9855cfaf0
其结果如下:

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
172.17.0.3
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
下面是我运行测试的方式:

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 /
其结果如下:

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
172.17.0.3
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客户端运行?

默认情况下,每个容器将使用
网桥
网络驱动程序,并有自己的隔离网络环境。这不是一回事,但你可以简单地认为它们是不同的服务器,有自己的私有IP。因此,当您启动客户端容器并尝试连接地址
hdfs://localhost:50075
,它实际上会尝试连接自身的端口
50075
,而不是连接hadoop服务器容器,显然它会被拒绝。有关更多信息,请参阅他们的网站

同一主机上的容器可以通过它们的私有IP相互通信,因此要连接到hadoop服务器容器,首先可以通过以下方式找到它的私有IP:

$> docker inspect --format '{{ .NetworkSettings.IPAddress }}' 378
192.168.0.2
然后我可以通过以下方式使用客户端(我认为端口应该是9000):


如果您想在另一台主机上运行客户机容器,那么您需要知道。

对于客户机,您可以仅对hdfs客户机这样的客户机使用瘦docker映像。
其中一个我以前使用过的非常好:

您是否打开了hdfs服务器容器上的端口,在docker run命令中放入-p选项?是否将任何
hdfs site.xml
core site.xml
装入容器?否则,客户端如何知道如何访问服务器?谢谢@cricket_007,这很有帮助。您传入的地址肯定会覆盖它吗?是的,使用hadoop fs-fs的IPhdfs://192.168.0.3:9000将覆盖这一点,但这些配置文件中还有其他重要的内容。无论如何,需要在dockerfile上公开。可以映射带有expose的端口,但也需要在docker上运行-p才能将它们真正映射到主机。感谢@shizhz-我还不确定您是否启动了第一个容器,然后作为客户端运行了第二个容器。看起来您刚在最初启动的主机上运行了该命令。谢谢你的帮助。我会更新这个问题。很高兴帮助@hawkeye,但是为什么您的服务器容器使用ip
172.17.0.3
,但使用
hdfs://192.168.0.3:9000
当您运行客户端容器时?我检查了您的Dockerfile,发现它除了公开一个额外的端口
2022
,但是这个端口在您的服务器容器中没有使用,所以您有必要这样做吗?此外,使用
-p
将端口映射到主机是为了将容器内的服务公开给外部世界,也是在容器之间进行多主机通信的方法之一。正如我在回答中提到的,如果您只想在同一台机器上测试
客户机
服务器
,您不必这样做就可以让它们能够相互交谈,使用容器的IP就足够了。