HDFS DiskBalancer介绍

更新时间:2025-03-18 05:14:33

当您的集群因大量的写入和删除,或者由于磁盘更换和扩容等操作,导致数据在节点上的磁盘之间分布不均匀,引起HDFS并发读写性能的下降等问题时,可通过HDFS Diskbalancer将数据均匀地分布在DataNode的所有磁盘上。本文为您介绍HDFS DiskBalancer的使用方法以及主要调优参数。

背景信息

HDFS DiskbalancerHadoop 3.x提供的一个命令行工具,可以将数据均匀地分布在DataNode的所有磁盘上。不同于HDFS Balancer,HDFS Balancer负责集群范围内的数据平衡,HDFS Diskbalancer工具是对给定的DataNode进行操作,将块从一个磁盘移动到另一个磁盘。

HDFS Diskbalancer的操作方式是创建一个计划(plan),然后在DataNode执行该计划。计划是描述两个磁盘之间应该移动多少数据的一组语句。一个计划是由多个步骤组成的。移动步骤有源磁盘、目标磁盘和要移动的字节数。计划可以针对操作数据节点执行。磁盘平衡器通过限制每秒复制的数据量防止干扰其他进程。

使用HDFS DiskBalancer

HDFS DiskBalancer提供了以下命令,用于查看命令的详细用法和参数说明。

hdfs diskbalancer --help <command>

plan

通过指定一个DataNode执行DiskBalancer。

hdfs diskbalancer -plan <hostname> [options]

示例:

hdfs diskbalancer -plan core-1-1.c-xxxxxxxxxxx

命令选项

描述

命令选项

描述

-bandwidth <arg>

DiskBalancer可使用的最大磁盘带宽(MB/s),为整数。例如10 MB/s。

-maxerror <arg>

描述在一对磁盘之间进行复制时可容忍的错误数。

-out <arg>

要写入输出的文件的本地路径,如果未指定,将使用默认值。

-thresholdPercentage <arg>

磁盘平衡器开始工作前允许的数据倾斜百分比。例如,如果一个2盘节点上的总数据为100 GB,那么磁盘均衡器计算每个磁盘上的期望值为50 GB。如果容差为10%,则单个磁盘上的数据需要大于60 GB(50 GB + 10%容差值),DiskBalancer才能开始工作。

-v

详细模式,指定此参数将强制plan命令在标准输出上打印计划的摘要。

execute

通过指定一个plan命令生成的planfile,执行DiskBalancer。

hdfs diskbalancer -execute <planfile>

示例:

hdfs diskbalancer -execute /system/diskbalancer/core-1-1.c-xxxxxxxxxxx.plan.json

命令选项

描述

命令选项

描述

-skipDateCheck

跳过日期检查并强制执行计划。

query

查询指定DataNode关于磁盘均衡器执行的当前状态。

hdfs diskbalancer -query <hostname>  [options]

示例:

hdfs diskbalancer -query core-1-1.c-xxxxxxxxxxx

命令选项

描述

命令选项

描述

-v

打印正在节点上执行的计划的详细信息。

cancel

取消正在运行的计划,与重新启动DataNode的效果相同。

hdfs diskbalancer -cancel <planFile> | -cancel <planID> -node <hostname>

示例:

hdfs diskbalancer -cancel /system/diskbalancer/nodename.plan.json

或者

hdfs diskbalancer -cancel planID -node nodename
说明

planID可以通过query命令从DataNode中读取。

命令选项

描述

命令选项

描述

-node <arg>

取消正在执行的使用planID和主机名运行的计划。

report

report命令提供指定节点或将从运行磁盘均衡器中受益的Top节点的详细报告。节点可以通过一个主机列表文件或以逗号分隔的节点列表指定。

hdfs diskbalancer -fs http://namenode.uri -report -node <file://> | [<DataNodeID|IP|Hostname>,...]

或者

hdfs diskbalancer -fs http://namenode.uri -report -top topnum

命令选项

描述

命令选项

描述

-node <arg>

DataNode地址,可以为DataNode ID、IP或者hostname。

-top <arg>

指定要列出的数据不平衡的节点数量。

HDFS DiskBalancer调优参数

当需要对DiskBalancer参数进行调整时,您可以在E-MapReduce控制台的HDFS服务页面,选择配置 > hdfs-site.xml,新增或调整以下配置。

参数

描述

参数

描述

dfs.disk.balancer.enabled

是否开启HDFS DiskBalancer特性。默认为true。

dfs.disk.balancer.max.disk.throughputInMBperSec

执行DiskBalancer时可使用的最大磁盘带宽。单位为MB/s,默认为10。

dfs.disk.balancer.max.disk.errors

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

dfs.disk.balancer.plan.valid.interval

DiskBalancer计划的最长有效时间。默认为1d。

dfs.disk.balancer.block.tolerance.percent

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

dfs.disk.balancer.plan.threshold.percent

设置在磁盘数据均衡中可容忍的两磁盘之间的数据密度域值差,取值范围[1-100],默认为10。如果任意两个磁盘数据密度差值的绝对值超过了阈值,则说明需要对该的磁盘进行数据均衡。例如,如果一个2盘节点上的总数据为100 GB,那么磁盘均衡器计算每个磁盘上的期望值为50 GB。如果容差为10%,则单个磁盘上的数据需要大于60 GB(50 GB + 10%容差值),DiskBalancer才能开始工作。

  • 本页导读 (1)
  • 背景信息
  • 使用HDFS DiskBalancer
  • plan
  • execute
  • query
  • cancel
  • report
  • HDFS DiskBalancer调优参数