我有一个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
转到这个目录。
答案 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-slave3
至docker rm
的从属容器命令。
完成此操作后,从GitHub中提到的第4步开始。现在,复制文件的命令将变为hdfs dfs -put /mnt/ke/code /input