hadoop - 如何将HDFS数据持久化到docker容器中

标签 hadoop docker hdfs

我有一个 hadoop 的 docker 镜像。 (在我的例子中是 https://github.com/kiwenlau/hadoop-cluster-docker ,但问题适用于任何 hadoop docker 镜像)

我正在运行如下的 docker 容器..

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

我正在从主机 ubuntu 机器中运行的 java 将数据写入 hdfs 文件系统。

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")),

启动 docker 时应该如何挂载卷,以便保留“NewFile1.txt”。

容器内的哪个“路径”对应于 HDFS 路径“/user/root/input/NewFile.txt”?

最佳答案

您应该检查 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

对于 docker 来说,.请注意,运行进程的默认用户是 root 用户。

您还需要保留名称节点文件,再次从该 XML 文件中看到

Which "path" inside the container corresponds to the HDFS path "/user/root/input/NewFile.txt"

容器路径保存HDFS文件的 block ,而不是整个文件本身

关于hadoop - 如何将HDFS数据持久化到docker容器中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46697491/

相关文章:

apache-spark - 使用 Spark/Scala 读取序列文件时,无法序列化结果 : org. apache.hadoop.io.IntWritable

php - 即使完全删除,Docker容器仍会下载并执行

docker - 为什么 minikube 需要 VM

authentication - HDFS 数据节点未开始使用 kerberos

java - 用 Java 读取 HDFS 和本地文件

hadoop - 如何使用与客户端进程不同的所有者创建 HDFS 文件

hadoop - Oozie java-action 不包含 core-site.xml

java - 已创建配置单元表,但是映射任务失败,并带有异常

hadoop - 如何增加 hive 中的 reducer ?

mysql - 如何使用 MySQL Docker 镜像中的脚本执行查询?