HDFS数据副本的摆放策略
- 副本的存放位置对于HDFS的性能和可靠性是非常重要的,如果副本的存放机制不好的话,在计算的过程中很大可能会产生数据传输,这样对于带宽和磁盘的IO影响非常巨大。因此对于优化副本的摆放来说,HDFS还是跟其他的分布式文件系统有所区别的。HDFS需要大量的优化以及经验,因此不同的HADOOP版本的副本的摆放策略可能是不一样的。
rack-aware
(机架感知),例如有100台机器,前面60台在机架1中,后面40台在机架2中。
利用机架感知策略可以改善数据的可靠性,可用性和网络带宽利用率。当前的副本摆放策略实现正式往这个策略中努力,还是有很大的提升空间的,也就是说还在优化。
在一个大的HDFS集群中都是跨机架运行的。如果两个节点再不同的机架上,如果想进行通信,那么一定要走交换机,这种情况下,如果在同一个机架上的机器之间网络的带宽一定会优于不同机架上机器之间的网络带宽。- 例如DataNode1在机架1中,DataNode2在机架2中,他们之间的关系就是通过NameNode中的
rack-aware
(机架感知)来确定的。如果把所有的副本都放在一个机架中,虽然这种做法简单,但并不是一个最好的策略,如果机架挂掉之后,那么整个集群也就无法正常使用了,为了防止数据丢失,应该在多个机架上去读数据。然而机架感知策略也是有成本的,增加了不同机架之间的写操作。 - 通常情况下,Hadoop默认的副本数量是3,假设有两个机架,如果操作的时DataNode那么HDFS的这个摆放策略会将一个副本摆放到本机器中,如果操作的不是DataNode,就会随机挑选一个DataNode, 另外一个副本会放在不同的机架上面,第三个副本会在与第二个副本在同一个机架中,但是在不同的节点上。因为机架挂掉的可能性远小于节点挂掉的可能性。