Hadoop与docker一起运行;hdfs dfs-put“;错误
我有一个hadoop的docker镜像。(就我而言是这样) 我根据这个博客一步一步地做这项工作。我可以成功运行docker和Hadoop。但是,当我尝试在主机中放入一些文件来测试Hadoop中的字数测试时。当我跑的时候Hadoop与docker一起运行;hdfs dfs-put“;错误,docker,hadoop,hdfs,Docker,Hadoop,Hdfs,我有一个hadoop的docker镜像。(就我而言是这样) 我根据这个博客一步一步地做这项工作。我可以成功运行docker和Hadoop。但是,当我尝试在主机中放入一些文件来测试Hadoop中的字数测试时。当我跑的时候 root@hadoop-master:~# hdfs dfs -put /home/ke/code /input 它返回一个错误: put: `/home/ke/code': No such file or directory 但是这个目录实际上是存在的,因为我可以使用cd/
root@hadoop-master:~# hdfs dfs -put /home/ke/code /input
它返回一个错误:
put: `/home/ke/code': No such file or directory
但是这个目录实际上是存在的,因为我可以使用
cd/home/ke/code
转到这个目录。您需要了解的是,Hadoop实例运行的环境与主机环境完全不同。因此,当您运行下面的中提到的sudo./start container.sh
命令时,理想情况下,您正在创建一个独立于主机操作系统(包含/home/ke/code
下的文件)的新子系统。不幸的是,在这种情况下,Hadoop磁盘文件系统(HDFS)正在新创建的子系统(称为Docker容器)中运行,并且您希望传输的文件存在于其他地方(在主机操作系统中)
然而,有一个解决方案,你可能可以做,使它的工作
- 通过以下方式编辑
:编辑负责启动hadoop主容器的行10-16:-start container.sh
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/
卷从主机系统装载到/mnt/ke/
中的Docker容器
- 使用相同的
命令删除使用命令docker rm
创建的旧主容器以及名为docker rm hadoop master
的从容器,直到hadoop-slave1
hadoop-slave3
- 完成后,从第4步开始运行,如GitHub中所述。复制文件的命令现在实际上变成
hdfs dfs-put/mnt/ke/code/input
start container.sh
文件。您可以做的是在主机系统中创建一些临时目录,并将该目录装载到容器中。此单一目录可用于在想要HDFS的任何文件之间进行传输的单一目的,只需将需要复制的文件移动到此目录即可实现。一旦运行start comtainer.sh
脚本,您实际上会输入主容器的提示。要退出,只需运行exit
命令,该命令将引导您进入主机级提示符。使用命令docker Stop
停止主容器和从容器,并以相同的方式使用docker start
命令启动它们。要输入正在运行的主容器的提示,请使用命令sudo docker exec-it hadoop master bash
。如果您了解更多关于如何处理docker容器的知识,这会更好,因为您正在使用容器在hadoop中运行作业。为了回答您提出的问题,不幸的是,如果不装载,就无法从容器文件系统访问主机文件系统,因此容器中的HDF只能通过您设置的装载目录访问主机环境。