`

hadoop文件系统中文件复本的默认布局

 
阅读更多

       最近一有时间就在补数据结构和学Hadoop上的知识,今天看了一下Hadoop中的HDFS(分布式文件系统)中是怎么将文件写入HDFS中的,在将文件写入HDFS的时候有一件事情也在发生,就是文件复本的写入,这就又要牵扯到一个东西,就是文件复本的布局,今天就来谈谈文件的复本在datanode上是怎么个布局法。

       首先来说说文件复本是什么,其实从字面上也就知道了,其实他就是我们写入文件一模一样的东西,就是把文件复制了几份,在Hadoop中一般情况下复制数量是3份(这3个复本的datanode分布好后会构成一个管线)。为什么要复制了?就是为了防止数据丢失,当 一个datanode上的数据丢失或者损坏后,其他的节点上还有复本,就是为了这样才有了复本的出现。

        我们知道,namenode是领导,它负责统筹规划,因此数据块和 它们的复本分配到哪个datanode上也要听从他的指挥。它也不是随便乱分配的,它需要在”可靠性“,”写入宽带 “和”读取宽带“之间来权衡好。如果把所有的复本都写在一个datanode上的话,它的”写入宽带“最小,这个想也想得出,它不用把数据传出去嘛,它的复制管线都是在单一的节点上运行,但是这样如果该节点发生了故障,块中的数据就会丢失,也就是它不提供真实的”冗余“,  还有虽然它的”写入宽带很小“但是在同一机架上”读取宽带“很高,另一方面,把他们放在不同的数据中心,那样可以最大限度的提高冗余,但是宽带的损耗非常大。

         hadoop的默认布局策略是在运行客户端的节点上放第1个复本(如果客户端运行在集群之外,就随机的选择一个节点,但是系统会避免挑选那些存储太满或太忙的节点)。第2个复本放在与第1个不同且是随机选择的另外的机架中的节点上。第3个复本与第2个复本放在同一个机架上面,且是随机选择的一个节点,其他的复本放在集群中随机选择的节点上面,但是系统会尽量避免在相同的机架上面放太多的复本。

          一旦选定了复本的放置的位置,就会根据网络拓扑创建一个管线,如下图为一个典型的复本管线:



 

总的来说,这一方法不仅提供了很好的稳定性,数据不容易丢失(数据块存储在两个机架中)同时实现了很好的负载均衡,包括写入宽带(写入操作只要遍历一个交换机),读取性能(可以从两个机架中进行选择读取)和集群中块的均匀分布(客户端只在本地机架写入一个块)。

 

PS:以上的内容参考自《Hadoop 权威指南》。

  • 大小: 167.3 KB
3
2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics