【Hadoop】DataNode 数据盘进行磁盘DiskBalancer

作者 : admin 本文共3267个字,预计阅读时间需要9分钟 发布时间: 2024-05-21 共3人阅读

【Hadoop】DataNode 数据盘进行磁盘DiskBalancer插图

目录

​一、问题原因

二、DiskBalancer介绍

三、DiskBalancer实战

3.1 生成plan json文件

3.2 执行plan json文件


一、问题原因


阿里云事件磁盘损坏后,使用新磁盘进行了替换,或者当发现HDFS容量不够需要扩展空间时,由运维管理人员陆陆续续为 datanode 节点增加了多块磁盘,并将这些磁盘挂载到了不同目录比如 /mnt/disk1, /mnt/disk2;此后由大数据系统管理人员配置 HDFS 使用了这些新的磁盘上的目录 (比如配置 dfs.datanode.data.dir=/mnt/disk1/dfs/data,/mnt/disk2/dfs/data,/mnt/disk3/dfs/data),并重启了 hdfs 服务使配置生效。

但是hdfs经过上述配置更改并重启生效之后,只有新增加的HDFS文件才会存储在新增加的目录下,已经存在的HDFS历史文件,其对应的底层数据是不会从原有目录移动到新增目录的。

即使使用了命令 hdfs balancer 来在集群内重新分布 HDFS 文件,由于该命令只会在不同host之间移动数据,也就是主要做的是 host 节点级别的负载均衡,上述单节点中多磁盘之间的负载不均衡问题,也不会由太大缓解。


二、DiskBalancer介绍


DiskBalancer是一个命令行工具,可在DataNode的所有磁盘上均匀分发数据。 此工具对给定的DataNode进行操作,并将块从一个磁盘移动到当前DataNode的另一个磁盘。DiskBalancer通过创建计划并继续在DataNode上执行该计划。 计划是一组陈述,描述了两个磁盘之间应该移动的数据。 计划由多个移动步骤组成。 移动步骤具有源磁盘,目标磁盘和移动的字节数。 可以针对运行数据节点执行计划。DiskBalancer是一个相对独立的线程,它可以对数据的复制进行限流。 集群默认是启用DiskBalancer的, 不启用DiskBalancer 需要在hdfs-site.xml中将dfs.disk.balancer.enabled设置为false。


三、DiskBalancer实战


需求:磁盘 /disk2是新挂的 ,需要将一台服务器的 4块磁盘 做数据平衡。 【Hadoop】DataNode 数据盘进行磁盘DiskBalancer插图(1)

3.1 生成plan json文件


首先要确保DataNode的配置dfs.disk.balancer.enabled为true

hdfs-site.xml配置


   dfs.disk.balancer.enabled
   true

通过-plan生成plan:

hdfs diskbalancer -plan winner-reid-datanode07 -maxerror 5  -bandwidth 50 -thresholdPercentage 5

参数介绍:

  • -bandwidth 平衡带宽,单位MB/s,默认10
  • -maxerror 错误重试次数,默认5
  • -thresholdPercentage 平衡阈值,默认10,即磁盘占用率大小相差<=10%则认为是平衡的
  • -out 执行计划json输出路径,注意为hdfs路径,且路径需要为空【Hadoop】DataNode 数据盘进行磁盘DiskBalancer插图(2)

生成文件位于 HDFS

【Hadoop】DataNode 数据盘进行磁盘DiskBalancer插图(3)

查看生成的winner-reid-datanode07.plan.json 文件内容

{
	"volumeSetPlans": [{
		"@class": "org.apache.hadoop.hdfs.server.diskbalancer.planner.MoveStep",
		"sourceVolume": {
			"path": "/disk4/",
			"capacity": 5853616278016,
			"storageType": "DISK",
			"used": 1886035164776,
			"reserved": 0,
			"uuid": "DS-4073f74c-51fb-4aa1-8088-e5fce28913d4",
			"failed": false,
			"volumeDataDensity": 9.999999999998899E-5,
			"skip": false,
			"transient": false,
			"readOnly": false
		},
		"destinationVolume": {
			"path": "/disk2/",
			"capacity": 5853616278016,
			"storageType": "DISK",
			"used": 1366782103125,
			"reserved": 0,
			"uuid": "DS-afbaacc6-adfd-4248-ab65-d83ae998ef0b",
			"failed": false,
			"volumeDataDensity": 0.08879999999999999,
			"skip": false,
			"transient": false,
			"readOnly": false
		},
		"idealStorage": 0.3222,
		"bytesToMove": 537372946394,
		"volumeSetID": "234e991a-d7b1-4398-b84d-f665984fc40c",
		"maxDiskErrors": 5,
		"bandwidth": 5
	}, {
		"@class": "org.apache.hadoop.hdfs.server.diskbalancer.planner.MoveStep",
		"sourceVolume": {
			"path": "/disk1/",
			"capacity": 5853616278016,
			"storageType": "DISK",
			"used": 1886035164776,
			"reserved": 0,
			"uuid": "DS-aaa27e2a-27bd-4d2f-9465-0760826404e1",
			"failed": false,
			"volumeDataDensity": 9.999999999998899E-5,
			"skip": false,
			"transient": false,
			"readOnly": false
		},
		"destinationVolume": {
			"path": "/disk2/",
			"capacity": 5853616278016,
			"storageType": "DISK",
			"used": 1366782103125,
			"reserved": 0,
			"uuid": "DS-afbaacc6-adfd-4248-ab65-d83ae998ef0b",
			"failed": false,
			"volumeDataDensity": 0.08879999999999999,
			"skip": false,
			"transient": false,
			"readOnly": false
		},
		"idealStorage": 0.3222,
		"bytesToMove": 524120732056,
		"volumeSetID": "234e991a-d7b1-4398-b84d-f665984fc40c",
		"maxDiskErrors": 5,
		"bandwidth": 5
	}],
	"nodeName": "winner-reid-datanode07",
	"nodeUUID": "e6f30cb6-2bf5-4eb9-a5ab-4eb2b39ab3d7",
	"port": 8010,
	"timeStamp": 1715934031482
}

3.2 执行plan json文件


通过-execute执行plan阶段生成的plan文件:

hdfs diskbalancer -execute  /system/diskbalancer/2024-May-17-16-00-04/winner-reid-datanode07.plan.json

【Hadoop】DataNode 数据盘进行磁盘DiskBalancer插图(4)

查询指定DataNode磁盘balance的状况

  hdfs diskbalancer -query winner-reid-datanode07

【Hadoop】DataNode 数据盘进行磁盘DiskBalancer插图(5)

看到PLAN_UNDER_PROGRESS 表示正在平衡,PLAN_DONE 表示完成

如下开始disk banlance

【Hadoop】DataNode 数据盘进行磁盘DiskBalancer插图(6)

如下已完成disk banlance

【Hadoop】DataNode 数据盘进行磁盘DiskBalancer插图(7)

取消指定DataNode的磁盘均衡

hdfs diskbalancer -cancel  xx.json

本站无任何商业行为
个人在线分享 » 【Hadoop】DataNode 数据盘进行磁盘DiskBalancer
E-->