更新时间:2024-08-16 GMT+08:00

配置HDFS DiskBalancer磁盘均衡

配置场景

DiskBalancer是一个在线磁盘均衡器,旨在根据各种指标重新平衡正在运行的DataNode上的磁盘数据。工作方式与HDFS的Balancer工具类似。不同的是,HDFS Balancer工具用于DataNode节点间的数据均衡,而HDFS DiskBalancer用于单个DataNode节点上各磁盘之间的数据均衡。

长时间运行的集群会因为曾经删除过大量的文件,或者集群中的节点做磁盘扩容等操作导致节点上出现磁盘间数据不均衡的现象。磁盘间数据不均衡会引起HDFS整体并发读写性能的下降或者因为不恰当的HDFS写策略导致业务故障。此时需要平衡节点磁盘间的数据密度,防止异构的小磁盘成为该节点的性能瓶颈。

本章节适用于MRS 3.x及后续版本。

配置描述

请参考修改集群服务配置参数,进入HDFS的“全部配置”页面,在搜索框中输入参数名称。

表1 参数说明

参数

描述

默认值

dfs.disk.balancer.auto.enabled

是否开启自动执行HDFS DiskBalancer特性。默认值为“false”,表示关闭该特性。

false

dfs.disk.balancer.auto.cron.expression

HDFS 磁盘均衡操作的CRON表达式,用于控制均衡操作的开始时间。仅当dfs.disk.balancer.auto.enabled设置为true时才有效。默认值“0 1 * * 6”表示在每周六的1点执行任务。表达式的具体含义可参见表2

0 1 * * 6

dfs.disk.balancer.max.disk.throughputInMBperSec

执行磁盘数据均衡时可使用的最大磁盘带宽。单位为MB/s,默认值为10,可依据集群的实际磁盘条件设置。

10

dfs.disk.balancer.max.disk.errors

设置能够容忍的在指定的移动过程中出现的最大错误次数,超过此阈值则移动失败。

5

dfs.disk.balancer.block.tolerance.percent

设置磁盘之间进行数据均衡操作时,各个磁盘的数据存储量与理想状态之间的差异阈值。例如,各个磁盘的理想数据存储量为1TB,此参数设置为10。那么,当目标磁盘的数据存储量达到900GB时,就认为该磁盘的存储状态就已经足够好了。取值范围[1-100]。

10

dfs.disk.balancer.plan.threshold.percent

设置在磁盘数据均衡中可容忍的两磁盘之间的数据密度阈值差。如果任意两个磁盘数据密度差值的绝对值超过了此阈值,意味着对应的磁盘应该进行数据均衡。取值范围[1-100]。

10

dfs.disk.balancer.top.nodes.number

该参数用来指定集群中需要执行磁盘数据均衡的Top N 节点。

5

表2为HDFS磁盘均衡操作的CRON表达式。使用此功能时,需要先将参数dfs.disk.balancer.auto.enabled设置为true。其它参数依据集群状况设置。

表2 CRON表达式解释

说明

第1列

分钟,参数值为0~59。

第2列

小时,参数值为0~23。

第3列

日期,参数值为1~31。

第4列

月份,参数值为1~12。

第5列

星期,参数值为0~6,0表示星期日。

使用限制

  1. 只支持同类型磁盘之间的数据移动,例如SSD->SSD,DISK->DISK等。
  2. 执行该特性会占用涉及节点的磁盘IO资源、网络带宽资源,请尽量在业务不繁忙的时候使用。
  3. 参数dfs.disk.balancer.top.nodes.number指定Top N节点返回的DataNode列表是不断重新计算的,因此不必设置的过大。
  4. 如果要在HDFS客户端通过命令行使用DiskBalancer功能,其接口如下:
    表3 DiskBalancer功能的接口说明

    命令格式

    说明

    hdfs diskbalancer -report -top <N>

    N可以指定为大于0的整数,先利用此条命令查询集群中最需要执行磁盘数据均衡的Top N节点。

    hdfs diskbalancer -plan <Hostname| IP Address>

    此条命令可以根据传入的DataNode生成一个Json文件,该文件包含了数据移动的源磁盘、目标磁盘、待移动的块等信息。同时,该命令还支持指定一些其他网络带宽参数等。

    hdfs diskbalancer -query <Hostname:$dfs.datanode.ipc.port>

    集群默认的port值为9867。此条命令可以查询当前节点上运行的DiskBalancer 任务的运行状态。

    hdfs diskbalancer -execute <planfile>

    此命令中的planfile指第二条命令中生成的Json文件,请使用绝对路径。

    hdfs diskbalancer -cancel <planfile>

    取消正在运行的planfile,同样需要使用绝对路径。

  • 在客户端执行此命令时,用户需要具备supergroup权限。可以使用HDFS服务的系统用户hdfs。或者在集群上创建一个具有supergroup权限的用户,再在客户端中执行此命令。
  • 表3只说明了命令接口的含义及使用方法,实际每个接口提供了更多的配置参数。具体信息可通过hdfs diskbalancer -help <command>命令查看。
  • 在集群运维过程中,排查性能类问题时,可查看集群的事件信息中是否有HDFS磁盘均衡任务事件发生,如果有,可以排查集群中是否开启了DiskBalancer。
  • 自动执行磁盘均衡的特性开启以后,会在此次数据均衡执行完成之后才会退出。无法在执行均衡中途取消本次执行任务。
  • 如果想要灵活选择某些指定节点进行数据均衡,可以在客户端手动指定执行。