首页 文章

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

提问于
浏览
1

我有一个hadoop的码头图片 . (在我的情况下是https://github.com/kiwenlau/hadoop-cluster-docker)我根据这个博客一步一步地完成工作 . 我可以成功运行docker和Hadoop . 但是,当我尝试在 host machine 中放置一些文件来测试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 回答

  • 1

    您需要了解的是Hadoop实例在与主机环境完全不同的环境中运行 . 所以第二个你运行的 sudo ./start-container.sh 命令在GitHub repository中提到你理想地创建一个独立于你的主机操作系统(包含 /home/ke/code 下的文件)的新子系统 . 不幸的是,在这种情况下,Hadoop磁盘文件系统(HDFS)在新创建的子系统(称为Docker Container)内运行,并且您希望传输的文件存在于其他位置(在主机操作系统中) .

    但是,您可以做一些修复,以使其成功 .

    • 以这种方式编辑 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/ 卷从主机系统安装到 /mnt/ke/ 中的Docker容器中 .

    • 使用命令 docker rm hadoop-master 以及名为 hadoop-slave1 upto hadoop-slave3 的从属容器,使用相同的 docker rm 命令删除已创建的旧主容器 .

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

相关问题