大型分布式集群通常跨多个机架部署。机架内网络速度快于跨机架,且跨机架通信受上层交换机带宽限制。Hadoop HDFS 将文件按块存储,默认每块3个副本,放置策略为:第一副本放在客户端所在节点;第二副本放在不同机架的随机节点;第三副本放在与第一副本同机架的不同节点;更多副本则随机放置。此策略兼顾访问效率与容错。
但Hadoop的机架感知非自适应,需管理员手动配置IP与机架的映射关系。配置方法是在NameNode的hadoop-site.xml中设置topology.script.file.name,指向一个可执行脚本(如Python脚本)。该脚本接收DataNode的IP或主机名作为参数,输出对应的机架标识(如/rack1)。NameNode启动时加载该脚本,并在收到DataNode心跳时调用它,将返回的机架信息存入内存,用于后续副本分配时优先选择不同机架,避免随机放置导致跨机架流量激增。
若未启用机架感知,副本可能频繁跨机架写入,增加网络带宽压力,影响性能。启用后,NameNode可构建网络拓扑图(如/D1/R1/H1),并计算节点间距离,从而优化副本放置。配置完成后重启NameNode,日志中成功加载脚本即表示生效。此机制有效减少跨机架流量,提升集群稳定性。