HDFS副本放置策略疑问:为何不在同机架存储第二个副本?
HDFS块放置策略的设计逻辑
你提到的“把第二个副本放在同机架、只跨一次机架写第三个副本”看起来省带宽,但HDFS的默认策略是经过容错和负载均衡考量的,具体原因如下:
- 容错优先级更高:如果两个副本集中在同一机架,一旦机架整体故障(比如交换机断电、网络瘫痪),直接损失两个副本,仅剩的一个副本容错风险极高。分散到不同机架后,哪怕一个机架彻底挂了,另外两个副本分别在独立机架存活,数据安全性有保障。
- 避免读请求集中瓶颈:HDFS读数据会优先选就近副本,要是两个副本在同一机架,这个机架的节点会被大量读请求挤爆,成为集群性能瓶颈。分散到多机架后,读请求能被多个机架分担,整体负载更均衡。
- 跨机架带宽的实际消耗没那么大:HDFS写入是流水线式的——写入节点写完本地副本后,先传给同机架的第二个节点,同时第二个节点再把数据转发给跨机架的第三个节点,并不是同时发起两次跨机架传输,实际带宽开销远小于“同时跨两次机架”的想象。相比数据丢失的风险,这点带宽成本完全值得。
内容的提问来源于stack exchange,提问作者Shehryar Mallick
相关产品推荐
相关产品推荐

