hadoop能得到如此广泛的应用,和背后默默支持它的HDFS是分不开的。作为一个能在成百上千个节点上运行的文件系统,HDFS在可靠性设计上做了非常周密的考虑。
3.2.1 HDFS数据块多副本存储设计
作为一个分布式文件系统,HDFS采用了在系统中保存多个副本的方式保存数据(以下简称多副本),且同一个数据块的多个副本会存放在不同节点上,如图3-2所示。采用这种多副本方式有以下几个优点:1)采用多副本,可以让客户从不同的数据块中读取数据,加快传输速度;2)因为HDFS的 DataNode之间通过网络传输数据,如果采用多个副本可以判断数据传输是否出错;3)多副本可以保证某个DataNode失效的情况下,不会丢失数据。
HDFS按照块的方式随机选择存储节点,为了可以判断文件是否出错,副本个数默认为3(注:如果副体个数为1或2的话,是不能判断数据对错的)。出于数据传输代价以及错误恢复等多方面的考虑,副本的保存并不是均匀分布在集群之中的,关于副本保存分布和维持DataNode负载均衡的更详细的内容,可以参考后面3.4.4节关于balancer的介绍。