hadoop2.4生产集群已经运行一段时间了。由于大量的hadoop1.0上面的应用不断迁移过来,刚开始事hdfs这边还没有出现多少问题,随着时间的推移,最近发现个别的datanode节点上面的磁盘空间剩余严重不足,既集群数据存储严重不均衡,很多DN节点分明还有很多存储空间,而个别DN节点存储空间则出现严重不足的情况。后来经过分析,发现这些空间严重不足的节点上面,都运行了distcp作业的map任务,distcp是一个纯粹拷贝数据的job,一结合hdfs数据副本分配策略一分析,终于找到了问题所在:原来是因为这些空间不足的节点由于运行了distcp作业的map任务,当数据拷贝过来之后,这些数据的第一个副本会选择当前节点作为存储节点存储,随着时间越长,这些运行distcp作业map任务的datanode节点存储的数据就越来越多,自然就出现了存储空间不均衡问题。
该问题目前还没有好的解决办法,暂时只能不定期重启distcopy作业,让map任务能随机的在集群其他节点启动起来。
以下是hdfs存储数据块副本时的分配策略:
HDFS块分配策略