hdfs三大机制的流程

版权声明:数据丁 https://blog.csdn.net/reasery/article/details/82828387

namenode的作用:

1.接收客户端的读写请求
2.保存元数据信息
3.分配副本的存放节点
4.负载均衡

secondarynamenode:

1.备份元数据
2.帮助namenode进行checkpoint,分担压力

datanode:

1.真正的数据存储
2.处理客户端的读写请求

hdfs三大机制
上传
下载
元数据合并

一。上传

  1. 客户端向namenode发送文件上传的请求
  2. namenode进行一系列的检查(1.权限,2.检查父目录是否存在,3.检查文件是否重名等,没有问题之后进行下一步)
  3. 向client发送文件上传的响应
  4. client发送文件上传的真正请求,包含文件名,文件大小等
  5. namenode向client返回数据上传的节点,通过文件大小进行计算,算出文件被切分的块数,最终确定返回的节点个数(例如文件200m,被切成两块,默认三个副本,则bk1:1,2,3 bk2:3,4,5)
  6. 客户端开始准备文件上传(进行文件的逻辑切块(不真正切块,只划分出切块的范围,是预切分))
  7. 构建第一个块的pipline(从client-》datanode01-》datanode02.。。。)在此期间,客户端会构建一个守护进程,等待pipline构建成功的响应
  8. 开始上传第一个数据块,边上传,边切分,以pakage为单位进行 上传,先上传到第一个节点,再由第一个节点上传到后面的节点,依次进行复制
  9. 第一个数据块上传成功,向客户端反馈
  10. 开始上传第二个数据块,重复上述步骤
  11. 当所有数据块上传成功,通知namenode

ps:
1.构建pipline的时候,如果有节点通信不成功,会重试,没有反应会剔除,然后重建pipline
2.文件上传过程中,只要有一个副本上传成功,就默认这个数据块上传成功,剩下的副本会在集群空闲的时候进行异步复制
3.优先返回客户端所在节点,如果客户端不在集群中,就近返回同机架的节点,再返回不同机架的,就近返回原则

二。下载
1.客户端向namenode发送文件下载请求
2.namenode进行一系列检查(权限,文件是否存在),之后查询自己的元数据库,反回数据对应的块的存贮位置
3.客户端拿到块的存储信息之后,开始进行第一个块的下载
4.第一个块下载成功之后会进行crc校验,通过则下载成功
5.开始第二个块的下载,重复步骤
6.当所有的数据块下载完成之后,向namenode发送反馈

三。元数据合并
元数据包含
1.抽象目录树
2.数据和块的映射
3.块的存储位置
元数据文件分成4类

 1.edits 历史日志文件/正在编辑的日志文件,记录元数据的操作日志
 2.fsimage 镜像文件,存储真实的元数据信息序列化之后的文件
 3.seen_txid 合并点,记录下次需要合并的edits文件的编号
 合并工作由secondarynamenod来做
 fsimage最终就是由fsimage和edits合并得来的 

触发条件:可配置 1.一个小时 2.元数据条数达100万

checkpoint过程
若接收到修改元数据的请求比如hadoop fs -mkdir

1.先修改edits文件
2.修改内存中的元数据
3.snd会定时向nd发送请求,查看是否需要合并
4.nd反馈需要进行元数据合并
5.snd向nd发送元数据合并的请求
6.nd将正在编辑的edits文件进行回滚,写入历史数据,同时生成新的edits_inprogress文件,接受新的元数据请求
7.snd会将回滚完成的文件和fsimage文件拉取到snd本地
8.snd对文件放在内存中进行合并,完成后fsimage.checkpoint文件
9.将新的fsimage文件发送给nd,并进行重命名为fsimage文件,将原来的文件覆盖

猜你喜欢

转载自blog.csdn.net/reasery/article/details/82828387