2017-10-11 175 views
0

我有一個hadoop的docker鏡像。 (在我的情況下,它是https://github.com/kiwenlau/hadoop-cluster-docker,但問題適用於任何Hadoop的搬運工圖像)如何在Docker容器中保存HDFS數據

我運行如下的泊塢窗容器..

sudo docker run -itd --net=hadoop --user=root -p 50070:50070 \ 
-p 8088:8088 -p 9000:9000 --name hadoop-master --hostname hadoop-master \ 
kiwenlau/hadoop 

我從Java寫數據到HDFS文件系統在主機ubuntu機器上運行。

FileSystem hdfs = FileSystem.get(new URI(hdfs://0.0.0.0:9000"), configuration) 
hdfs.create(new Path("hdfs://0.0.0.0:9000/user/root/input/NewFile.txt")), 

開始泊塢窗使得「NewFile1.txt」被持久化的時候我應該如何安裝卷。

容器內的哪個「路徑」對應HDFS路徑「/user/root/input/NewFile.txt」?

回答

1

您應檢查在HDFS-site.xml文件的dfs.datanode.data.dir知道在哪裏的數據存儲到文件系統的容器

<property> 
    <name>dfs.datanode.data.dir</name> 
    <value>file:///root/hdfs/datanode</value> 
    <description>DataNode directory</description> 
</property> 

沒有此文件/屬性,默認位置將是file:///tmp/hadoop-${user.name}/dfs/data

對於碼頭,。請注意,運行進程的默認用戶是root用戶。

您還需要堅持的名稱節點的文件,從XML文件

其中「路徑」的容器內對應於HDFS路徑「/user/root/input/NewFile.txt」再看

容器路徑保存HDFS文件的塊,而不是整個文件本身

+0

謝謝v.much cricket_007 我擡頭數據管理部,由HDFS-site.xml中的NameNode值。 然後,我按照以下步驟在我的docker run中安裝目錄。 \t搬運工運行-itd .. \t \t -v〜/ mynamenode:/根/ HDFS /名稱節點\ \t \t -v〜/ mydatanode:/根/ HDFS /數據節點\ \t \t --privileged \ 現在當我啓動容器,執行它併發出命令 hadoop fs -mkdir test 我得到錯誤 從hadoop-master/172.18.0.2調用hadoop-master:9000連接失敗例外: java.net。 ConnectionException:連接被拒絕。 我在特權模式下運行容器。 我錯過了什麼嗎? – VenVig

+0

看起來像一個網絡問題。如果您使用的是Mac/Windows,則網絡無法像原生Linux Docker容器一樣工作 –

+1

爲什麼這會被投票? – Jzl5325