今年上半年一直忙于云南省公安厅JZ大数据治理平台的项目,已经大半年没有更新技术博客了,这篇博客算是2019年的第一篇吧。
关于HDFS副本存放策略,一直以来总是会听到和看到两种不同的观点。
今天看了Hadoop官网上关于Hadoop2.7.6与Hadoop2.8.4的技术文档,HDFS副本存放策略其实可以分为新旧两种策略。
Hadoop2.7.6及以下版本是按照旧的策略进行副本存放的,官网文档描述如下:
在常见情况下,当复制因子为3时,HDFS的放置策略是将一个副本放置在本地机架中的一个节点上,将另一个副本放置在本地机架中的另一个节点上,最后一个副本放置在不同机架中的另一个节点上。
Hadoop2.8.4及以上版本是按照新的策略进行副本存放的,官网文档描述如下:
在常见情况下,当复制因子为3时,HDFS的放置策略是:如果写入器在数据节点上,则将一个副本放置在本地计算机上;否则,在随机数据节点上,HDFS将另一个副本放置在不同(远程)机架中的节点上的,最后一个位于同一远程机架中的其他节点上。
最后,再把新版本的副本存放策略的基本思想描述如下:
第一个副本存放Client所在的节点上(假设Client不在集群的范围内,则第一个副本存储节点是随机选取的。当然系统会不选择那些太满或者太忙的节点)
第二个副本存放在与第一个节点不同机架中的一个节点上。
第三个副本和第二个在同一个机架,随机放在不同的节点上。
如果还有很多其他的副本就随机放在集群中的各个节点上。