DataNode磁盘平衡器[代码分享]
发布日期:2021-09-10 21:05:54 浏览次数:2 分类:技术文章

本文共 1455 字,大约阅读时间需要 4 分钟。

  hot3.png

项目地址:

关于磁盘数据平衡

当现有HDFS遇到存储空间瓶颈时,我们可以通过往DN上加磁盘来缓解,而由于DN上的原有磁盘数据快满,新加的磁盘又是空的,就导致磁盘间的数据不平衡。在Hadoop3.0以下版本里,并没有提供disk-balancer工具,虽然我们可以通过设置新增数据的磁盘选择策略(参数 dfs.datanode.fsdataset.volume.choosing.policy)为 org.apache.hadoop.hdfs.server.datanode.fsdataset.AvailableSpaceVolumeChoosingPolicy,这样新来数据会尽量往空闲磁盘上写,但是它需要一个长时间的过程才能达到平衡。而不平衡带来的影响就是,数据读取会比较集中在已满的磁盘上,导致这些磁盘超负荷工作,同时也影响跑任务

使用方式

编译好jar之后,拷贝到需要做数据平衡的DN上,停掉该DN然后执行下面命令

hadoop jar /path/to/volume-balancer-
.jar org.apache.hadoop.hdfs.server.datanode.VolumeBalancerNew [-threshold=0.1] [-concurrency=1] [-dirs=128]

当数据少的磁盘的可用比与整个DN的磁盘可用比达到设置的阈值范围时,或当迁移的子目录数达到 volumes * dirs * 256 时(volumes是DN挂载的HDFS磁盘个数),数据平衡会自动停止

当数据平衡结束,重新启动DN即可

对于CDH

对于CDH而言,HDFS的配置分为静态和动态两部分,静态的位于 /etc/conf/hadoop,动态的位于 /{Cloudera_Install_Path}/run/cloudera-scm-agent/process/*-hdfs-DATANODE 下,而磁盘配置(参数 dfs.datanode.data.dir)的文件则位于动态目录下,所以执行脚本的时候需要加载该目录下的 hdfs-site.xmlhdfs-site-refreshable.xml,对于CDH,可见 使用src/main/scripts 下的帮助脚本

参数

threshold

默认值为 0.1,设置磁盘平衡的阈值,该值越小,磁盘越平衡,花的时间越长

concurrency

默认值为 1,设置数据平衡脚本的并行度,在需要平衡的磁盘比较多时,可适当调大这个值,但并不是越大越好,磁盘数据吞吐是有阈值的,建议值为2~5

dirs

默认值为 128,设置最大转移的子目录数,从Hadoop2.6开始HDFS采用两级子目录的结构,单个磁盘上最大文件夹个数为 256 * 256,这个值可以设置总的最大转移子目录数为 volumes * dirs * 256

关于项目

此项目fork自bperroud的 ,由于原项目只提供了Hadoop2.6以下版本的DN磁盘平衡 VolumeBalancer,在此基础上我增加了Hadoop2.6及以上版本的磁盘平衡 VolumeBalancerNew,目前在生产环境使用良好,原磁盘使用率92%,平衡后69%,如下

diskbalancer

欢迎所有人提交PR贡献您的想法、完善文档、代码、补丁、bug或其他特性,助力项目更加完善可靠!

转载于:https://my.oschina.net/kavn/blog/1591115

转载地址:https://blog.csdn.net/weixin_34393428/article/details/91602273 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:谈ATL(一)--说说ATL字符串转换类
下一篇:5月29日2次课(配置IP、 网络问题排查)

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月16日 00时54分57秒