Hadoop学习笔记(3)——HDFS(2)

目录

四、HDFS的读写流程(面试重点)

1、HDFS写数据流程

1.1 剖析文件写入

1.2 网络拓扑-节点距离计算

1.3 机架感知(副本存储节点的选择)

1.4 HDFS读数据流程

五、NameNode和SecondaryNameNode

1、NN和2NN工作机制

2、Fsimage和Edits解析

2.1 oiv查看Fsimage文件

2.2 oev查看Edits文件

3、CheckPoint时间设置

3.1 时间设置的查看 

3.2 操作次数检查

六、DataNode

1、DataNode工作机制

2、数据完整性

3、掉线时限参数设置


四、HDFS的读写流程(面试重点)

1、HDFS写数据流程

1.1 剖析文件写入

1.2 网络拓扑-节点距离计算

在HDFS写数据的过程中,NameNode会选择距离待上传数据最近距离的DataNode接收数据,那么这个最近距离该怎么计算呢?

节点距离:两个节点到达最近的共同祖先的距离总和

1.3 机架感知(副本存储节点的选择)

以上内容有兴趣自行翻译加了解

第一个副本在本地,效率高。第二个副本在另一个机架,保证安全可靠性(相当于多了一个备份)。第三个副本在第二个副本所在机架的随机节点,又兼顾了效率 

1.4 HDFS读数据流程

注意:读数据是不能并发读的,要串行读,先读完第一块,再第二块...... 

五、NameNode和SecondaryNameNode

1、NN和2NN工作机制

思考:NameNode中的元数据是存储在哪里的?

首先,我们做个假设,如果存储在NameNode节点的磁盘中,因为经常需要进行随机访问,还有响应客户请求,必然是效率过低。因此,元数据需要存放在内存中。但如果只存在内存中,一旦断电,元数据丢失,整个集群就无法工作了。因此产生在磁盘中备份元数据的FsImage

这样又会带来新的问题,当在内存中的元数据更新时,如果同时更新FsImage,就会导致效率过低,但如果不更新,就会发生一致性问题,一旦NameNode节点断电,就会产生数据丢失。因此,引入Edits文件(只进行追加操作,效率很高)。每当元数据有更新或者添加元数据时,修改内存中的元数据并追加到Edits中。这样,一旦NameNode节点断电,可以通过FsImage和Edits的合并,合成元数据。

但是,如果长时间添加数据到Edits中,会导致该文件数据过大,效率降低,而且一旦断电,恢复元数据需要的时间过长。因此,需要定期进行FsImage和Edits的合并,如果这个操作由NameNode节点完成,又会效率过低。因此,引入一个新的节点SecondaryNamenode,专门用于FsImageEdits的合并。

工作流程: 

  

1、HDFS对历史数据进行改写很麻烦,但追加很简单。为了提升效率,使用Edits只负责追加计算过程,但不进行计算结果,使用镜像文件fsimage记录结果。2NN会定期将这俩个文件进行合并(关机再合并效率很低,执行一些写一些效率高)

2、滚动在写的Edits是进入到002,原来的更名为edits_001

2、Fsimage和Edits解析

 

2.1 oiv查看Fsimage文件

 

 下面这行命令可以将文件直接下载到windows下

2.2 oev查看Edits文件

 

3、CheckPoint时间设置

3.1 时间设置的查看 

 

3.2 操作次数检查

 

六、DataNode

1、DataNode工作机制

 

心跳3秒返回是告诉NameNode自己没有挂,每周期(6小时)上报块信息是告诉NameNode数据块还完好

 

2、数据完整性

这里的奇偶校验位只是举例,实际上是使用的crc(32)校验方法

3、掉线时限参数设置

  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值