HDFS block块的副本存放策略

转自:http://www.cnblogs.com/sparkwoo/archive/2013/05/14/3077440.html

并作一些修改,以更容易理解副本存放策略

 

 

系统默认为每一个数据块存放3个副本,按照布署在NameNode上的默认机架感知策略存放数据块副本。其中:

第一个block副本放在上传文件的datanode,如果是集群外提交则随机挑选一台磁盘不太满,cpu不太忙的datanode。 

 

注:这里所说的本地节点是相对于客户端来说的,也就是说某一个用户正在用一个客户端来向HDFS中写数据,如果该客户端上有数据节点,那么就应该最优先考虑把正在写入的数据的一个副本保存在这个客户端的数据节点上,它即被看做是本地节点,但是如果这个客户端上的数据节点空间不足或者是当前负载过重,则应该从该数据节点所在的机架中选择一个合适的数据节点作为此时这个数据块的本地节点。另外,如果客户端上没有一个数据节点的话,则从整个集群中随机选择一个合适的数据节点作为此时这个数据块的本地节点。

 

第二个block副本放置在与第一个datanode节点相同的机架中的另一个datanode中(随机选择)。  

第三个block副本放置于另一个随机远端机架的一个随机datanode中。 

如果还有更多的副本就随机放在集群的node里。 

 

将第一、二个block副本放置在同一个机架中,当用户发起数据读取请求时可以较快地读取,从而保证数据具有较好的本地性。

第三个及更多的block副本放置于其他机架,当整个本地结点都失效时,HDFS将自动通过远端机架上的数据副本将数据副本的娄得恢复到标准数据。

Hadoop的副本放置策略在可靠性(block在不同的机架)和带宽(一个管道只需要穿越一个网络节点)中做了一个很好的平衡。

猜你喜欢

转载自tydldd.iteye.com/blog/2053216