写点什么

大数据集群节点磁盘负载不均衡怎么办?

  • 2022 年 1 月 15 日
  • 本文字数:1729 字

    阅读完需:约 6 分钟

大数据集群节点磁盘负载不均衡怎么办?

大家好,我是明哥!


“大数据集群节点磁盘负载不均衡”的问题,相信大数据集群管理员并不陌生,本片文章,我们就简单分享下,如何应对上述问题。

问题现象

大数据集群使用一段时间后,有时我们会发现大数据集群中某些节点的多块磁盘的负载不均衡,比如某些磁盘使用率达到了百分之七八十,有的才百分之二三十。

问题原因

造成以上问题的背景和原因,很多时候是因为,我们在使用过程中,发现某些磁盘损坏后,使用新磁盘进行了替换,或者当发现 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 节点级别的负载均衡,上述单节点中多磁盘之间的负载不均衡问题,也不会由太大缓解。


注意:在 CDH 中,上述节点级别的负载均衡,除了在后台使用命令触发执行,也可以通过如下页面触发执行:



为达到上述单节点中多磁盘之间的负载均衡,我们需要在单节点的多个磁盘目录之间,根据其使用率的差异,在磁盘目录之间移动数据。


该功能可以使用 Hdfs 的 hdfs diskbalancer 来实现, 该工具是 hadoop 3.0 通过 HDFS-1312 引入的新功能。

技术背景-HDFS-1312

hdfs diskbalancer 工具是 hadoop 3.0 通过 HDFS-1312 引入的新功能:



幸运的是,在 CDH 平台中,即使我们使用的不是 hadoop 3.x, 在某些 hadoop 2.x 系列中,由于 Cloudera cherry pick 了上述功能,我们仍然可以使用上述命令实现磁盘级别的负载均衡:


问题解决

在 CDH 6.3 及以前的版本中,上述但节点磁盘级别的负载均衡工具 hdfs diskbalancer, 并没有像节点级别的负载均衡工具 hdfs balancer 一样集成到 web 页面中,所以我们只能在后台通过命令来触发执行。


具体来讲,需要安装一下步骤进行操作:


  1. 确保 hdfs-site.xml 中的配置 dfs.disk.balancer.enabled=true

  2. 使用命令生成 balancer plan 文件:hdfs diskbalancer -plan target-node //target-node 是需要均衡的节点,该命令会生成一个*.plan.json 的文件

  3. 使用命令执行 balance plan 文件,进行均衡操作:hdfs diskbalancer -execute target-node.plan.json

  4. 查询均衡操作的完成状态:hdfs diskbalancer -query target-node // DONE 的时候表示已经执行完毕


注意:


  • CDH6.3 等版本中配置 dfs.disk.balancer.enabled,需要在 hdfs-site.xml 的高级配置代码段中配置:

  • 如果 dfs.disk.balancer.enabled=false,执行相关命令时会报以下错误:

  • 如果节点的磁盘负载差异不大,执行命令时会报信息“DiskBalancing not needed for node:”:

  • 由于磁盘均衡过程中,磁盘 IO、网络 IO 占用都会比较高,建议尽量在集群负载不高时进行;

  • 可以通过命令行参数 -bandwidth, 或配置文件参数 dfs.disk.balancer.max.disk.throughputInMBperSe 控制 diskbalancer 的均衡速度阈值//参数 dfs.datanode.balance.bandwidthPerSec 控制的是节点级别 balancer 的均衡速度阈值;

  • 可同时配置磁盘的选择策略 dfs.datanode.fsdataset.volume.choosing.policy(默认 rg.apache.hadoop.hdfs.server.datanode.fsdataset.RoundRobinVolumeChoosingPolicy,可选 org.apache.hadoop.hdfs.server.datanode.fsdataset.AvailableSpaceVolumeChoosingPolicy);

  • 完整命令行参数和配置文件参数,如下:




  • 相关命令示例如下:

  • hdfs diskbalancer -plan node1.mycluster.com

  • hdfs diskbalancer -execute /system/diskbalancer/nodename.plan.json

  • hdfs diskbalancer -query nodename.mycluster.com

  • hdfs diskbalancer -cancel planID -node nodename

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

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

发布于: 刚刚阅读数: 2
用户头像

Keep Striving! 2018.04.25 加入

明哥,十四年 IT经验,六年大数据经验; 做过大数据集群的搭建运维,大数据应用系统的开发优化,也做过大数据平台的技术选型以及架构咨询; 目前聚焦于泛大数据生态,包括数据仓库/数据湖,云计算和人工智能。

评论

发布
暂无评论
大数据集群节点磁盘负载不均衡怎么办?