副本放置策略 也叫做副本选择策略,这源于此策略的名称( BlockPlacementPolicy
).所以这个策略类重在block placement.这切实关系到 HDFS
的可依赖性与表现,并且经过优化的副本放置策略也使得 HDFS
相比其他分布式文件系统具有优势。
先来看下这个策略类的功能说明:
This interface is used for choosing the desired number of targets for placing block replicas.
在大部分的实际案例中,当复制因子是 r = 3
时,HDFS
的放置策略是将一个复制品放置到写入器操作的 DataNode
中,第二个复制品放置到另一个远程机架上的一个节点中,然后最后一个复制品则放置同一个远程机架的不同物理节点中。如图
橙色区域表示的就是writer
写请求者,绿色区域就是1个副本.从这里可以看出HDFS
在容错性的设计上还是做了很多的思考的.
简要概况起来3点:
- 1st replica. 如果写请求方所在机器是其中一个datanode,则直接存放在本地,否则随机在集群中选择一个datanode.
- 2nd replica. 第二个副本存放于不同第一个副本的所在的机架.
- 3rd replica.第三个副本存放于第二个副本所在的机架,但是属于不同的节点.
优点
这种放置策略可以有效的减少机架之中的通信以提高系统的表现。因为不同机架的物理节点的通信需要通过交换机,而在大多数情况下,同一机架中的计算机之间的网络带宽大于不同机架中的计算机之间的网络带宽。
如果复制因子大于3,则随机确定第4个及以后副本的放置,同时保持每个机架的副本数量低于上限。
上限数一般为(副本数-1)/ 机架 + 2
由于 NameNode
不允许 DataNode
具有同一块的多个副本,因此,能创建的最大副本数是此时 DataNode
的总数。
当有客户端请求读取时,HDFS
为了最小化全局带宽消耗与读取延迟,会优先选择离读取客户端最近的数据副本。