配置DataNode节点容量不一致时的副本放置策略
操作场景
默认情况下,NameNode会随机选择DataNode节点写文件。当集群内某些数据节点的磁盘容量不一致(某些节点的磁盘总容量大,某些总容量小),会导致磁盘总容量小的节点先写满。通过修改集群默认的DataNode写数据时的磁盘选择策略为“节点磁盘可用空间块放置策略”,可提高将块数据写到磁盘可用空间较大节点的概率,解决因为数据节点磁盘容量不一致导致的节点使用率不均衡的情况。
对系统的影响
NameNode默认的副本存储策略为:
- 第一副本:存放到客户端所在节点。
- 第二副本:远端机架的数据节点。
- 第三副本:存放到客户端所在节点的相同机架的不同节点。
如还有更多副本,则随机选择其它DataNode。
“节点磁盘可用空间块放置策略”的副本选择机制为:
- 第一个副本:存放在客户端所在DataNode(和默认的存放策略一样)。
- 第二个副本:
- 选择存储节点的时候,先挑选2个满足要求的数据节点。
- 比较这2个节点磁盘空间使用比例,如果磁盘空间使用率的相差小于5%,随机存放到第一个节点。
- 如果磁盘空间使用率相差超过5%,即有60%(由dfs.namenode.available-space-block-placement-policy.balanced-space-preference-fraction指定,默认值0.6)的概率写到磁盘空间使用率低的节点。
- 第三副本等其他后续副本的存储情况,也参考第二个副本的选择方式。
前提条件
集群里DataNode节点的磁盘总容量偏差不能超过100%。
操作步骤
- 请参考修改集群服务配置参数,进入HDFS的“全部配置”页面。
- 调整HDFS写数据时的依据的磁盘选择策略参数。搜索“dfs.block.replicator.classname”参数,并将参数的值改为“org.apache.hadoop.hdfs.server.blockmanagement.AvailableSpaceBlockPlacementPolicy”。
表1 参数描述 参数
参数说明
dfs.block.replicator.classname
选择副本放置的DataNode的策略。
默认值为“org.apache.hadoop.hdfs.server.blockmanagement.AvailableSpaceBlockPlacementPolicy”。
- 保存修改的配置。保存完成后请重新启动配置过期的服务或实例以使配置生效。