HDFS学习笔记【Datanode/结构和存储】

HDFS2.x DataNode学习笔记

DataNode作用

  • 块存储
  • 客户端读写
  • 向NN上报心跳信息,数据块汇报信息,缓存数据信息,增量数据块信息
  • 响应NN指令,比如创建,删除,复制等(NN收集信息,通过心跳向DN返回指令)

DataNode概念

  • 块池(BlockPool)
    同一个命名空间的所有数据块
  • 命名空间卷(NamespaceVolume)
    一个NN管理的块池和Namespace一起被称为命名空间卷。它是升级的独立单位。

目的可能是为了分离Namespace的功能,和块管理的功能。通过管理块池进行块管理。

DataNode逻辑结构

根据功能划分结构
块存储和块操作有两个模块

DataStorage

  • 数据存储
    通过StoreageDirectory对象,来管理多个存储目录。
    通过持有所有BlockPoolSliceStorage引用,来管理多个池块数据。
  • 存储空间的生命周期
    升级,回滚,提交等操作

一个Datanode可以有多个池

FsDataset

文件系统数据集

  • 管理数据块
    创建数据块,维护数据块和校验和文件的对应关系
  • FSVolumeImpl
    管理单个存储目录的所有数据块,FSVolumeList维护所有FSVolumeImpl的引用。

心跳功能,收集信息功能,执行NN命令功能

DataBlockScanner

独立线程,周期扫描没有数据块检查数据块校验和

DirectoryScanner

独立线程,定时磁盘数据块扫描,对比元数据和实际存储,更新内存中元数据

BlockPoolManager

  • 管理多个池块的接口类
    通过持有多个BPOfferService对象,管理多个池块接口
  • 管理不同池块的心跳,块汇报,缓存汇报,对象块汇报
    BPOffserService中包含多个BPServiceActor对象,对应多个NameNode,BPServiceActor来汇报和执行命令。

HttpServer

提供HTTP服务,展示DataNode内部状态

IPCServer

提供RPC服务,响应Client,Namenode以及其他Datanode的RPC请求

DataXceiverServer

数据传输服务端,响应Client以及其他DataNode的流式接口请求。

在这里插入图片描述

DataNode存储

DataNode磁盘存储结构

DataNode需要保存自身的元数据,这些元数据是通过DN磁盘存储的一些文件和目录保存的。

  • datanode可以配置多个目录
    这些目录可以是异构的,增加吞吐
  • 版本
    每个目录结构下,紧跟的是版本目录,用来回退升级等
  • 池块(blockpool)
    一个datanode目录下包含多个池块目录
  • 池块版本
    为了支持单个NS单独升级,每一个池块里也要包含版本目录(current,previous等),进行升级解耦

实际的目录结构如下:
在这里插入图片描述
磁盘存储文件说明:

  • BP-随机池块ID-NN地址-时间
  • VERSION
    包含:
    layout文件
    clusterId,ctime.
    storageType: 存储类型
    blockpoolId: 和目录池块ID一致
  • finialized/rbw
    存储数据块和校验和
  • lazyPersist
    临时将内存的数据持久化到磁盘
  • dncp_block_verification.log
    最近一次确认数据块内容和校验值匹配的时间,
  • in_use.lock
    Datanode线程持有的锁文件,防止多个Datanode线程修改这个目录。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值