异构场景下DataNode的容量均衡

针对DataNode磁盘异构问题,文章提出了两种解决方案。一是调整HDFS的块放置策略,优先选择剩余空间多的节点,以防止小磁盘空间不足导致写数据失败。二是执行Balance操作来均衡DataNode的空间占用,这可能会影响网络带宽,可以通过调整带宽限制和平衡阈值来控制影响。此外,还介绍了开启自动Balance功能的方法。
摘要由CSDN通过智能技术生成
1.配置异构场景下DataNode的容量均衡

本文是对资料整理和向高手请教得到的方案汇总。在hdfs建设过程中值得优化的一项。

借鉴:https://hadoop.apache.org/docs/r3.1.0/,Hdfs参数手册华为MR服务手册

背景:在DataNode磁盘异构差距较大,并且大量磁盘较小的DataNode剩余空间不足的情况下(例如剩余128M多一点)如何防止HDFS写数据失败。

目标:解决节点磁盘异构,减少磁盘空间存在大规模差异。

方案1:配置块放置策略为按可用空间百分比的分配策略
#原理:
	该块放置策略的原理为,第一个副本放置本地,另外两个副本随机从集群中选择,并更大概率放置在剩余空间比较多的节点,这样就可以使配置磁盘比较小的节点不至于很快被占满。

#操作:
	1.将“dfs.block.replicator.classname”设置为“org.apache.hadoop.hdfs.server.blockmanagement.AvailableSpaceBlockPlacementPolicy”。
	2.调整“dfs.namenode.available-space-block-placement-policy.balanced-space-preference-fraction”参数,配置可用空间百分比。该参数默认值为“0.6”,由于当前各节点之间磁盘空间差异非常大,建议调高该系数为“0.9”。
	
#说明:
	1.如果第一个副本放置本地失败,则所有的副本都是按照上述的概率规则从其他节点选取。
	2.基于该策略,剩余空间比较多的节点接受到的写请求相对多一些,该节点的IO负载也比剩余空间比较少的节点相对高一些。
方案2:执行Balance操作均衡DataNode的空间占用,使空间基本使用完的DataNode节点腾出部分空间。

Balance操作对系统的影响:

​ 执行Balance操作时会占用DataNode的网络带宽资源,请根据业务需求在维护期间执行任务。
​ 默认使用带宽控制为20MB/s,如果重新设置带宽流量或加大数据量,Balance操作可能会对正在运行的业务产生影响。

(可选)修改Balance的最大带宽

#操作:
	hdfs dfsadmin -setBalancerBandwidth <bandwidth in bytes per second>
	#<bandwidth in bytes per second>表示带宽控制的数值,单位为字节。例如要设置带宽控制为每秒20MB,对应值为20971520,完整命令为:
	hdfs dfsadmin -setBalancerBandwidth 20971520
	
#说明
	<bandwidth in bytes per second>默认为20M/s,适用于当前集群使用万兆网络,且有业务正在执行的场景。若有足够的业务空闲时间窗用于Balance维护,可适当增加该值以缩短Balance时间。
	如果DataNode节点的带宽无法达到指定的最大带宽,可以在FusionInsight Manager修改HDFS的参数“dfs.datanode.balance.max.concurrent.moves”,将每个DataNode节点执行均衡的线程数修改为“30”,并重启HDFS服务。

启动Balance任务

#操作
bash start-balancer.sh -threshold <threshold of balancer> -policy blockpool -blockpool <BLOCK_POOL_ID>

-threshold:表示HDFS数据达到平衡状态时DataNode磁盘使用率偏差值,各个DataNode节点磁盘的使用率和整体HDFS集群的磁盘空间平均使用率偏差小于此阈值时,系统认为HDFS集群已经达到了平衡的状态并结束Balance任务。
-policy:可以取值为blockpool和datanode。
blockpool:按照Block Pool进行均衡。
datanode:按照DataNode整个磁盘使用情况进行均衡。如果使用该方式,则无需-blockpool参数。
-blockpool:如果需要仅对某一个或者部分NameService进行均衡,可使用-blockpool参数指定对应的Block Pool。如果不指定默认对所有的Block Pool进行均衡。
<BLOCK_POOL_ID>为需要均衡的Block Pool ID,可以在待均衡的NameNode原生页面的“Overview”页面获取其所属的“Block Pool ID”的值。

-include:如果只需要对部分节点进行数据均衡,可以在脚本上加上-include参数指定要移动的节点。具体参数使用方法,可通过命令行查看。
例如,需要设置偏差率为10%,对ID为blockpooltest的Block Pool进行均衡,则执行:

bash start-balancer.sh -threshold 10 -policy blockpool -blockpool blockpooltest



#说明
Balance任务 生成名为hadoop-root-balancer-主机名.out日志。Balance任务完成后,打开该日志可以看到如下字段信息:
    Time Stamp:时间戳
    Bytes Already Moved:已经移动的字节数
    Bytes Left To Move:待移动的字节数
    Bytes Being Moved:正在移动的字节数
方案3:开启自动Balance功能
#操作
	1.将配置项“dfs.balancer.auto.enable”设置为“true”,保存配置,无需重启HDFS服务。
	2.“dfs.datanode.balance.bandwidthPerSec”可以设置带宽数值,需要重启DataNode服务。

#备注:
	1.任务执行日志保存在主NameNode节点中,请查看“/var/log/Bigdata/hdfs/nn/hadoop-omm-balancer-主机名.log”。
	2.详细内容可以参见配置DataNode容量均衡章节。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HDFSDataNode节点之间的数据不均衡指的是在HDFS集群中,不同的DataNode节点存储的数据量不一致。这可能导致某些节点负载过重,而其他节点负载较轻。 导致数据不均衡的主要原因有以下几点: 1. 初始复制:当数据进入HDFS时,会将其初始复制到不同的DataNode节点。由于网络延迟或节点性能差异等原因,可能导致某些节点复制的数据过多,而其他节点复制的数据较少。 2. 数据块移动:当节点故障或离线时,HDFS会将其上存储的数据块移动到其他健康的节点上。这个过程可能导致一些节点存储的数据块数量过多,而其他节点数据块较少。 为了解决数据不均衡的问题,HDFS采取了一些策略: 1. 副本平衡:HDFS会定期检查集群中各个节点上的数据块数量,并采取副本平衡的措施。这意味着将数据块从负载过重的节点移动到负载较轻的节点上,以实现数据均衡。 2. 块调度:HDFS的块调度器会根据各个节点上的剩余存储空间以及网络带宽等因素,决定将新的数据块复制到哪些节点上,以实现负载均衡。 3. HDFS管理员操作:HDFS管理员可以手动干预,将一些数据块从负载过重的节点移动到其他节点上,以实现数据均衡。 综上所述,数据不均衡HDFS集群中的一个常见问题。通过副本平衡、块调度和管理员操作等策略,HDFS可以实现数据的均衡分布,提高数据的可靠性和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值