【前言】
对于hdfs而言,磁盘故障的处理或者节点的扩容是比较常见的运维操作。对于这种场景的运维操作是相对比较简单的,但关键在于如何快速的使数据在各个dn之间平衡,或者快速的使block数据达到指定的副本数,本文就来聊聊这个小技巧。
【块平衡】
在hdfs的实际使用过程中,难免会遇到DN的异常停止服务的时候。在这种情况下,当NN检测到DN处于异常后,为保证数据满足指定的副本数,因此会逐步为该DN上的所有block,选择新的DN节点,并完成block数据的拷贝,那么长时间运行后,各个DN的磁盘容量就会出现不一致的情况,或者说会有较大的差距。
另外一个比较典型的场景,就是对DN进行扩容。扩容后,新DN上是没有数据的。
对于这两种场景,我们可能会期望将磁盘使用率较高的节点中的一部分数据迁移到其他DN节点中,保证各个DN磁盘容量在一个较平衡的水平。因此,我们可以通过hdfs自带的命令,完成各个DN之间磁盘容量的平衡。
具体命令的使用如下所示:
hdfs balancer –threshold 10 –idleiterations 5
# 参数说明:
# -threshold:datanode之间磁盘使用率的相差阈值,取值范围0-100
# -idleiterations:迭代次数ÿ