[HDFS]如何提高rebalance效率

56 阅读2分钟

问题描述

HDFS是一种分布式文件系统,它将数据存储在集群中的多个节点上。当HDFS的datanode节点挂载多个磁盘时,往往会出现两种数据不均衡的情况:不同datanode节点间数据不均衡和挂载数据盘的磁盘间数据不均衡。为了避免这种情况,需要对HDFS进行rebalance。rebalance的目的是为了使数据在集群中各节点的分布尽量均衡。如果集群中没有“过载”或者“负载”的节点,则认为集群中的数据分布是均衡的,否则就需要进行rebalance。

一般情况下,需要发起rebalance的场景一般是集群新增了datanode节点或者数据节点上新挂在了磁盘,如果要想让数据快速地落到本地盘上,减轻老节点上的存储压力,发起hdfs节点间的rebalan必不可少。而在一些情况下,会发现hdfs在做rebalance的时候会花费非常长的时间,以至于影响业务高峰时段的集群性能。

原因分析

可以从两方面入手:

集群所处的网络环境

调整带宽和网络设置:确保集群中的带宽和网络设置能够支持高速数据传输。可以通过增加网络带宽、优化网络拓扑、调整TCP参数等方式来提升数据传输的速度。

另外在业务高峰期,应尽量避免做rebalance,以免影响数据跑批时效。

rebalance相关的配置

datanode有平衡带宽的限制,在机房的网络带宽允许的情况下,可以适当调高平衡带宽的限制。 涉及的参数主要有两类:

  • dfs.datanode.balance.bandwidthPerSec该参数的默认值为10M/s,当每日平衡的数据量赶不上新增的数据量时,就会出现hdfs存储不均衡的现象。
  • dfs.datanode.balance.max.concurrent.moves增加rebalance线程数:通过增加rebalance操作的线程数,可以同时处理更多的数据块移动任务,提高rebalance的并发性能。

解决方法

见原因分析,在这个例子中,对于及已经规划好的机房和网络架构,很难短时间在硬件层面提升rebalance的性能,我们可以通过调大hdfs的参数,提升了rebalance效率。