《深度剖析Hadoop HDFS》基于Hadoop 2.7.1版本进行分析,全面描述了HDFS 2.X的核心技术与解决方案,书中描述了HDFS内存存储、异构存储等几大核心设计,包括源码细节层面的分析,对于HDFS中比较特殊的几个场景过程也做了细粒度的分析。还分享了作者在实际应用中的解决方案及扩展思路。阅读《深度剖析Hadoop HDFS》可以帮助读者从架构设计与功能实现角度了解HDFS 2.X,同时还能学习HDFS 2.X框架中优秀的设计思想、设计模式、Java语言技巧等。这些对于读者全面提高自己分布式技术水平有很大的帮助。
《深度剖析Hadoop HDFS》分为三大部分:核心设计篇、细节实现篇、解决方案篇,“核心设计篇”包括HDFS的数据存储原理、HDFS的数据管理与策略选择机制、HDFS的新颖功能特性;“细节实现篇”包括HDFS的块处理、流量处理等细节,以及部分结构分析;“解决方案篇”包括HDFS的数据管理、HDFS的数据读写、HDFS的异常场景等。
目录
- 前言
- 第一部分 核心设计篇
- 第1章 HDFS的数据存储2
- 1.1 HDFS内存存储2
- 1.1.1 HDFS内存存储原理2
- 1.1.2 Linux 虚拟内存盘4
- 1.1.3 HDFS的内存存储流程分析4
- 1.1.4 LAZY_PERSIST内存存储的使用14
- 1.2 HDFS异构存储15
- 1.2.1 异构存储类型16
- 1.2.2 异构存储原理17
- 1.2.3 块存储类型选择策略22
- 1.2.4 块存储策略集合24
- 1.2.5 块存储策略的调用27
- 1.2.6 HDFS异构存储策略的不足之处28
- 1.2.7 HDFS存储策略的使用30
- 1.3 小结31
- 第2章 HDFS的数据管理与策略选择32
- 2.1 HDFS缓存与缓存块32
- 2.1.1 HDFS物理层面缓存块33
- 2.1.2 缓存块的生命周期状态34
- 2.1.3 CacheBlock、UnCacheBlock场景触发36
- 2.1.4 CacheBlock、UnCacheBlock缓存块的确定38
- 2.1.5 系统持有的缓存块列表如何更新39
- 2.1.6 缓存块的使用40
- 2.1.7 HDFS缓存相关配置40
- 2.2 HDFS中心缓存管理42
- 2.2.1 HDFS缓存适用场景43
- 2.2.2 HDFS缓存的结构设计43
- 2.2.3 HDFS缓存管理机制分析45
- 2.2.4 HDFS中心缓存疑问点55
- 2.2.5 HDFS CacheAdmin命令使用56
- 2.3 HDFS快照管理58
- 2.3.1 快照概念59
- 2.3.2 HDFS中的快照相关命令59
- 2.3.3 HDFS内部的快照管理机制60
- 2.3.4 HDFS的快照使用71
- 2.4 HDFS副本放置策略72
- 2.4.1 副本放置策略概念与方法72
- 2.4.2 副本放置策略的有效前提73
- 2.4.3 默认副本放置策略的分析73
- 2.4.4 目标存储好坏的判断82
- 2.4.5 chooseTargets的调用83
- 2.4.6 BlockPlacementPolicyWithNodeGroup继承类84
- 2.4.7 副本放置策略的结果验证85
- 2.5 HDFS内部的认证机制85
- 2.5.1 BlockToken认证85
- 2.5.2 HDFS的Sasl认证91
- 2.5.3 BlockToken认证与HDFS的Sasl认证对比97
- 2.6 HDFS内部的磁盘目录服务98
- 2.6.1 HDFS的三大磁盘目录检测扫描服务98
- 2.6.2 DiskChecker:坏盘检测服务99
- 2.6.3 DirectoryScanner:目录扫描服务104
- 2.6.4 VolumeScanner:磁盘目录扫描服务110
- 2.7 小结116
- 第3章 HDFS的新颖功能特性117
- 3.1 HDFS视图文件系统:ViewFileSystem117
- 3.1.1 ViewFileSystem: 视图文件系统118
- 3.1.2 ViewFileSystem内部实现原理119
- 3.1.3 ViewFileSystem的使用125
- 3.2 HDFS的Web文件系统:WebHdfsFileSystem126
- 3.2.1 WebHdfsFileSystem的REST API操作127
- 3.2.2 WebHdfsFileSystem的流程调用129
- 3.2.3 WebHdfsFileSystem执行器调用130
- 3.2.4 WebHDFS的OAuth2认证133
- 3.2.5 WebHDFS的使用135
- 3.3 HDFS数据加密空间:Encryption zone136
- 3.3.1 Encryption zone原理介绍136
- 3.3.2 Encryption zone源码实现136
- 3.3.3 Encryption zone的使用144
- 3.4 HDFS纠删码技术145
- 3.4.1 纠删码概念145
- 3.4.2 纠删码技术的优劣势146
- 3.4.3 Hadoop纠删码概述147
- 3.4.4 纠删码技术在Hadoop中的实现148
- 3.5 HDFS对象存储:Ozone152
- 3.5.1 Ozone介绍153
- 3.5.2 Ozone的高层级设计154
- 3.5.3 Ozone的实现细节157
- 3.5.4 Ozone的使用157
- 3.6 小结158
- 第二部分 细节实现篇
- 第4章 HDFS的块处理160
- 4.1 HDFS块检查命令fsck160
- 4.1.1 fsck参数使用160
- 4.1.2 fsck过程调用161
- 4.1.3 fsck原理分析162
- 4.1.4 fsck使用场景171
- 4.2 HDFS如何检测并删除多余副本块171
- 4.2.1 多余副本块以及发生的场景172
- 4.2.2 OverReplication多余副本块处理172
- 4.2.3 多余副本块清除的场景调用177
- 4.3 HDFS数据块的汇报与处理179
- 4.3.1 块处理的五大类型179
- 4.3.2 toAdd:新添加的块181
- 4.3.3 toRemove:待移除的块184
- 4.3.4 toInvalidate:无效的块186
- 4.3.5 toCorrupt:损坏的块189
- 4.3.6 toUC:正在构建中的块191
- 4.4 小结193
- 第5章 HDFS的流量处理194
- 5.1 HDFS的内部限流194
- 5.1.1 数据的限流194
- 5.1.2 DataTransferThrottler限流原理196
- 5.1.3 数据流限流在Hadoop中的使用198
- 5.1.4 Hadoop限流优化点202
- 5.2 数据平衡204
- 5.2.1 Balancer和Dispatcher204
- 5.2.2 数据不平衡现象207
- 5.2.3 Balancer性能优化207
- 5.3 HDFS节点内数据平衡210
- 5.3.1 磁盘间数据不平衡现象及问题211
- 5.3.2 传统的磁盘间数据不平衡解决方案211
- 5.3.3 社区解决方案:DiskBalancer212
- 5.4 小结216
- 第6章 HDFS的部分结构分析217
- 6.1 HDFS镜像文件的解析与反解析217
- 6.1.1 HDFS的FsImage镜像文件218
- 6.1.2 FsImage的解析218
- 6.1.3 FsImage的反解析221
- 6.1.4 HDFS镜像文件的解析与反解析命令226
- 6.2 DataNode数据处理中心DataXceiver227
- 6.2.1 DataXceiver的定义和结构228
- 6.2.2 DataXceiver下游处理方法232
- 6.2.3 ShortCircuit232
- 6.2.4 DataXceiver的上游调用233
- 6.2.5 DataXceiver与DataXceiverServer234
- 6.3 HDFS邻近信息块:BlockInfoContiguous235
- 6.3.1 triplets对象数组236
- 6.3.2 BlockInfoContiguous的链表操作239
- 6.3.3 块迭代器BlockIterator244
- 6.4 小结246
- 第三部分 解决方案篇
- 第7章 HDFS的数据管理248
- 7.1 HDFS的读写限流方案248
- 7.1.1 限流方案实现要点以及可能造成的影响248
- 7.1.2 限流方案实现249
- 7.1.3 限流测试结果250
- 7.2 HDFS数据资源使用量分析以及趋势预测250
- 7.2.1 要获取哪些数据251
- 7.2.2 如何获取这些数据251
- 7.2.3 怎么用这些数据254
- 7.3 HDFS数据迁移解决方案257
- 7.3.1 数据迁移使用场景257
- 7.3.2 数据迁移要素考量258
- 7.3.3 HDFS数据迁移解决方案:DistCp259
- 7.3.4 DistCp优势特性260
- 7.3.5 Hadoop DistCp命令264
- 7.3.6 DistCp解决集群间数据迁移实例265
- 7.4 DataNode迁移方案265
- 7.4.1 迁移方案的目标266
- 7.4.2 DataNode更换主机名、ip地址时的迁移方案267
- 7.5 HDFS集群重命名方案268
- 7.6 HDFS的配置管理方案271
- 7.6.1 HDFS配置管理的问题271
- 7.6.2 现有配置管理工具272
- 7.6.3 运用Git来做配置管理272
- 7.7 小结273
- 第8章 HDFS的数据读写274
- 8.1 DataNode引用计数磁盘选择策略274
- 8.1.1 HDFS现有磁盘选择策略274
- 8.1.2 自定义磁盘选择策略279
- 8.2 Hadoop节点“慢磁盘”监控282
- 8.2.1 慢磁盘的定义以及如何发现282
- 8.2.2 慢磁盘监控284
- 8.3 小结287
- 第9章 HDFS的异常场景288
- 9.1 DataNode慢启动问题288
- 9.1.1 DataNode慢启动现象288
- 9.1.2 代码追踪分析290
- 9.1.3 参数可配置化改造293
- 9.2 Hadoop中止下线操作后大量剩余复制块问题295
- 9.2.1 节点下线操作的含义及问题295
- 9.2.2 死节点“复活”297
- 9.2.3 Decommission下线操作如何运作299
- 9.2.4 中止下线操作后移除残余副本块解决方案303
- 9.3 DFSOutputStream的DataStreamer线程泄漏问题306
- 9.3.1 DFSOutputStream写数据过程及周边相关类、变量306
- 9.3.2 DataStreamer数据流对象307
- 9.3.3 ResponseProcessor回复获取类311
- 9.3.4 DataStreamer与DFSOutputStream的关系313
- 9.3.5 Streamer线程泄漏问题316
- 9.4 小结319
- 附录 如何向开源社区提交自己的代码320