基于本文回答

播面 播面

文图音视,全方位拆解八股文
0
评论

HDFS的默认副本存放策略是怎样的?

知识点图片

HDFS(Hadoop Distributed File System)默认的副本存放策略是基于机架感知(Rack Awareness)的。在默认情况下,HDFS的副本因子(Replication Factor)为 3

HDFS 在放置这 3 个副本时,主要为了在可靠性(容错)、写入带宽和读取性能之间取得最佳平衡。其默认的存放策略(针对 3 个副本)如下:

1. 具体的副本放置步骤

  • 第一个副本(Replica 1):存放在本地节点(Local Node)

    • 如果客户端(Client)本身就是一个 DataNode(即在集群内部运行),那么第一个副本会优先存放在客户端所在的节点上。
    • 如果客户端在集群外部,NameNode 会根据网络拓扑、磁盘空间和负载情况,随机选择一个负载不高的节点来存放。
    • 目的:最大程度减少网络传输,提高写入速度。
  • 第二个副本(Replica 2):存放在不同机架的节点上(Remote Rack)

    • HDFS 会强制将第二个副本存放在与第一个副本不同的机架(Rack)上的随机节点。
    • 目的:保证机架级别的容错。如果第一个副本所在的机架发生断电或交换机故障,数据依然可以从第二个机架恢复。
  • 第三个副本(Replica 3):存放在与第二个副本相同机架的另一个节点上

    • 第三个副本会被存放在与第二个副本所在的机架相同,但节点不同的机器上。
    • 目的:平衡安全性和写入性能。因为跨机架的数据传输成本较高(需要经过机架顶部的交换机甚至核心交换机),将第三个副本放在和第二个同机架的节点上,可以减少跨机架的网络流量。
  • 第 N 个副本(如果副本数大于 3):随机存放

    • 如果配置了超过 3 个副本,剩余的副本将在集群中随机选择节点存放。但 HDFS 会尽量保证同一个机架上的副本数不会过多(通常单机架副本数上限设为 (replicas - 1) / racks + 2)。

2. 策略总结(一句话概括)

3个副本会分布在 2 个不同的机架上:其中一个机架有 1 个副本,另一个机架有 2 个副本。


3. 为什么采用这种设计?(核心优势)

这种“1+2”的跨机架放置策略是经过精心设计的,它解决了以下痛点:

  1. 容错性(Reliability):
    • 如果一台机器宕机,还有另外两个副本可用。
    • 如果一个机架整体故障(如交换机坏了、断电),因为数据分布在两个机架上,另一个机架上至少还有一个副本,数据不会丢失。
  2. 写入性能(Write Bandwidth):
    • HDFS 写入数据采用的是管线(Pipeline)方式:Client -> 副本1 -> 副本2 -> 副本3
    • 如果 3 个副本放在 3 个不同的机架上,写入时需要跨越 2 次机架交换机,网络开销大。
    • 当前的策略下,数据从副本 1 到副本 2 跨越一次机架,从副本 2 到副本 3 是在同一机架内传输,大大减少了跨机架的网络写带宽消耗
  3. 读取性能(Read Performance):
    • 读取数据时,HDFS 会计算客户端与各个副本之间的“网络拓扑距离”,优先选择距离客户端最近的副本进行读取,从而降低读取延迟。

*注:要让这个策略生效,Hadoop 管理员必须在集群中正确配置**机架感知(Rack Awareness)*脚本。如果没有配置,HDFS 会认为所有的节点都在同一个默认机架(/default-rack)上,这样就无法实现跨机架容错。

00:00
00:00