Hadoop-组件-HDFS-源码学习-集群启动-NameNode 启动-loadNamesystem
正在总结中,等我😭~~~
Hadoop-组件-HDFS-源码学习-集群启动-NameNode 启动设计
一、概述NameNode 是 Hadoop 分布式文件系统的核心,架构中的主角色。它维护和管理文件系统元数据,包括名称空间目录树结构、文件和块的位置信息、访问权限等信息。基于此,NameNode 成为了访问 HDFS 的唯一入口。
我们详细看看 HDFS NameNode 启动流程~~~
二、源码通过这个 start-dfs.sh 启动脚本,找到了 hdfs
最终将 Namenode 启动类定位在 org.apache.hadoop.hdfs.server.namenode.NameNode
来到 org.apache.hadoop.hdfs.server.namenode.NameNode 的 main() 方法中,开始调试~~~
2.1. 前置操作2.1.1. 参数校验1234if (DFSUtil.parseHelpArgument(argv, NameNode.USAGE, System.out, true)) { System.out.println("####参数校验#####"); System.exit(0);} ...
Hadoop-组件-HDFS-源码学习-数据读写-写文件-上传-写数据
一、概述二、实现
2.1. 写数据当用户代码通过 DistributedFileSystem.create() 方法创建了一个新文件,并获取了 DFSOutputStream 输出流对象之后,就可以在输出流对象上调用 write() 方法写数据了。
DFSOutputStream.write() 方法继承自 FSOutputSummer.write() 方法,用于向数据流管道中写入指定大小的数据以及校验和,是客户端写数据操作的入口。write()方法会循环调用 write1() 方法每次发送一个校验块数据,直到所有数据发送完毕。
write1() 方法每次写入一个校验块数据,如果数据长度不足一个校验块,则写入 buffer 缓冲区。
这个方法首先将数据写入 buffer 缓冲区,当 buffer 中的数据达到一个校验块(chunk) 的大小时,则调用 flushBuffer() 方法将缓存中的校验快写入底层 I/O 流。如果 buffer 为空,并且写入的数据大于一个校验块的大小时,则调用 writeChecksumChunk() 直接将校验块大小的数据写入 I/O 流,不经过 b ...
Hadoop-组件-HDFS-源码学习-数据读写-写文件-上传-创建文件
客户端在执行文件写操作前,首先需要调用 DistributedFileSystem.create() 创建一个空的 HDFS 文件,并且获取这个 HDFS 文件的输出流 HdfsDataOutputStream 对象。获取输出流对象后,客户端就可以在输出流 HdfsDataOutputStream 对象上调用 write() 方法执行写操作了。
一、概述二、实现客户端在执行文件写操作前,首先需要调用 DistributedFileSystem.create() 创建一个空的HDFS 文件,并且获取这个 HDFS 文件的输出流 HdfsDataOutputStream 对象。成功获取到输出流对象后,客户端就可以在输出流 HdfsDataOutputStream 对象上调用 write() 方法执行写操作了。
2.1. Namenode 文件目录树更新-创建文件Namenode 作 为 HDFS 的大脑实现 了 ClientProtocol 、 DatanodeProtocol 以及 NamenodeProtocol 等远程接口,ClientProtocol 实现了与读写相关的方法在 ...
Hadoop-组件-HDFS-源码学习-数据读写-写文件-追加写-写数据
一、概述二、实现DistributedFileSystem.append() 方法调用了 DFSClient.calAppend() 方法获取输出流对象。
callAppend() 方法首先通过 ClientProtocol.append() 方法获取文件最后一个数据块的位置信息,如果文件的最后一个数据块已经写满则返回 null。然后 callAppend() 方法会调用 DFSOutputStream.newStreamForAppend() 方法创建到文件最后一个数据块的输出流对象。获取文件租约,并将新构建的 DFSOutputStream 包装为 HdfsDataOutputStream 对象,然后返回。
Hadoop-组件-HDFS-理论笔记-HDFS 架构设计-DataNode 架构-数据层-数据块以及元数据管理
一、概述二、理论笔记三、实现3.1. 相关类3.1.1. FsDatasetSpiFsDatasetSpi 是 FsDatasetImpl 的根接口,定义了 Datanode 管理数据块的接口方法。
3.1.2. FsDatasetImplFsDatasetImpl 管理组织数据块和元数据文件
BlockPoolSlice 负责管理单个存储目录下单个块池的所有数据块,而 FsDatasetImpl 则负责管理一个完整的存储目录下所有的数据块,包括了这个存储目录下多个 BlockPoolSlice 对象的引用。Datanode 可以定义多个存储目录,也就是定义多个 FsDatasetImpl 对象,在 HDFS 中使用 FsVolumeList 对象统一管理 Datanode 上定义的多个 FsVolumeImpl 对象。
属性
Hadoop-组件-HDFS-理论笔记-HDFS 架构设计-DataNode 架构-数据层设计
一、概述DataNode 最重要的功能就是管理磁盘上存储的数据块
二、架构设计2.1. 内存HDFS支持由 DataNode 管理的写入到堆栈内存的功能。DataNode 会异步的将数据从内存持久化至磁盘,从而在性能敏感的 IO Path 中移去品贵的磁盘 I/O 和校验,因此我们称之为Lazy Persist。
HDFS 尽可能的保证在 LazyPersist策略下的持久性。在副本还未持久化至磁盘,节点重启了,则有可能会发生罕见的数据遗失。我们可以选择 Lazy Persist Writes 的策略来减少延迟,但可能会损失一定的持久性。
https://www.imooc.com/article/270157
https://betheme.net/news/txtlist_i27933v.html?action=onClick
2.2. 磁盘Datanode 最重要的功能就是管理磁盘上存储的 HDFS 数据块。Datanode 将这个管理功能切分为两个部分
管理与组织磁盘存储目录(由 dfs.data.dir 指定),如 current、 previous、detach、 ...