我有一个hadoop的docker映像(对我来说是的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条答案
按热度按时间qvtsj1bj1#
您需要了解的是,hadoop示例运行的环境与宿主环境完全不同。所以当你运行
sudo ./start-container.sh
您正在遵循的github存储库中提到的命令,理想情况下,您正在创建一个新的子系统,它独立于您的主机操作系统(包含下面的文件)/home/ke/code
). 不幸的是,在这种情况下,hadoop磁盘文件系统(hdfs)正在新创建的子系统(称为docker容器)中运行,并且您希望传输的文件存在于其他地方(在主机操作系统中)。不过,有一个解决方案,你可以做,使它的工作。
编辑
start-container.sh
这样:将负责启动hadoop主容器的第10-16行编辑为:-这里要注意的主要区别是
-v
用于安装/home/ke/
从主机系统到中docker容器的卷/mnt/ke/
.删除使用命令创建的旧主容器
docker rm hadoop-master
以及名为hadoop-slave1
最多hadoop-slave3
使用相同的docker rm
命令。完成后,从第4步开始运行,如github中所述。复制文件的命令现在有效地变成
hdfs dfs -put /mnt/ke/code /input