3.4 HDFS存储原理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3.4 HDFS存储原理相关的知识,希望对你有一定的参考价值。

参考技术A 一、涉及的问题

1. 冗余数据保存

2. 数据保存策略

3. 数据恢复

二、冗余数据保存问题

1. 冗余因子

出于成本考虑(也是HDFS优势),HDFS常架构在廉价机器上——经常出故障。所以必须有冗余机制。一般每个块都保存3份,即冗余因子默认是3

注意:伪分布式配置,即名称节点和数据节点都放在同一个机器上,则冗余因子显然只能是1,因为只有一个机器

2. 冗余机制的好处

(1) 加快数据传输速度——当多个客户端同时想访问相同数据块时,可以同时并行而不需要排队

(2) 很容易检查数据错误——互相对照发现错误

(3) 保证数据可靠性——HDFS有这样的机制:一旦探测到一个副本故障,会自动复制正确副本,使冗余因子恢复默认值

三、数据保存与读取

1. 第一副本存放策略:

(1) 如果保存请求来自集群内部,第一个副本放在发起者(应用)所在节点。比如一个在DataNode1上的应用发起存数据请求,那就把它第一份副本也存在DataNode1

(2) 如果保存请求来自集群外部,HDFS会随机挑选一台磁盘不太忙且CPU不太忙的节点来放置第一个副本

2. 第二个副本存放策略:

放在和第一副本不同的机架的节点上 。如下图中DataNode4,它和DataNode1在不同机架上

3. 第三副本放置策略:

放在和第一副本相同的机架的其他节点。如图中的DataNode2或DataNode3

4. 更多副本存放策略:

全部随机放置(依靠随机算法)

5、数据读取

原则:就近读取

——HDFS提供一个API可以告诉数据节点的机架ID,客户端也可以用API诊断自己所在机架ID。ID相同说明在同一机架。而相同机架数据间通信很快,它们就是“相近”的数据。

——而前面也说了,每个数据块都有多个不同的副本,如果找到某个副本和客户端在同一个机架上,就优先选此副本。如果没有就随机找一个副本读取

四、数据的错误与恢复

1. 名称节点出错

只有一个名称节点,而且它保存了核心数据结构FsImage和EditLog。恢复方法:

(1) 在HDFS1.0里只能暂停服务,从第二名称节点(冷备份)恢复

(2) 在HDFS2.0里可以直接用热备份恢复而不用暂停服务

2. 数据节点出错

(1) 如何发现数据节点出问题:

在整个运行期间,DataNode都会定期通过远程调用向NameNode发送心跳信息。一旦隔了一个周期收不到心跳信息,则NameNode就知道这个DataNode发生了故障

(2) 如何恢复数据节点:

NameNode会在状态列表里把出错的DataNode标记为不可用(宕机),然后把它里面的数据块对应的备份(在其他DataNode上)复制到另一个DataNode上去

——HDFS和其他分布式文件系统最大的区别就是 可以调整冗余数据位置 。这种调整不仅发生在故障时,也可以在在机器负载不均衡时把一个DataNode的数据迁移到另一个上面以平衡负载

3. 数据出错

(1) 如何发现数据出错:

“校验码机制”——客户端每写入一个数据块,都会为其生成一个校验码并保存在同一文件目录下。读取数据块同时会核对其校验码,如果不对说明数据出问题了。

(2) 如何恢复数据:

从备份复制过来

Reference:

https://www.icourse163.org/learn/XMU-1002335004#/learn/content?type=detail&id=1214310117&cid=1217922275&replay=true

以上是关于3.4 HDFS存储原理的主要内容,如果未能解决你的问题,请参考以下文章

技术HDFS存储原理

大数据技术基础笔记3 分布式文件系统HDFS

Hadoop之HDFS的存储原理(运行原理)

漫画解读HDFS存储原理

漫画解读HDFS存储原理(转载)

HDFS原理概念扫盲