Hadoop与docker运行“hdfs dfs -put”错误

时间:2018-06-15 16:59:13

标签: docker hadoop hdfs

我有一个hadoop的码头图像。 (在我看来是https://github.com/kiwenlau/hadoop-cluster-docker) 我根据这篇博客逐步完成工作。我可以成功运行docker和Hadoop。但是,当我尝试在主机中放置一些文件来测试Hadoop中的 WordCount 测试时。我跑的时候

root@hadoop-master:~# hdfs dfs -put /home/ke/code /input

它返回错误:

put: `/home/ke/code': No such file or directory

但是这个目录确实存在,因为我可以使用cd /home/ke/code转到这个目录。

1 个答案:

答案 0 :(得分:1)

您需要了解的是Hadoop实例在与主机环境完全不同的环境中运行。因此,您运行sudo ./start-container.sh中提及的/home/ke/code命令,您正在创建一个独立于您的主机操作系统的新子系统(即包含start-container.sh下的文件。不幸的是,在这种情况下,Hadoop磁盘文件系统(HDFS)在新创建的子系统(称为Docker Container)中运行,您希望传输的文件存在于其他位置(在主机操作系统中)。

但是,您可以采取一些措施来解决问题。

  • 以这种方式编辑sudo docker run -itd \ -v /home/ke/:/mnt/ke/ \ --net=hadoop \ -p 50070:50070 \ -p 8088:8088 \ --name hadoop-master \ --hostname hadoop-master \ kiwenlau/hadoop:1.0 &> /dev/null :编辑负责启动hadoop主容器的行 10-16 : -

    -v

这里要注意的主要区别是/home/ke/开关,它将/mnt/ke/卷从主机系统安装到docker rm hadoop-master中的Docker容器。

  • 使用命令hadoop-slave1删除您已创建的旧主容器,并使用相同的{{1}删除名为hadoop-slave3docker rm的从属容器命令。

  • 完成此操作后,从GitHub中提到的第4步开始。现在,复制文件的命令将变为hdfs dfs -put /mnt/ke/code /input