作品简介

《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实现
  • 参考文献
展开全部