1. 前言:
Hadoop集群长时间运行以后,我们有可能会发现这样一种现象:Datanode节点间的数据不平衡,有的节点使用率很高,有的节点使用率很低。出现这种状况,我们一般采用HDFS自带的balancer工具来解决,保证每个节点的数据分布均衡。
2. balancer的设计目标
- 在集群范围内均衡各datanode的数据。
- 在不影响正常集群活动和运行任务的前提下持续缓慢运行。
3. 使用场景
- 清理使用率高dn。将使用率很高的dn数据迁移掉减轻它的压力。
- 新增dn。新增的dn都是没有数据的,需要尽快把它用起来。
- 在维护窗口或集群负载低时高速运行。
4. 导致节点间数据不均衡可能的原因
新增dn后
新增dn后,新创建块会渐渐写到这些dn,但是已经存在的块不会移动,除非使用balancer
客户端行为
客户端在写入数据时,可能更偏向某些机器(热点),如HBase。dn在直接从客户端收到数据时,会在本地保存一个副本(数据本地性)。经常接收数据的dn通常有更高的存储使用率
HDFS块分配方式
HDFS块分配方式是约束满足算法,HDFS会随机从满足条件的存储设备中分配块。均匀随机分配可能不会导致均匀数据分布,当集群越满,这个问题越严重