HDFS读流程
- client:通过DistributedFileSystem流请求下载文件
- NameNode:返回目标文件的元数据
- client:通过FSDataInputStream请求读数据block_1(考虑负载和节点距离)
- DataNode1:传输数据
- client:访问其他节点并请求数据block_2
- DataNode2:传输数据
注意:数据串行读入!!因为这里考虑到了某一个节点的负载,读完一个block再读另一个。
NN和2NN的工作机制
服务器启动时:加载两个数据到内存
- 加载fsimage存储数据
- Edits追加(改写数据的过程) ----> 并不会再次修改原数据,减少了修改时间开销
服务器关闭时:将两个镜像文件合并
- 合并fsImage和Edits
- 并将改写数据的操作实施
namenode的data数据中就有对应的镜像文件。
下面具体看看namenode和secondarynamenode是如何协调工作的
- Namenode启动:加载编辑日志和镜像到内存
- client:增删改查请求
- 先更新操作日志、滚动日志 再更改内存
- 内存数据修改
小秘书怎么工作?
- SN:请求是否需要CheckPoint 定时时间到或者是Edits中的数据满了
- SN:请求执行CheckPoint
- Namenode:滚动生成正在写的Edits,生成新的inprogress_002 (注意:此时外界的修改操作将写入002而不是001) 并且修改inprocess_001为Edits_001
- SN:拷贝fsimage和edits_001
- SN:加载到内存中并合并
- 生成新的fsimage文件 ----> fsimage.chkpoint
- 再拷贝回Namenode并覆盖原fsImage并覆盖改名为fsImage
- 最新的数据就成了fsImage和inprocess_002的内容 (只需要下次将其加载到内存即可)
FsImage和Edits文件
-
FsImage:
HDFS文件系统原数据的一个永久的检查点:包含所有目录和iNode序列化信息
-
Edits:
所有更新操作路径
每次开机合并文件为:edits_inprocess_00000000XXX和最新的FsImage——000000000355(假设是355)
DataNode工作机制
- 开机主动上报block信息并定期(6小时)汇报所有块信息
- 心跳机制:每3s跟老板Namenode汇报自己还活着
- 超过10min+30s没有收到心跳,则认为该节点over!
- Namenode不会再将任务传给该节点
数据完整性
奇偶校验位:
原始数据“1”有几个? 最终目的是想得到偶数个“1 ”
- 奇数个:校验位写“1”
- 偶数个:校验位写“0”
聪明的你想到了一个问题:接收方只能检查出奇数个1的错误,如果两位bit都有问题,使得最后的1为偶数个,这错误就检查不出来吧。于是聪明的工程师也想到了这个问题,于是呢
CRC校验:
- 根据双方协定好的多项式,计算多项式项数n并补0,再除以多项式模二运算得到余数添加到原数据的后面成为crc校验码(真是复杂,可以去看另一篇blog哟)
- 接收方看看数据准不准确,将数据除以多项式进行模二运算,得到余数为0 太好了,数据传输无误
本期笔记就到这里啦,谢谢你的阅读和关注哦