2017-10-11 168 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