HDFS DataNode结构概述

一、DataNode的作用

1.Datanode以存储数据块(Block)的形式保存HDFS文件。
2.Datanode周期性地向Namenode上报心跳信息、 数据块汇报信息(BlockReport)、缓存数据块汇报信息(CacheReport)以及增量数据块块汇报信息。 Namenode会根据块汇报的内容, 修改Namenode的命名空间(Namespace),同时向Datanode返回名字节点指令。 Datanode会响应Namenode返回的名字节点指令,如创建、 删除和复制数据块指令等。
3.Datanode还会响应HDFS客户端读、 写数据块的请求。

二、Datanode的逻辑结构

在这里插入图片描述
引入概念:
块池(BlockPool):一个块池由属于同一个命名空间的所有数据块组成。数据块可以存储在集群中的所有datanode上,而每个datanode都可以存储集群中所有块池的数据块。

2.1 数据层

Datanode的所有服务都是建立在数据块存储功能基础上的, 我们将Datanode中负责在本地磁盘存储数据块的部分抽象为数据层。

Datanode将管理磁盘上存储的HDFS数据块的功能分为两部分:

  • 管理和组织磁盘存储目录,由DataStorage类实现
  • 管理和组织数据块及其元数据文件,主要由FsDatasetImpl类实现

DataStorage类——数据存储:负责管理与组织Datanode的磁盘存储空间, 同时也负责管理存储空间的生命周期(包括升级、回滚、提交等操作)。 在HDFSFederation架构中,一个Datanode可以保存多个块池的数据块, HDFS定义了BlockPoolSliceStorage类管理Datanode上单个块池的存储空间。DataStorage类会持有所有BlockPoolSliceStorage对象的引用,并通过这些引用管理Datanode上的所有块池。

FsDataset类——文件系统数据集:抽象了Datanode管理数据块的所有操作, 例如创建数据块文件、维护数据块文件和校验和文件的对应关系等。 每个Datanode都可以配置若干个不同类型的存储目录来保存数据块(通过配置项dfs.datanode.data.dir配置),所以HDFS定义了FSVolumelmpl类来管理Datanode上单个存储目录保存的所有数据块, 同时定义了FSVolumeList类来维护Datanode上所有FSVolumelmpl对象的引用。 FsDataset会通过FSVolumeList类提供的功能管理Datanode上所有存储目录保存的数据块。

在这里插入图片描述

2.2 逻辑层

在数据层的基础上,Datanode会执行若干HDFS逻辑,例如向Namenode汇报数据块存储状态、发送心跳、扫描损坏的数据块等,我们将Datanode上负责执行HDFS逻辑的部分抽象为逻辑层。逻辑层包括三个主要的模块。

BlockPoolManager:管理所有块池的接口类。HDFS提供了Federation机制,也就是每个HDFS集群都可以配置多个命名空间,每个命名空间在Datanode上都有一个与之对应的块池。一个BlockPoolManager对象会持有多个BPOfferService对象的实例,每个BPOfferService对象都管理这个Datanode的一个块池。HDFS除了引入Federation机制外,还引入了HA机制,每个命名空间都可以定义两个Namenode,一个作为Active Namenode,一个作为Standby Namenode。 所以每个BPOfferService对象又都会持有两个BPServiceActor对象,一个BPServiceActor对象对应于命名空间中的一个Namenode,该对象负责向这个Namenode发送心跳、块汇报、缓存汇报以及增量块汇报,并执行Namenode返回的名字节点指令(DatanodeCommand)。

DataBlockScanner:一个独立的线程,周期性地扫描每个数据块并检查数据块的校验和是否正常

DirectoryScanner:一个独立的线程,定时发起对磁盘数据块的扫描, 对比内存中元数据与实际磁盘存储数据块的差异, 然后更新内存中的元数据,使之与磁盘保存的数据块信息一致。

2.3 服务层

服务层:服务层中的模块用于支持其他节点与Datanode通信,以及访问Datanode状态等功能。

HttpServer:对外提供HTTP服务,可用于展示Datanode内部状态。
IPCServer:RPC服务端,响应来自于Client、Namenode以及其他Datanode的RPC请求。
DataXceiverServer:数据传输服务端,响应来自于Client以及其他Datanode的流式接口请求。

to be continue

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值