更新时间:2025-07-12 GMT+08:00

配置HDFS DiskBalancer磁盘均衡

操作场景

DiskBalancer是一个在线磁盘均衡器,旨在根据各种指标重新平衡正在运行的DataNode上的磁盘数据。

工作方式与HDFS的Balancer工具类似,其区别如下:

  • HDFS Balancer工具用于DataNode节点间的数据均衡。
  • HDFS DiskBalancer用于单个DataNode节点各磁盘之间的数据均衡。

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

约束与限制

  • 本章节适用于MRS 3.x及之后版本。
  • DiskBalancer磁盘均衡只支持同类型磁盘之间的数据移动,例如SSD->SSD,DISK->DISK等。
  • 执行该特性会占用涉及节点的磁盘IO资源、网络带宽资源,请尽量在业务不繁忙的时候使用。
  • 在集群运维过程中,排查性能类问题时,可查看集群的事件信息中是否有HDFS磁盘均衡任务事件发生,如果有,可以排查集群中是否开启了DiskBalancer。
  • 自动执行磁盘均衡的特性开启以后,会在此次数据均衡执行完成之后才会退出。无法在执行均衡中途取消本次执行任务。
  • 如果想要灵活选择某些指定节点进行数据均衡,可以在客户端手动指定执行。

配置自动磁盘均衡

  1. 登录FusionInsight Manager。

    登录集群Manager具体操作,请参考访问MRS集群Manager

  2. 选择“集群 > 服务 > HDFS > 配置 > 全部配置”。
  3. 搜索以下参数名称,并根据需要修改参数值。

    表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 节点。

    返回的DataNode列表是不断重新计算的,因此不必设置的过大。

    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表示星期日。

  4. 单击“保存”使配置生效。无需重启HDFS服务。

手动执行磁盘均衡

  1. 安装客户端,如果已安装则跳过。

    例如安装目录为“/opt/client”,以下操作的客户端目录只是举例,请根据实际安装目录修改。

    下载并安装集群客户端的具体操作,请参考安装MRS集群客户端

  2. 以客户端安装用户,登录安装客户端的节点。
  3. 执行以下命令,切换到客户端安装目录,例如“/opt/client”。

    cd /opt/client

  4. 执行以下命令配置环境变量。

    source bigdata_env

  5. 如果集群为安全模式,执行以下命令进行用户认证。普通模式集群无需执行用户认证。该用户需要具备supergroup权限。

    kinit 组件业务用户

  6. 根据实际需要执行以下命令使用DiskBalancer功能:

    表3 DiskBalancer功能的接口说明

    命令格式

    说明

    hdfs diskbalancer -report -top <N>

    查询集群中最需要执行磁盘数据均衡的Top N节点。

    N可以指定为大于0的整数。

    hdfs diskbalancer -plan <Hostname| IP Address>

    为指定节点生成数据平衡计划,帮助优化其数据分布。

    该命令可以根据传入的DataNode生成一个Json文件,该文件包含了数据移动的源磁盘、目标磁盘、待移动的块等信息。

    • “Hostname”、“IP Address”:指定节点的主机名和IP地址。可以登录Manager,选择“集群 > 服务 > HDFS > 实例”,查看并记录待操作DataNode节点的业务IP地址和主机名获取。
    • 此外该命令还可以添加其他参数:
      • -threshold <value>(可选):设置不平衡的阈值,超过该值的节点才会被处理。
      • -bandwidth <value>(可选):设置数据迁移的带宽限制,以避免影响集群性能。

    hdfs diskbalancer -query <Hostname:port>

    查询指定节点上运行的DiskBalancer任务的运行状态。

    • “Hostname”:指定节点的主机名。可以登录Manager,选择“集群 > 服务 > HDFS > 实例”,查看并记录待操作DataNode节点的主机名获取。
    • “port”:DataNode IPC服务器端口。可以登录Manager,选择“集群 > 服务 > HDFS > 配置 > 全部配置”,搜索并记录“dfs.datanode.ipc.port”参数值获取,默认为9867。

    hdfs diskbalancer -execute <planfile>

    执行指定的磁盘均衡计划。

    “planfile”指hdfs diskbalancer -plan <Hostname| IP Address>命令中生成的Json文件,请使用绝对路径。

    hdfs diskbalancer -cancel <planfile>

    取消正在运行的磁盘均衡计划。

    “planfile”指hdfs diskbalancer -plan <Hostname| IP Address>命令中生成的Json文件,请使用绝对路径。

    hdfs diskbalancer -help <command>

    更多磁盘均衡命令的使用帮助。

相关文档