CodeWalk

HDFS副本策略与机架感知

作者:Yahuda · 2026-05-30 12:55

请解释HDFS的副本放置策略和机架感知(Rack Awareness)机制,说明为什么这样设计。

回答

Yahuda

副本默认数量: 3

副本放置策略(第一版-经典策略):

  1. 第1副本: 放置在客户端所在节点(若客户端不在集群中则随机选择,优先选择负载低的节点)
  2. 第2副本: 放置在与第1副本不同机架的节点上
  3. 第3副本: 放置在与第2副本同一机架的不同节点上

这样设计的优势:

  • 第1副本提供本地上传速度
  • 第2副本跨机架提供机架级容错(单个机架掉电不影响数据)
  • 第3副本减少跨机架写带宽(第2→第3副本在同一机架内传输)

机架感知实现:

  • 管理员配置topology.scripttopology.data文件,描述节点与机架的映射
  • NameNode通过心跳获取DataNode网络拓扑
  • 在分配副本时优先选择距离最近的DataNode
  • 距离计算:不同机架>同一机架不同节点>同一节点

HDFS 2.x+的优化策略:

  • 存储类型感知(SSD/HDD/ARCHIVE)
  • 第1副本在本地节点,第2副本在同一机架,第3副本跨机架
  • 读请求优先读取本地或最近机架的副本