put”错误

hjqgdpho  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(441)

我有一个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 转到这个目录。

qvtsj1bj

qvtsj1bj1#

您需要了解的是,hadoop示例运行的环境与宿主环境完全不同。所以当你运行 sudo ./start-container.sh 您正在遵循的github存储库中提到的命令,理想情况下,您正在创建一个新的子系统,它独立于您的主机操作系统(包含下面的文件) /home/ke/code ). 不幸的是,在这种情况下,hadoop磁盘文件系统(hdfs)正在新创建的子系统(称为docker容器)中运行,并且您希望传输的文件存在于其他地方(在主机操作系统中)。
不过,有一个解决方案,你可以做,使它的工作。
编辑 start-container.sh 这样:将负责启动hadoop主容器的第10-16行编辑为:-

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

这里要注意的主要区别是 -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

相关问题