DataNode逻辑结构

一 DataNode 作用

1Data Node以数据块的形式存储HDFS文件

2Data Node 响应HDFS 客户端读写请求

3Data Node 周期性向NameNode汇报心跳信息

4Data Node 周期性向NameNode汇报数据块信息

5Data Node 周期性向NameNode汇报缓存数据块信息

6Name Node根据汇报内容,修改NameNode的命名空间,同时向DataNode 返回指令,比如创建,删除和复制数据块指令,然后DataNode根据这些指令在本地进行创建,删除和复制数据块

 

二 HDFS1.X逻辑结构


HDFS1.X架构使用一个NameNode来管理文件系统的命名空间以及数据块信息,架构比较简单,但是缺陷很大:

>>由于NameNode在内存中保存整个文件系统的元数据,所以NameNode内存大小直接限制了文件系统的大小

>>由于HDFS文件系统的读写等流程都涉及和NameNode交互,所以文件系统的吞吐量受限于单个NameNode的处理能力

>>无法做到数据的有效隔离

>>有单点问题,因为只有一个NameNode

>>数据块的管理和命名空间的管理高度耦合,难以让其他服务单独使用数据库存储功能

 

三 HDFS2.X的逻辑结构

为了能够水平扩展NameNode, HDFS2.X提供了Federation的架构,可以定义多个NameNode/Name Space,这些NameNode之间是相互独立的,他们各自分工管理着自己的命名空间。而HDFS 集群中的DataNode则提供数据共享存储的功能,每一个DataNode都会向每一个NameNode注册,而且周期性的向所有NameNode发送心跳信息和数据块汇报,然后执行NameNode的指令



HDFSFederation 引入了2个新的概念:BlockPool(块池)以及NameSapaceVolume(命名空间卷)

BlockPool:由属于同一个命名空间的所有block组成,这个BlockPool中的block可以存储在集群中所有DataNode上,而每一个DataNode可以存储集群中任何BlockPool中的block。每一个BlockPool是独立管理的,不会和其他BlockPool交互,所以一个NameNode出现故障,并不会影响集群中DataNode服务于其他的NameNode

NamespaceVolume:一个NameNode的Namespace和他的BlockPool一起被称为命名空间卷,当一个NameNode/Namespace被删除后,所对应的BlockPool也会从集群中删除。当集群升级时,每一个命名空间卷都会作为一个基本的单元升级

 

这种架构的优点:

支持NameNode水平扩展,同时为用户和程序提供了命名空间级别的隔离性

 

四 DataNode的逻辑结构

我们可以将基于Federation的架构的HDFS分为三层:数据层,逻辑层和服务层

4.1数据层

将DataNode 中负责数据块存储和管理数据块操作的部分抽象成数据层,它主要包括2部分:

4.1.1DataStorage(数据块存储)

数据块存储主要是管理DataNode磁盘存储空间以及磁盘存储空间的生命周期。说的直白一点就是DataStorage这个类主要负责管理数据存储文件信息,比如current,detach,finalized等等文件。

BlockPoolSliceStorage可以用来管理DataNode每一个单独的块池,DataStorage会持有这个BlockPoolSliceStorage对象引用,并通过这个引用来管理DataNode的块池。

4.1.2FSDataset(文件系统数据集)

FSDataset抽象了DataNode对数据块管理的操作,比如创建数据块,维护数据块文件等。我们知道每一个DataNode都可以配置多个不同类型的存储目录来保存数据,所以HDFS定义了FSVolumeImpl来管理DataNode上单个存储目录上    保存的数据块,同时定义了FSVo

lumeList来维护DataNode上所有FSVolumeImpl对象的引用。FSDataSet会通过FSVolumeList提供的管理功能来管理DataNode上存储的目录保存的数据块

4.2逻辑层

DataNode基于数据层会执行很多HDFS 逻辑处理,比如向NameNode汇报数据块状态,发送心跳,扫描损坏的数据块等,我们将HDFS执行这些逻辑的部分抽象成逻辑层。逻辑层主要包括三个模块:

4.2.1BlockPoolManager

BlockPoolManager是管理所有BlockPool的接口类,在HDFS Federation机制下,我们在集群可以创建多个NameSpace,每一个NameSpace都对应着一个BlockPool,一个BlockPoolManager会持有一个BPOfferService对象,用于管理DataNode单个BlockPool, 我们知道,如果引入HA机制, NameNode就会有ActiveNM 和 StandbyNM。所以每一个BPOfferService又会持有2个BPServiceActor对象,每一个BPServiceActor对应于命名空间里的一个Name Node,该对象负责向NameNode发送心跳报告,数据块汇报,缓存汇报等

4.2.2DataBlockScanner

一个周期性扫描每一个数据块并检查数据块校验是否正常的一个线程

4.2.3DirectoryScanner

周期性扫描磁盘数据块,对比内存中元数据与实际磁盘存储数据块的差异,并根据差异更新内存元数据,使得与磁盘保存一致

 

4.3服务层

主要用于客户端或者其他节点和DataNode通信,以及访问DataNode状态等功能,主要包括三个模块:

4.3.1HttpServer: 对外提供http服务

4.3.2ipcServer:RPC服务端,响应来自客户端,NameNode和其他DataNode的rpc请求

4.3.3DataXceiverServer:输出传输服务端,响应来自客户端以及其他Data Node的流式接口请求


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫言静好、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值