Hadoop-组件-HDFS-理论笔记-HDFS 架构设计-DataNode 架构-服务层设计-流式接口
一、概述数据节点最重要的功能就是管理物理存储上的数据块,数据节点通过存储 DataStorage 和文件系统数据集 FSDataset,将数据块的物理存储抽象为对象上的服务,流式接口就是构建在这个服务之上的、数据节点的另一个基本功能,HDFS 对读写操作提供了基于 TCP 流的数据访问接口 DataTransferProtocol。
二、架构设计DataTransferProtocol 是用来描述写入或者读出 Datanode 上数据的流式接口。DataTransferProtocol 有两个子类: Sender 和 Receiver。
Sender 类封装了 DataTransferProtocol 的调用操作,用于发起流式接口请求
Receiver 类封装了Data TransferProtocol 的执行操作,用于响应流式接口请求。
2.1. DataTransferProtocol 调用流程假设 DFSClient 发起了一个 DataTransferProtocol.readBlock() 操作,那么 DFSClient 会调用 Sender 类将这个请求序列化,并传 ...
Hadoop-组件-HDFS-理论笔记-HDFS 架构设计-DataNode 架构-逻辑层设计-BpOfferService
一、概述二、架构设计三、实现3.1. 字段3.2. 初始化
Hadoop-组件-HDFS-理论笔记-HDFS 架构设计-DataNode 架构-逻辑层设计-BPOfferServiceActor
一、概述二、架构设计三、实现3.1. 字段3.2. 初始化
Hadoop-组件-HDFS-理论笔记-HDFS 架构设计-DataNode 架构-逻辑层设计-BlockPoolManager
一、概述在 HDFS Federation 部署中,一个 HDFS 集群可以配置多个命名空间,每个 Datanode 都会存储多个块池的数据块。在 Datanode 实现中,定义了 BlockPoolManager 类来管理 Datanode 上的所有块池,Datanode 的其他模块对块池的操作都必须通过 BlockPoolManager 执行,每个 Datanode 都有一个 BlockPoolManager 的实例。
二、架构设计2.1. 逻辑结构图BlockPoolManager 逻辑结构图如图所示。
2.1.1. BPOfferService在 HDFS Federation 部署中,一个 Datanode 会保存多个块池的数据块,所以 BlockPoolManager 会拥有多个 BPOfferService 对象,每个 BPOfferService 对象都封装了对单个块池操作的 API。
2.1.2. BPOfferServiceActor在 HDFS HA 部署中,每个命名空间会同时拥有两个 Namenode,一个作为活动的 (Active) Namenode, ...
Hadoop-组件-HDFS-理论笔记-HDFS 架构设计-DataNode 架构-逻辑层设计-BlockScanner
一、概述每个 Datanode 都会初始化一个数据块扫描器周期性地验证 Datanode 上存储的所有数据块的正确性,并把发现的损坏数据块报告给 Namenode。 DataBlockScanner 类就是 Datanode 上数据块扫描器的实现。由于 Datanode 会保存多个块池的数据块,所以 DataBlockScanner 会持有多个 BlockPoolSliceScanner 对象,每个 BlockPoolSliceScanner 对象都负责验证一个指定块池下数据块的正确性。
二、架构设计三、实现3.1. 字段
Hadoop-组件-HDFS-理论笔记-HDFS 架构设计-DataNode 架构-逻辑层设计-DirectoryScanner
一、概述DirectoryScanner 的主要任务是定期扫描磁盘上的数据块,检查磁盘上的数据块信息是否与 FsDatasetImpl 中保存的数据块信息一致,如果不一致则对 FsDatasetImpl中的信息进行更新。
注意: DirectoryScanner 只会检查内存和磁盘上 FINALIZED 状态的数据块是否一致。
二、架构设计三、实现
Hadoop-组件-HDFS-理论笔记-HDFS 架构设计-DataNode 架构-逻辑层设计-磁盘目录检测扫描
一、概述用户使用 HDFS 的时候,会将每个 DataNode 数据目录所在的本地目录挂载到某块独立的盘上,如果某块盘突然发生了硬件故障导致写文件失败,这块盘将会被 HDFS 检测出来,并加入到坏盘列表,其上的数据也将被完全拷贝一份。DiskChecker 服务并不是一个周期性的定时任务,它只会在可能有坏盘出现的场景中被启动,然后执行。
二、架构设计三、实现