HDFS——DN整体架构与启动流程
2023-06-13 09:15:19 时间
前面文件介绍了dn的持久化文件与对应的数据结构,本文来介绍写dn的整体架构,以及dn的启动流程。
【整体架构】
如图所示,从功能逻辑上来划分,dn的架构可以分为三层。
最上层为服务层,这一层主要包括三个模块:
- RpcServer 对外提供RPC服务,即来自客户端,namenode(后面均简称为nn),其他所有dn的rpc请求处理入口。
- DataXceiver 数据传输服务,客户端对block的读写数据传输,以及dn与dn之间数据副本的拷贝都是通过该服务完成的。
- DatanodeHttpServer 对外提供http服务,主要用于展示dn内部的一些状态。
底层为数据存储层,dn中的所有服务都是在数据存储的基础上完成的,具体可以分为两个部分:
- FsDataset:抽象了dn中数据块的所有操作,可以理解为负责dn中block的创建、读、写、删除等操作与管理,详细参考《DN的存储数据结构》
- DataStorage:负责管理和组织dn中的磁盘存储空间,同时也负责管理存储空间的生命周期(包括升级、回滚等操作)。 在DataStorage中,包含了一个以BlockPoolID为key,value为BlockPoolSliceStorage的map表,用于BlockPool的磁盘存储管理。
中间一层为逻辑业务层,这一层主要包含的模块有:
- BlockPoolManager: HDFS在引入联邦之后,dn会存储多个blockpool的信息,而每个blockpool位于一个命名空间中,即一个blockpool位于一个(对)nn中。 因此,BlockPoolManager模块中会包含一个BPOfferService的列表,每个BPOfferService对应于一个BP,在BPOfferService中又包含一个或一对BPServiceActor,分别负责与该BP所在的ActiveNameNode和StandbyNameNode通信,具体包括心跳上报,block全量汇报,block增量汇报,并执行心跳响应中所携带的nn下发的命令。
- DirectoryScanner: 负责进行磁盘目录的扫描,检查磁盘目录中的block文件与内存中记录的block是否一致,如果不一致,会额外进行标记,并通过block汇报的时候上报nn。
- BlockScanner: 负责dn中所有block数据的完整性校验。
【DN的启动流程】
了解了DN的整体框架后,来看看DN的启动流程。
- 依次构造DataNode、DataStorage、DataXceiver、DatanodeHttpServer对象。
- 构造BlockPoolManager对象,然后根据配置项构造一个或多个BPOfferService对象,在BPOfferService内部根据对应的nn地址,分别为每个nn构造一个BPServiceActor对象。
- BPServiceActor内部会启动一个线程,该线程运行后首先会与nn建立连接,然后请求nn的命名空间信息。
- 收到nn命名空间请求的响应后(响应中会包含命名空间的信息,BP的信息等),完成FsDataset相关对象的初始化,具体包括根据配置的目录依次构建出FsVolume,读取目录下的BP目录,构造出BlockPoolSlice;然后扫描BP下rbw,finalized目录中的block文件,在内存中构造出完整的ReplicaMap(扫描文件名,但不读取具体的文件内容);最后初始化目录扫描器DirectoryScanner,并启动扫描。
- 完成FsDataset相关信息的构造后,BPServiceActor中的线程将继续向nn进行注册,注册需要上报dn磁盘容量等存储相关的信息。
- 完成注册后,BPServiceActor的线程进入循环,定期向nn发送心跳,处理nn下发的命令,同时ipcServer和DataXceiver开始正常提供服务。
本文就介绍到这里,后续将继续分享dn中的一些具体实现逻辑,敬请期待,同时也欢迎交流分享。。。
相关文章
- springboot启动流程详解_网页解析的详细过程
- Hmily 源码解析(二)—— Hmily事务工作流程「建议收藏」
- 显示搜索dota2协调服务器,老司机教你处理搜索dota2游戏协调服务器中【操作流程】…[通俗易懂]
- Activiti教程(六)activiti的流程设计_未完待续
- 微信小程序后端开发流程_微信小程序开发入门
- 传感器开发流程!_传感器工艺流程
- 如何使用持续改进流程应对通胀压力?
- 【架构师(第五篇)】脚手架之import-local执行流程及简历设计
- 图解JVM整体结构、执行流程以及2种架构模型,你学会了吗?
- JavaScript 入门基础 - 流程控制(四)
- 终于有人把HDFS架构和读写流程讲明白了
- 【数据挖掘】数据挖掘简介 ( 数据挖掘引入 | KDD 流程 | 数据源要求 | 技术特点 )
- 【Linux 内核 内存管理】memblock 分配器 ⑤ ( Linux 内核中定义 memblock 分配器的位置 | ARM64体系架构下 Linux内核初始化 memblock 分配器流程 )
- 【分布式技术专题】「单点登录技术架构」一文带领你好好认识以下Saml协议的运作机制和流程模式
- Gorm-事务处理的方法和流程(二)
- MySql执行流程与生命周期详解
- 深入了解Oracle数据库创建用户的流程(oracle数据库创建用户)
- amnd掌握Linux命令,让你简化工作流程(linuxcom)
- 硬核观察 #355 Google 安全团队称 Linux 内核开发需要改进流程和更多人手
- 关于流程挖掘中的数据隐私、数据安全、数据道德底线的一些思考
- Oracle会话终止:重塑标准流程(oracle终止会话)
- 使用 Linux 中的 IF 语句控制流程(linux的if语句)
- Redis集群深入分析存取流程(redis集群的存取过程)