Hadoop datanode节点退役遇到的坑

问题描述:

当前集群7台机器,需要退役掉其中的3台,退役了一天,发现block数不变,于是查看namenode日志,发现以下信息:

2019-10-17 17:29:25,177 WARN org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicy: Failed to place enough replicas, still in need of 2 to reach 3 (unavailableStorages=[], storagePolicy=BlockStoragePolicy{HOT:7, storageTypes=[DISK], creationFallbacks=[], replicationFallbacks=[ARCHIVE]}, newBlock=true) For more information, please enable DEBUG log level on org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicy
2019-10-17 17:29:25,177 WARN org.apache.hadoop.hdfs.protocol.BlockStoragePolicy: Failed to place enough replicas: expected size is 2 but only 0 storage types can be selected (replication=3, selected=[], unavailable=[DISK], removed=[DISK, DISK], policy=BlockStoragePolicy{HOT:7, storageTypes=[DISK], creationFallbacks=[], replicationFallbacks=[ARCHIVE]})

迁移数据的时候,namenode会判断各个datanode的负载是否超出平均负载,如果超出平均负载,则认为这台datanode不可用,继续按照此算法重新找下一个datanode节点。

这里的负载不是系统负载,而是xceiver线程数(这个线程好像是负责读写的),用总的xceiver线程数除以所有datanode数,算出平均负载。

本次遇到的是3台机器正在退役,正在退役的机器datanode负载很低,导致剩下的4台机器线程数超过平均值的两倍,所以复制block的时候找不到正常的节点。

解决方法:

调整hdfs-site.xml的以下参数,并重启Namenode解决,此参数用来关闭负载的判断。

  <property>
        <name>dfs.namenode.replication.considerLoad</name>
        <value>false</value>
    </property>

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值