2017-04-08 20 views
1

我開始一個hdfs server有:如何讓我的hdfs docker客戶端運行?

docker run -d sequenceiq/hadoop-docker:2.6.0 

我觀察運行的泊塢窗過程與

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/

這給出了以下resut:

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泊塢窗客戶端運行?


編輯: 感謝來自@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泊塢窗客戶端運行?

+0

您是否在您的hdfs服務器容器中將碼頭運行命令中的-p選項設置爲打開端口? – OscarAkaElvis

+0

您是否已將任何'hdfs-site.xml'或'core-site.xml'裝入容器?否則,客戶如何知道如何訪問服務器? –

+0

謝謝@ cricket_007這很有幫助。你通過的地址肯定會覆蓋嗎? – hawkeye

回答

2

默認情況下,每個容器將使用bridge網絡驅動程序並具有自己的隔離網絡環境。這不是一回事,但你可以簡單地認爲它們是不同的服務器,並有自己的私有IP地址。所以當你啓動一個客戶端容器並嘗試連接地址hdfs://localhost:50075時,它實際上會嘗試連接端口50075而不是連接hadoop服務器容器,顯​​然它會被拒絕。請參閱他們的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

+0

謝謝@shizhz - 我還不確定你是否啓動了第一個容器,然後作爲客戶端運行了第二個容器。它看起來像剛剛啓動時在原始主機上運行該命令。感謝您的幫助。我會更新這個問題。 – hawkeye

+0

很高興幫助@hawkeye,但爲什麼你的服務器容器的ip爲'172.17.0.3',但是當你運行你的客戶端容器時使用'hdfs://192.168.0.3:9000'? – shizhz

+0

我檢查了你的Dockerfile,發現它什麼也沒有做,只是公開了一個額外的端口'2022',但是這個端口沒有用在你的服務器容器中,所以有必要這樣做嗎?此外,使用'-p'將端口映射到主機是將容器內的服務暴露給外部世界,也是在容器之間進行多主機通信的方式之一。正如我在我的回答中提到的,如果你只是想在同一臺機器上測試'client'和'server',你不必這樣做,使它們能夠相互交談,使用容器的IP地址剛剛夠。 – shizhz