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

八卦阵  金牌会员 | 2024-6-19 06:56:20 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 882|帖子 882|积分 2646





目录
​一、问题原因
二、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块磁盘 做数据平衡。

3.1 生成plan json文件


首先要确保DataNode的设置dfs.disk.balancer.enabled为true
  1. hdfs-site.xml配置
  2. <property>
  3.    <name>dfs.disk.balancer.enabled</name>
  4.    <value>true</value>
  5. </property>
复制代码
通过-plan生成plan:
  1. hdfs diskbalancer -plan winner-reid-datanode07 -maxerror 5  -bandwidth 50 -thresholdPercentage 5
复制代码
参数先容:


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


生成文件位于 HDFS


查看生成的winner-reid-datanode07.plan.json 文件内容
  1. {
  2.         "volumeSetPlans": [{
  3.                 "@class": "org.apache.hadoop.hdfs.server.diskbalancer.planner.MoveStep",
  4.                 "sourceVolume": {
  5.                         "path": "/disk4/",
  6.                         "capacity": 5853616278016,
  7.                         "storageType": "DISK",
  8.                         "used": 1886035164776,
  9.                         "reserved": 0,
  10.                         "uuid": "DS-4073f74c-51fb-4aa1-8088-e5fce28913d4",
  11.                         "failed": false,
  12.                         "volumeDataDensity": 9.999999999998899E-5,
  13.                         "skip": false,
  14.                         "transient": false,
  15.                         "readOnly": false
  16.                 },
  17.                 "destinationVolume": {
  18.                         "path": "/disk2/",
  19.                         "capacity": 5853616278016,
  20.                         "storageType": "DISK",
  21.                         "used": 1366782103125,
  22.                         "reserved": 0,
  23.                         "uuid": "DS-afbaacc6-adfd-4248-ab65-d83ae998ef0b",
  24.                         "failed": false,
  25.                         "volumeDataDensity": 0.08879999999999999,
  26.                         "skip": false,
  27.                         "transient": false,
  28.                         "readOnly": false
  29.                 },
  30.                 "idealStorage": 0.3222,
  31.                 "bytesToMove": 537372946394,
  32.                 "volumeSetID": "234e991a-d7b1-4398-b84d-f665984fc40c",
  33.                 "maxDiskErrors": 5,
  34.                 "bandwidth": 5
  35.         }, {
  36.                 "@class": "org.apache.hadoop.hdfs.server.diskbalancer.planner.MoveStep",
  37.                 "sourceVolume": {
  38.                         "path": "/disk1/",
  39.                         "capacity": 5853616278016,
  40.                         "storageType": "DISK",
  41.                         "used": 1886035164776,
  42.                         "reserved": 0,
  43.                         "uuid": "DS-aaa27e2a-27bd-4d2f-9465-0760826404e1",
  44.                         "failed": false,
  45.                         "volumeDataDensity": 9.999999999998899E-5,
  46.                         "skip": false,
  47.                         "transient": false,
  48.                         "readOnly": false
  49.                 },
  50.                 "destinationVolume": {
  51.                         "path": "/disk2/",
  52.                         "capacity": 5853616278016,
  53.                         "storageType": "DISK",
  54.                         "used": 1366782103125,
  55.                         "reserved": 0,
  56.                         "uuid": "DS-afbaacc6-adfd-4248-ab65-d83ae998ef0b",
  57.                         "failed": false,
  58.                         "volumeDataDensity": 0.08879999999999999,
  59.                         "skip": false,
  60.                         "transient": false,
  61.                         "readOnly": false
  62.                 },
  63.                 "idealStorage": 0.3222,
  64.                 "bytesToMove": 524120732056,
  65.                 "volumeSetID": "234e991a-d7b1-4398-b84d-f665984fc40c",
  66.                 "maxDiskErrors": 5,
  67.                 "bandwidth": 5
  68.         }],
  69.         "nodeName": "winner-reid-datanode07",
  70.         "nodeUUID": "e6f30cb6-2bf5-4eb9-a5ab-4eb2b39ab3d7",
  71.         "port": 8010,
  72.         "timeStamp": 1715934031482
  73. }
复制代码
3.2 执行plan json文件


通过-execute执行plan阶段生成的plan文件:
  1. hdfs diskbalancer -execute  /system/diskbalancer/2024-May-17-16-00-04/winner-reid-datanode07.plan.json
复制代码


查询指定DataNode磁盘balance的状况
  1.   hdfs diskbalancer -query winner-reid-datanode07
复制代码


看到PLAN_UNDER_PROGRESS 表示正在平衡,PLAN_DONE 表示完成
如下开始disk banlance


如下已完成disk banlance



取消指定DataNode的磁盘平衡
  1. hdfs diskbalancer -cancel  xx.json
复制代码




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

八卦阵

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表