文档首页/ MapReduce服务 MRS/ 组件操作指南(LTS版)/ 使用HDFS/ HDFS企业级能力增强/ 配置DataNode节点容量不一致时的副本放置策略
更新时间:2025-07-14 GMT+08:00

配置DataNode节点容量不一致时的副本放置策略

操作场景

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

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

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

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

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

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

对系统的影响

调整HDFS数据的磁盘选择策略可能会对HDFS写文件性能产生影响。

前提条件

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

操作步骤

  1. 登录FusionInsight Manager。

    登录集群Manager具体操作,请参考访问MRS集群Manager

  2. 选择“集群 > 服务 > HDFS > 配置 > 全部配置”。
  3. 调整HDFS写数据时的依据的磁盘选择策略参数。

    表1 磁盘选择策略参数描述

    参数

    参数说明

    配置示例

    dfs.block.replicator.classname

    选择副本放置的DataNode的策略。

    • org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicyDefault:Hadoop标准副本放置逻辑,它采用机架感知(Rack Awareness)策略,在可靠性、网络效率和读写性能之间取得平衡。
    • org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicyWithRackGroup:在标准机架感知的基础上,引入了机架组(Rack Group)的概念,允许将多个机架划分为一个逻辑组,从而提供更细粒度的副本放置控制。

      需要同步设置“dfs.use.dfs.network.topology”配置项的值为“false”,以及“net.topology.impl”配置项的值为“org.apache.hadoop.net.NetworkTopologyWithRackGroup”,方可启用基于机架组存储策略。

    • org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicyWithNodeLabel:通过节点标签(Node Labels)实现对数据块存储位置的精细化控制。该策略允许管理员根据节点的硬件特性(如SSD/HDD)、位置(机架/数据中心)或角色为节点打标签,并基于标签定义存储策略,从而优化数据分布和资源利用率。
    • org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicyWithNodeGroup:在标准机架感知的基础上,引入了节点组(Node Group)的概念,允许更灵活地定义故障域和数据冗余规则。该策略适用于复杂网络拓扑(如多数据中心、混合云)或需要更精细故障隔离的场景。
    • org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicyWithNonAffinityNodeGroup:在节点组(Node Group)概念的基础上,强制副本不放置在同一节点组内,从而提供更强的故障隔离能力。该策略适用于需要跨数据中心、跨区域部署的高可用性场景,确保即使整个节点组故障,数据仍然可用。
    • org.apache.hadoop.hdfs.server.blockmanagement.AvailableSpaceBlockPlacementPolicy:默认值,在Hadoop标准副本放置逻辑的基础上,增加了对DataNode可用空间的感知能力,优先将数据块分配到存储空间充足的节点上,避免因个别节点空间不足导致的写入失败或数据倾斜问题。
    • org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicyRackFaultTolerant:通过优化副本在机架间的分布方式,确保在多个机架同时故障时仍能保证数据可用性,适用于对可靠性要求极高的大规模集群。

    org.apache.hadoop.hdfs.server.blockmanagement.AvailableSpaceBlockPlacementPolicy

  4. 保存修改的配置。保存完成后请重新启动配置过期的服务或实例以使配置生效。