docker hadoop伪分布式 java上传报错

2020-11-06更新

docker-compose 脚本地址

更新目的

原文的解决思路是对的,但是还是有点小问题。使用ip的话要更改好几个地方太麻烦。所以这几天重新试了一遍。

步骤

方法一:更改host

  • 通过docker ps找到datanode的容器id

  • 编辑本机的hosts文件

    • 文件最后追加一行,内容为

      
        部署datanode节点的宿主机ip datanode节点容器的id
      
      
    • 举例:

      • 宿主机ip:192.168.2.10

      • 容器id:123456

      • hosts追加内容为

            192.168.2.10 123456
      
    • 使hosts生效

    • window

          ipconfig /flushdns
      
    • centos

            /etc/init.d/network restart
      
  • 注意
    容器不能rm或者down,否则需要重新配制hosts。restart、stop、start无影响

方法一:部署在同一台服务器


以下为第一版本原文

版本

  • 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文件中的内容。


最后吐槽一下,这几天为了解决这个问题,搜到的博客都是抄来抄去,完全不经思考,不知道他们有没有实践过。甚至有的直接删除数据格式化节点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值