文档首页/ MapReduce服务 MRS/ 组件操作指南(安卡拉区域)/ 使用HDFS/ 配置DataNode节点间容量异构时的副本放置策略
更新时间:2024-11-29 GMT+08:00

配置DataNode节点间容量异构时的副本放置策略

操作场景

默认情况下,NameNode会随机选择DataNode节点写文件。当集群内某些数据节点的磁盘容量不一致(某些节点的磁盘总容量大,某些总容量小),会导致磁盘总容量小的节点先写满。通过修改集群默认的DataNode写数据时的磁盘选择策略为“节点磁盘可用空间块放置策略”,可提高将块数据写到磁盘可用空间较大节点的概率,解决因为数据节点磁盘容量不一致导致的节点使用率不均衡的情况。

对系统的影响

修改磁盘选择策略为“节点磁盘可用空间块放置策略(org.apache.hadoop.hdfs.server.blockmanagement.AvailableSpaceBlockPlacementPolicy)”,经过测试验证,在该测试结果中,修改前后,HDFS写文件性能影响范围在3%以内。

NameNode默认的副本存储策略为:

  1. 第一副本:存放到客户端所在节点。
  2. 第二副本:远端机架的数据节点。
  3. 第三副本:存放到客户端所在节点的相同机架的不同节点。

如还有更多副本,则随机选择其它DataNode。

“节点磁盘可用空间块放置策略”的副本选择机为:

  1. 第一个副本:存放在客户端所在DataNode(和默认的存放策略一样)。
  2. 第二个副本:
    • 选择存储节点的时候,先挑选2个满足要求的数据节点。
    • 比较这2个节点磁盘空间使用比例,如果磁盘空间使用率的相差小于5%,随机存放到第一个节点。
    • 如果磁盘空间使用率相差超过5%,即有60%(由dfs.namenode.available-space-block-placement-policy.balanced-space-preference-fraction指定,默认值0.6)的概率写到磁盘空间使用率低的节点。
  3. 第三副本等其他后续副本的存储情况,也参考第二个副本的选择方式。

前提条件

集群里DataNode节点的磁盘总容量偏差不能超过100%。

操作步骤

  1. 请参考修改集群服务配置参数,进入HDFS的“全部配置”页面。
  2. 调整HDFS写数据时的依据的磁盘选择策略参数。搜索“dfs.block.replicator.classname”参数,并将参数的值改为“org.apache.hadoop.hdfs.server.blockmanagement.AvailableSpaceBlockPlacementPolicy”。
  3. 保存修改的配置。保存完成后请重新启动配置过期的服务或实例以使配置生效。