注重体验与质量的电子书资源下载网站
分类于: 编程语言 计算机基础 互联网 云计算&大数据
简介
Hadoop 2.X HDFS源码剖析 豆 8.9分
资源最后更新于 2020-06-15 22:11:30
作者:徐鹏
出版社:出版社电子工业出版社
出版日期:2016-03
ISBN:9787121281556
文件格式: pdf
标签: 互联网 编程语言 IT 大数据 源码分析 JAVA hadoop
简介· · · · · ·
《Hadoop 2.X HDFS源码剖析》以Hadoop 2.6.0源码为基础,深入剖析了HDFS 2.X中各个模块的实现细节,包括RPC框架实现、Namenode实现、Datanode实现以及HDFS客户端实现等。《Hadoop 2.X HDFS源码剖析》一共有5章,其中第1章从总体上介绍了HDFS的组件、概念以及典型的流程,同时详细介绍了HDFS各个组件间RPC接口的定义。第2章介绍了Hadoop RPC框架的实现,Hadoop RPC是HDFS各个组件间通信所依赖的底层框架,可以理解为HDFS的神经系统。第3~5章分别介绍了Namenode、Datanode以及HDFS客户端这三个组件的实现细节,同时穿插介绍了HDFS 2.X的新特性,例如Namenode HA、Federation Namenode等。阅读《Hadoop 2.X HDFS源码剖析》可以帮助读者从架构设计与源码实现角度了解HDFS 2.X,同时还能学习HDFS 2.X框架中优秀的设计思想、设计模式、Java语言技巧以及编程规范等。这些对于读者全面提高自己的技术水平有很大的帮助。徐鹏:2005-2012年在北京邮电大学完成本科以及硕士的学习,目前就职于今日头条担任基础架构研发工程师。长期关注大数据处理、分布式系统的研究以及Hadoop相关技术的应用与开发。
目录
前言
如何阅读本书
本书代码
致谢
第1章 HDFS
1.1 HDFS概述
1.1.1 HDFS体系结构
1.1.2 HDFS基本概念
1.数据块(Block)
2.名字节点(Namenode)
3.数据节点(Datanode)
4.客户端
5.HDFS通信协议
1.2 HDFS通信协议
1.2.1 Hadoop RPC接口
1.ClientProtocol
2.ClientDatanodeProtocol
3.DatanodeProtocol
4.InterDatanodeProtocol
5.NamenodeProtocol
1.2.2 流式接口
1.DataTransferProtocol
2.Active Namenode和Standby Namenode间的HTTP接口
1.3 HDFS主要流程
1.3.1 HDFS客户端读流程
1.3.2 HDFS客户端写流程
1.3.3 HDFS客户端追加写流程
1.3.4 Datanode启动、心跳以及执行名字节点指令流程
1.3.5 HA切换流程
第2章 Hadoop RPC
2.1 概述
2.1.1 RPC框架概述
2.1.2 Hadoop RPC框架概述
1.通信模块
2.客户端Stub程序
3.服务器端Stub程序
2.2 Hadoop RPC的使用
2.2.1 Hadoop RPC使用概述
2.2.2 定义RPC协议
1.ClientProtocol协议
2.ClientNamenodeProtocolPB协议
3.ClientNamenodeProtocolTranslatorPB类
4.ClientNamenodeProtocolServerSideTranslatorPB类
2.2.3 客户端获取Proxy对象
1.非HA模式
2.HA模式
2.2.4 服务器获取Server对象
1.构造NameNodeRpcServer
2.获取BlockingService对象
3.构造Server对象
2.3 Hadoop RPC实现
2.3.1 RPC类实现
2.3.2 Client类实现
1.Client发送请求与接收响应流程
2.内部类——Call
3.内部类——Connection
2.3.3 Server类实现
1.Reactor模式
2.Server类设计
3.Server类实现
第3章 Namenode(名字节点)
3.1 文件系统目录树
3.1.1 INode相关类
1.INode抽象类
2.INodeWithAdditionalFields类
3.INodeDirectory类
4.INodeFile类
5.INodeReference
3.1.2 Feature相关类
1.SnapshotFeature实现
2.FileUnderConstructionFeature实现
3.1.3 FSEditLog类
1.transactionId机制
2.FSEditLog状态机
3.EditLogOutputStream
4.EditLogInputStream
5.FSEditLog.log()方法
3.1.4 FSImage类
1.保存命名空间
2.FSImage.loadFSImage()
3.加载fsimage文件
4.加载editlog文件
5.检查点机制
3.1.5 FSDirectory类
1.addChild()
2.addBlock()
3.setOwner()
3.2 数据块管理
3.2.1 Block、Replica、BlocksMap
1.Block类
2.BlockInfo类
3.BlockInfoUnderConstruction类
4.BlocksMap类
5.Replica类状态
6.Block类状态
3.2.2 数据块副本状态
1.BlockManager数据结构
2.数据块副本状态(done)
3.2.3 BlockManager类(done)
1.ReplicationMonitor
2.增、删、改、查数据块
3.块汇报
3.3 数据节点管理
3.3.1 DatanodeDescriptor
1.DatanodeId
2.DatanodeInfo
3.DatanodeDescriptor
3.3.2 DatanodeStorageInfo
3.3.3 DatanodeManager
1.DatanodeManager字段
2.添加和撤销Datanode
3.Datanode的启动
4.Datanode的心跳
3.4 租约管理
3.4.1 LeaseManager.Lease
3.4.2 LeaseManager
1.添加租约——addLease()
2.检查租约——FsNamesystem.checkLease()
3.租约更新——renewLease()
4.删除租约——removeLease()
5.租约检查——Monitor线程
6.租约恢复——Monitor线程发起
7.租约恢复——其他方式发起
3.5 缓存管理
3.5.1 缓存概念
3.5.2 缓存管理命令
3.5.3 HDFS集中式缓存架构
3.5.4 CacheManager类实现
3.5.5 CacheReplicationMonitor
3.6 ClientProtocol实现
3.6.1 创建文件
3.6.2 追加写文件
3.6.3 创建新的数据块
1.分析状态——analyzeFileState()
2.分配数据节点——chooseTarget4NewBlock()
3.提交上一个数据块——commitOrCompleteLastBlock()
4.添加一个新的数据块
3.6.4 放弃数据块
3.6.5 关闭文件
3.7 Namenode的启动和停止
3.7.1 安全模式
1.SafeModeInfo
2.开启复制和删除数据块功能
3.安全模式管理
3.7.2 HDFS High Availability
1.HA架构
2.HA配置
3.管理命令
4.源码实现
3.7.3 名字节点的启动
3.7.4 名字节点的停止
第4章 Datanode(数据节点)
4.1 Datanode逻辑结构
4.1.1 HDFS 1.X架构
4.1.2 HDFS Federation
4.1.3 Datanode逻辑结构
4.2 Datanode存储
4.2.1 Datanode升级机制
1.升级操作
2.回滚操作
3.升级提交操作
4.临时状态
4.2.2 Datanode磁盘存储结构
4.2.3 DataStorage实现
1.Storage类继承关系
2.StorageInfo
3.Storage.StorageState
4.Storage.StorageDirectory
5.Storage
6.DataStorage
7.BlockPoolSliceStorage
4.3 文件系统数据集
4.3.1 Datanode上数据块副本的状态
4.3.2 BlockPoolSlice实现
1.BlockPoolSlice的字段
2.BlockPoolSlice的方法
4.3.3 FsVolumeImpl实现
1.FsVolumeSpi接口定义
2.FsVolumeImpl的字段和方法
4.3.4 FsVolumeList实现
4.3.5 FsDatasetImpl实现
1.ReplicaMap
2.ReplicaInfo
3.FsDatasetSpi
4.FsDatasetImpl
4.4 BlockPoolManager
4.4.1 BPServiceActor实现
1.BPServiceActor的字段
2.构造方法与工作线程控制方法
3.工作线程run()方法
4.4.2 BPOfferService实现
1.BPOfferService的字段(done)
2.BPOfferService的方法
4.4.3 BlockPoolManager实现
1.BlockPoolManager的字段(done)
2.refreshNamenodes()方法(done)
4.5 流式接口
4.5.1 DataTransferProtocol定义
4.5.2 Sender和Receiver
1.DataTransferProtocol调用流程
2.Sender类
3.Receiver类
4.5.3 DataXceiverServer
1.DataXceiverServer的初始化
2.run()方法
4.5.4 DataXceiver
1.run()方法
2.DataTransferProtocol的实现
4.5.5 读数据
1.DataXceiver.readBlock()
2.数据块的传输格式
3.BlockSender实现
4.零拷贝数据传输
5.节流器
4.5.6 写数据(done)
1.DataXceiver.writeBlock()(done)
2.BlockReceiver(done)
3.BlockReceiver.PacketResponder
4.处理结果上报名字节点
4.5.7 数据块替换、数据块拷贝和读数据块校验
4.5.8 短路读操作
4.6 数据块扫描器
4.6.1 DataBlockScanner实现
4.6.2 BlockPoolSliceScanner实现
4.7 DirectoryScanner
4.8 DataNode类的实现
4.8.1 DataNode的启动
4.8.2 DataNode的关闭
第5章 HDFS客户端
5.1 DFSClient实现
5.1.1 构造方法
5.1.2 关闭方法
5.1.3 文件系统管理与配置方法
5.1.4 HDFS文件与目录操作方法
5.1.5 HDFS文件读写方法
5.2 文件读操作与输入流
5.2.1 打开文件
1.DistributedFileSystem.open()
2.HDFS客户端输入流
3.DFSClient.open()
5.2.2 读操作——DFSInputStream实现
1.InputStream.read()
2.BlockReader
3.HasEnhancedByteBufferAccess.read()
4.关闭输入流
5.3 文件短路读操作
1.FS-2246
2.HDFS-347
5.3.1 短路读共享内存
5.3.2 DataTransferProtocol
1.requestShortCircuitShm()
2.requestShortCircuitFds()
3.releaseShortCircuitFds()
5.3.3 DFSClient短路读操作流程
1.ShortCircuitShm类
2.DfsClientShm类
3.DfsClientShmManager类
4.ShortCircuitReplica类
5.ShortCircuitCache类
5.3.4 Datanode短路读操作流程
1.RegisteredShm类
2.ShortCircuitRegistry类
5.4 文件写操作与输出流
5.4.1 创建文件
1.DistributedFileSystem.create()
2.DFSClient.create()
5.4.2 写操作——DFSOutputStream实现
1.write()方法
2.DataStreamer线程
3.ResponseProcessor线程
5.4.3 追加写操作
5.4.4 租约相关
5.4.5 关闭输出流
5.5 HDFS常用工具
5.5.1 FsShell实现
5.5.2 DFSAdmin实现
参考文献