HDFS的存储策略

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34784043/article/details/83244241

HDFS是Hadoop的分布式文件系统,前身是GFS,即Google的分布式文件系统。在介绍HDFS的存储策略过程中会谈到NameNode、SecondNameNode和DataNode,建议可以先看一下“图解Hadoop中NameNode、SecondNameNode和DataNode的运行”这篇文章,网址是https://blog.csdn.net/qq_34784043/article/details/83239434

在介绍HDFS的存储策略前,先介绍一下,机架集群结构。

如下图是一个机架集群的结构,在机架的单个计算机节点都是由处理器、内存、高速缓存和本地磁盘构成。每个节点通过交换机或者路由器连接成一个服务器集群。在HDFS中,可以是NameNode,也可以是DataNode,当然NameNode一般情况下只有一个。 

1、数据的冗余存储

为了保证系统的容错性和可用性,HDFS采用了多副本方式对数据进行冗余存储,通常一个数据块的多个副本会被分布到不同的数据节点。在HDFS中默认的冗余因子是3,也就说一个数据块会有三个副本。如下图:

 

2、不同副本不都放在一个机架上

HDFS默认第二个副本不和第一个放在同一个机架上,这样虽然增加了两个副本之间通信时间,但是也增加了安全性,防止一个机架发生故障,其他机架上的副本还是可用的。以及可以让不同客户端读取同一个数据源时,分别到不同的副本读取数据,增加了数据读取效率。HDFS默认第三个副本一般放在和第一个副本同一机架上,这样就可以保证第一个副本发生异常时,数据能够及时恢复。

3、HDFS的数据复制采用流水线的复制机制

在客户端往HDFS中写入数据时,会先根据写入数据的大小划分不同的数据块,然后向名称节点提出写入请求,名称节点会根据HDFS中每个数据节点的使用情况选择数据节点给客户端的数据写入。当客户端写入一个数据节点副本时,每到数据达到4K大小后,就会向第二个副本的数据节点发起连接请求,把4K数据写入第二个节点。第二个数据节点写入4K数据后,第二节点就向第三数据副本的节点提出连接请求,把4K数据传给第三数据节点并写入。这样形成了一个数据复制的流水线,几乎当数据写入完成,数据复制也同时完成。

4、名称节点备份

在HDFS中可以运行一个第二名称节点,但名称节点故障,可以利用第二名称节点中的数据恢复。或者可以把名称节点上的元数据同步存储到其他文件系统。

5、数据节点“心跳”信息

每个数据节点会定期向名称节点发送“心跳”信息,向名称节点报告自己的状态。当数据节点发生故障时,名称节点收不到数据节点的“心跳”,就不会再向故障节点发送IO信息,以及会在其他数据节点增加一份数据备份。

6、客户端接收数据出错

可能会因为网络和磁盘等问题造成客户端接收数据错误。当客户端接收到数据时先会对数据进行校验,如果校验出错,就会向另外一个数据节点副本读取数据,并向名称节点报告这个数据节点出错。名称节点就会对该数据节点进行检查和复制副本。

猜你喜欢

转载自blog.csdn.net/qq_34784043/article/details/83244241
今日推荐