docker hadoop伪分布式 java上传报错
版本
- docker:19.03.12
- docker-compose:1.26.2
- hadoop:3.2
- 镜像地址:https://github.com/big-data-europe/docker-hadoop
报错信息
could only be written to 0 of the 1 minReplication nodes. There are 1 datanode(s) running and 1 node(s) are excluded in this operation.
查错
网络查到的一些修改
- 删库重新格式化
- https://blog.csdn.net/qfxsxhfy/article/details/80909953
- 在docker中不应该出现这种问题,而且是全新搭建的
- dfs.replication
- 修改为相应的节点数量
- 空间不够
- 删除无效数据或者扩容,这个问题因为我是新搭建的容器所以没出现,如果查找发现是此问题请慎重操作,数据无价
- fs.defaultFS
- 在容器的hadoop.env中已经指定好,所以我也没修改,如果没设置的可以执行设置为hdfs://namenode:9000
- 如果是单独服务器部署节点,把namenode修改为主服务器的外网ip
- 返回容器节点设置
- 进容器内部查看,发现hdfs-site.xml中已经添加
- hosts
- 添加hadoop节点ip信息到容器的hsots中,这个容器默认添加了
解决
所有网上能找到的问题都试过了,结果都是无法访问。后来想到容器节点和添加hosts步骤。虽然在容器内部添加了,但是在开发机(我本地机器)上可能没办法识别。
尝试在部署docker的宿主机上修改了一下hosts,果然能访问到了。
vi /etc/hosts
# 追加
<namenode 容器内部ip> namenode
reboot
PS:我是部署的伪分布式,并非在单独的服务器上修改,如果是部署的多服务器集群模式,需要保证各个容器节点上都能互相访问到。如果以后容器的ip变更,也需要修改hosts文件中的内容。
最后吐槽一下,这几天为了解决这个问题,搜到的博客都是抄来抄去,完全不经思考,不知道他们有没有实践过。甚至有的直接删除数据格式化节点

浙公网安备 33010602011771号