logo
分类于: 编程语言 计算机基础 互联网 云计算&大数据

简介

Hadoop 2.X HDFS源码剖析

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相关技术的应用与开发。

想要: 点击会收藏到你的 我的收藏,可以在这里查看

已收: 表示已经收藏

Tips: 注册一个用户 可以通过用户中心得到电子书更新的通知哦

目录

  1. 前言
  2. 如何阅读本书
  3. 本书代码
  4. 致谢
  5. 第1章 HDFS
  6. 1.1 HDFS概述
  7. 1.1.1 HDFS体系结构
  8. 1.1.2 HDFS基本概念
  9. 1.数据块(Block)
  10. 2.名字节点(Namenode)
  11. 3.数据节点(Datanode)
  12. 4.客户端
  13. 5.HDFS通信协议
  14. 1.2 HDFS通信协议
  15. 1.2.1 Hadoop RPC接口
  16. 1.ClientProtocol
  17. 2.ClientDatanodeProtocol
  18. 3.DatanodeProtocol
  19. 4.InterDatanodeProtocol
  20. 5.NamenodeProtocol
  21. 1.2.2 流式接口
  22. 1.DataTransferProtocol
  23. 2.Active Namenode和Standby Namenode间的HTTP接口
  24. 1.3 HDFS主要流程
  25. 1.3.1 HDFS客户端读流程
  26. 1.3.2 HDFS客户端写流程
  27. 1.3.3 HDFS客户端追加写流程
  28. 1.3.4 Datanode启动、心跳以及执行名字节点指令流程
  29. 1.3.5 HA切换流程
  30. 第2章 Hadoop RPC
  31. 2.1 概述
  32. 2.1.1 RPC框架概述
  33. 2.1.2 Hadoop RPC框架概述
  34. 1.通信模块
  35. 2.客户端Stub程序
  36. 3.服务器端Stub程序
  37. 2.2 Hadoop RPC的使用
  38. 2.2.1 Hadoop RPC使用概述
  39. 2.2.2 定义RPC协议
  40. 1.ClientProtocol协议
  41. 2.ClientNamenodeProtocolPB协议
  42. 3.ClientNamenodeProtocolTranslatorPB类
  43. 4.ClientNamenodeProtocolServerSideTranslatorPB类
  44. 2.2.3 客户端获取Proxy对象
  45. 1.非HA模式
  46. 2.HA模式
  47. 2.2.4 服务器获取Server对象
  48. 1.构造NameNodeRpcServer
  49. 2.获取BlockingService对象
  50. 3.构造Server对象
  51. 2.3 Hadoop RPC实现
  52. 2.3.1 RPC类实现
  53. 2.3.2 Client类实现
  54. 1.Client发送请求与接收响应流程
  55. 2.内部类——Call
  56. 3.内部类——Connection
  57. 2.3.3 Server类实现
  58. 1.Reactor模式
  59. 2.Server类设计
  60. 3.Server类实现
  61. 第3章 Namenode(名字节点)
  62. 3.1 文件系统目录树
  63. 3.1.1 INode相关类
  64. 1.INode抽象类
  65. 2.INodeWithAdditionalFields类
  66. 3.INodeDirectory类
  67. 4.INodeFile类
  68. 5.INodeReference
  69. 3.1.2 Feature相关类
  70. 1.SnapshotFeature实现
  71. 2.FileUnderConstructionFeature实现
  72. 3.1.3 FSEditLog类
  73. 1.transactionId机制
  74. 2.FSEditLog状态机
  75. 3.EditLogOutputStream
  76. 4.EditLogInputStream
  77. 5.FSEditLog.log()方法
  78. 3.1.4 FSImage类
  79. 1.保存命名空间
  80. 2.FSImage.loadFSImage()
  81. 3.加载fsimage文件
  82. 4.加载editlog文件
  83. 5.检查点机制
  84. 3.1.5 FSDirectory类
  85. 1.addChild()
  86. 2.addBlock()
  87. 3.setOwner()
  88. 3.2 数据块管理
  89. 3.2.1 Block、Replica、BlocksMap
  90. 1.Block类
  91. 2.BlockInfo类
  92. 3.BlockInfoUnderConstruction类
  93. 4.BlocksMap类
  94. 5.Replica类状态
  95. 6.Block类状态
  96. 3.2.2 数据块副本状态
  97. 1.BlockManager数据结构
  98. 2.数据块副本状态(done)
  99. 3.2.3 BlockManager类(done)
  100. 1.ReplicationMonitor
  101. 2.增、删、改、查数据块
  102. 3.块汇报
  103. 3.3 数据节点管理
  104. 3.3.1 DatanodeDescriptor
  105. 1.DatanodeId
  106. 2.DatanodeInfo
  107. 3.DatanodeDescriptor
  108. 3.3.2 DatanodeStorageInfo
  109. 3.3.3 DatanodeManager
  110. 1.DatanodeManager字段
  111. 2.添加和撤销Datanode
  112. 3.Datanode的启动
  113. 4.Datanode的心跳
  114. 3.4 租约管理
  115. 3.4.1 LeaseManager.Lease
  116. 3.4.2 LeaseManager
  117. 1.添加租约——addLease()
  118. 2.检查租约——FsNamesystem.checkLease()
  119. 3.租约更新——renewLease()
  120. 4.删除租约——removeLease()
  121. 5.租约检查——Monitor线程
  122. 6.租约恢复——Monitor线程发起
  123. 7.租约恢复——其他方式发起
  124. 3.5 缓存管理
  125. 3.5.1 缓存概念
  126. 3.5.2 缓存管理命令
  127. 3.5.3 HDFS集中式缓存架构
  128. 3.5.4 CacheManager类实现
  129. 3.5.5 CacheReplicationMonitor
  130. 3.6 ClientProtocol实现
  131. 3.6.1 创建文件
  132. 3.6.2 追加写文件
  133. 3.6.3 创建新的数据块
  134. 1.分析状态——analyzeFileState()
  135. 2.分配数据节点——chooseTarget4NewBlock()
  136. 3.提交上一个数据块——commitOrCompleteLastBlock()
  137. 4.添加一个新的数据块
  138. 3.6.4 放弃数据块
  139. 3.6.5 关闭文件
  140. 3.7 Namenode的启动和停止
  141. 3.7.1 安全模式
  142. 1.SafeModeInfo
  143. 2.开启复制和删除数据块功能
  144. 3.安全模式管理
  145. 3.7.2 HDFS High Availability
  146. 1.HA架构
  147. 2.HA配置
  148. 3.管理命令
  149. 4.源码实现
  150. 3.7.3 名字节点的启动
  151. 3.7.4 名字节点的停止
  152. 第4章 Datanode(数据节点)
  153. 4.1 Datanode逻辑结构
  154. 4.1.1 HDFS 1.X架构
  155. 4.1.2 HDFS Federation
  156. 4.1.3 Datanode逻辑结构
  157. 4.2 Datanode存储
  158. 4.2.1 Datanode升级机制
  159. 1.升级操作
  160. 2.回滚操作
  161. 3.升级提交操作
  162. 4.临时状态
  163. 4.2.2 Datanode磁盘存储结构
  164. 4.2.3 DataStorage实现
  165. 1.Storage类继承关系
  166. 2.StorageInfo
  167. 3.Storage.StorageState
  168. 4.Storage.StorageDirectory
  169. 5.Storage
  170. 6.DataStorage
  171. 7.BlockPoolSliceStorage
  172. 4.3 文件系统数据集
  173. 4.3.1 Datanode上数据块副本的状态
  174. 4.3.2 BlockPoolSlice实现
  175. 1.BlockPoolSlice的字段
  176. 2.BlockPoolSlice的方法
  177. 4.3.3 FsVolumeImpl实现
  178. 1.FsVolumeSpi接口定义
  179. 2.FsVolumeImpl的字段和方法
  180. 4.3.4 FsVolumeList实现
  181. 4.3.5 FsDatasetImpl实现
  182. 1.ReplicaMap
  183. 2.ReplicaInfo
  184. 3.FsDatasetSpi
  185. 4.FsDatasetImpl
  186. 4.4 BlockPoolManager
  187. 4.4.1 BPServiceActor实现
  188. 1.BPServiceActor的字段
  189. 2.构造方法与工作线程控制方法
  190. 3.工作线程run()方法
  191. 4.4.2 BPOfferService实现
  192. 1.BPOfferService的字段(done)
  193. 2.BPOfferService的方法
  194. 4.4.3 BlockPoolManager实现
  195. 1.BlockPoolManager的字段(done)
  196. 2.refreshNamenodes()方法(done)
  197. 4.5 流式接口
  198. 4.5.1 DataTransferProtocol定义
  199. 4.5.2 Sender和Receiver
  200. 1.DataTransferProtocol调用流程
  201. 2.Sender类
  202. 3.Receiver类
  203. 4.5.3 DataXceiverServer
  204. 1.DataXceiverServer的初始化
  205. 2.run()方法
  206. 4.5.4 DataXceiver
  207. 1.run()方法
  208. 2.DataTransferProtocol的实现
  209. 4.5.5 读数据
  210. 1.DataXceiver.readBlock()
  211. 2.数据块的传输格式
  212. 3.BlockSender实现
  213. 4.零拷贝数据传输
  214. 5.节流器
  215. 4.5.6 写数据(done)
  216. 1.DataXceiver.writeBlock()(done)
  217. 2.BlockReceiver(done)
  218. 3.BlockReceiver.PacketResponder
  219. 4.处理结果上报名字节点
  220. 4.5.7 数据块替换、数据块拷贝和读数据块校验
  221. 4.5.8 短路读操作
  222. 4.6 数据块扫描器
  223. 4.6.1 DataBlockScanner实现
  224. 4.6.2 BlockPoolSliceScanner实现
  225. 4.7 DirectoryScanner
  226. 4.8 DataNode类的实现
  227. 4.8.1 DataNode的启动
  228. 4.8.2 DataNode的关闭
  229. 第5章 HDFS客户端
  230. 5.1 DFSClient实现
  231. 5.1.1 构造方法
  232. 5.1.2 关闭方法
  233. 5.1.3 文件系统管理与配置方法
  234. 5.1.4 HDFS文件与目录操作方法
  235. 5.1.5 HDFS文件读写方法
  236. 5.2 文件读操作与输入流
  237. 5.2.1 打开文件
  238. 1.DistributedFileSystem.open()
  239. 2.HDFS客户端输入流
  240. 3.DFSClient.open()
  241. 5.2.2 读操作——DFSInputStream实现
  242. 1.InputStream.read()
  243. 2.BlockReader
  244. 3.HasEnhancedByteBufferAccess.read()
  245. 4.关闭输入流
  246. 5.3 文件短路读操作
  247. 1.FS-2246
  248. 2.HDFS-347
  249. 5.3.1 短路读共享内存
  250. 5.3.2 DataTransferProtocol
  251. 1.requestShortCircuitShm()
  252. 2.requestShortCircuitFds()
  253. 3.releaseShortCircuitFds()
  254. 5.3.3 DFSClient短路读操作流程
  255. 1.ShortCircuitShm类
  256. 2.DfsClientShm类
  257. 3.DfsClientShmManager类
  258. 4.ShortCircuitReplica类
  259. 5.ShortCircuitCache类
  260. 5.3.4 Datanode短路读操作流程
  261. 1.RegisteredShm类
  262. 2.ShortCircuitRegistry类
  263. 5.4 文件写操作与输出流
  264. 5.4.1 创建文件
  265. 1.DistributedFileSystem.create()
  266. 2.DFSClient.create()
  267. 5.4.2 写操作——DFSOutputStream实现
  268. 1.write()方法
  269. 2.DataStreamer线程
  270. 3.ResponseProcessor线程
  271. 5.4.3 追加写操作
  272. 5.4.4 租约相关
  273. 5.4.5 关闭输出流
  274. 5.5 HDFS常用工具
  275. 5.5.1 FsShell实现
  276. 5.5.2 DFSAdmin实现
  277. 参考文献