Hadoop大数据实战:从入门到精通

需积分: 10 11 下载量 157 浏览量 更新于2024-07-19 收藏 2.63MB PDF 举报
"大数据实战手册,适合入门者,涵盖Hadoop环境搭建、HDFS、MapReduce、Storm、数据挖掘等核心组件和解决方案,旨在提供一线企业实践经验,快速提升大数据技能。" 本书《大数据实战手册》是针对大数据初学者的一份详尽指南,旨在通过实际操作和理论结合的方式,帮助读者迅速掌握大数据技术。书中主要介绍了以下几个关键知识点: 1. **Hadoop入门与实践**:讲解了Hadoop的发展历程和生态系统,包括Hadoop的核心组件,如HDFS和MapReduce,以及如何搭建Hadoop环境。 2. **HDFS文件系统**:深入探讨了HDFS的特点,不适合HDFS的场景,其体系结构,数据块复制策略,读写流程,以及常用的HDFS命令操作。 3. **MapReduce计算框架**:详细阐述了MapReduce的编程模型,执行流程,数据本地化策略,工作原理以及错误处理机制,这些都是理解分布式计算的关键。 4. **Zookeeper**:介绍了Zookeeper的数据模型,访问控制和在大数据环境中的应用场景,它是Hadoop集群管理和协调的重要工具。 5. **HBase**:讲解了NoSQL数据库HBase的基本概念,数据模型,架构,容错与恢复机制,以及基础操作,适用于需要实时查询的大规模数据存储。 6. **Hive**:介绍了Hive作为数据仓库工具的基础原理和操作,包括如何使用Hive进行数据查询和分析。 7. **流式计算解决方案-Storm**:对比了Storm与Hadoop的区别,解析了Storm的特点,基本概念,系统架构,容错机制,以及如何实现一个简单的Storm应用,展示了实时数据处理的能力。 8. **数据挖掘-推荐系统**:探讨了数据挖掘和机器学习的基础,特别是在推荐系统中的应用,讲解了基于内容和协同过滤的推荐算法。 该书以实践为主,理论为辅,强调一线企业的实战经验,避免了过多的理论讲解,直击大数据工程师所需的核心技能,旨在帮助读者快速达到大数据行业的入门标准,并具备解决实际问题的能力。通过学习本书,读者可以系统地掌握大数据处理的关键技术,为未来在大数据领域的深入发展打下坚实基础。
2018-09-07 上传
第一部分核心设计篇 第1 章HDFS 的数据存储………….. .....………………… ……………………····· ··· …..... ... 2 1.1 HDFS 内存存储...............…··························· ·· ···············…….................…... . .. .. ................. 2 1.1.l HDFS 内存存储原理..................…... . .....……......………………………………… 2 1.1.2 Linux 虚拟内存盘........……………………………………………………………………………… 4 1.1.3 HDFS 的内存存储流程分析…·… ………………………………………………………………… 4 1.1.4 LAZY PERSIST 内存存储的使用……………················ · ································ 14 1.2 HDFS 异构存储......... 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 存储策略的使用…… ……………………………………………………………………… M 1.3 小结…..............………………··…………….......….................….......….........……………….. 31 VI 第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.l 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 BlockPlacementPolicyWithNo deGroup 继承类……………………·· …… …….. 84 2.4.7 副本放置策略的结果验证… …… ..... . ... . … … …………………………………… 85 2.5 HDFS 内部的认证机制……………………………… …………………………………………… … ………盯 2.5. l BlockToken 认证…… …… … … ………........…. . ........ . ..............…........….........….. 85 2 .5. 2 HDFS 的Sas I 认证……··……………………………………………………………………………引 2 .5.3 BlockToken 认证与HDFS 的Sas I 认证对比…… ……… ........…......................... 97 VII 2.6 HDFS 内部的磁盘目录服务…..... .. .... .... ......….... ...... ....…….......….... ....….. ........ ...... ....... 98 2.6.1 HDFS 的三大磁盘目录检测扫描服务…·…………………………… ………… …………… 98 2.6 .2 Diskαiecker : 坏盘检测服务..... ...... ...........… ……... ......… ………… . .. .... ...……. 99 2.6.3 DirectoryScanner :目录扫描服务…·………………………… … ………………………….. 104 2.6.4 VolumeScanner : 磁盘目录扫描服务… · …………………………………… … …………… · 110 2.7 小结….......…........….......…………………………………………......................….........…·· 116 第3 章HDFS 的新颖功能特性....... .... .. . .… … …… 3.1 HDFS 视图文件系统: V1ewFileSystem · ··· ·· · ·· ·· ·· ··… ....... .... .. ..... ...... .. .………………… · 117 3.1.1 ViewFileSystem :视图文件系统……………………………………… ·· ·················· 118 3.1.2 ViewFileSystem 内部实现原理………………………………………………… …… ……… · · 119 3 .1.3 ViewFileSystem 的使用……… ……… … ………………………………………………………. 125 3.2 HDFS 的Web 文件系统: WebHdfsFileSystem · ·…... .. ...…... .... ..…........… .... .. ........ ....… 126 3 .2.1 WebHdfsFileSystem 的REST API 操作… ·…………… …… …………………………….. 127 3.2.2 WebHdfsFileSystem 的流程调用…….. . . ...….... ..... ........ .. ... . ........ . .…. ... .. .… …… 129 3.2.3 WebHdfsFileSystem 执行器调用……··……………………………………………………… 130 3.2.4 WebHDFS 的0Auth2 认证…·………………………………………………………………… 1 日 3.2.5 WebHDFS 的使用…………………………………………………………………… ………. . 135 3.3 HDFS 数据加密空间: Encryption zone …… ………………………… ………… ………………….. 136 3.3 . l 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 对象存储: Ozone· ……...............…….......….......……….......... .. ... … … … … … … 152 3.5.l Ozone 介绍... .. . .......….. .... ..………… …………………………………… … …………………… 153 3.5.2 Ozone 的高层级设计· · ···· ···………·· · ····……… ………………………………………………. 154 3.5.3 Ozone 的实现细节……… · ·…………………… ………………………………………… … …. 157 3.5.4 Ozone 的使用…·…………… ……………………………………………… … ……………… ……. 157 3.6 小结….......……………………………………………………… .... . ...........………….. .. .....………. 158 VIII 第二部分细节实现篇 第4 章HDFS 的块处理……·…………………………………………….... ......... ..…….... ....… 160 4.1 HDFS 块检查命令fsck … ··……………………… …………………… … ……… ……… ……………… . . 160 4 .1.l fsck 参数使用… . .. . .. .. . ... ..…… ··· · ···· ··· ·· ······· · · · ·…………………………….. 160 4 .1.2 fsck 过程调用….......………… …… ……………………………........................ 161 4. l.3 fsck 原理分析.........…… …. .. ... .………… …… ……… … ………………………………………. 162 4. l.4 fs 此使用场景······· · ·· · · · ··· ·… … …… ……………… ·… ……........……………........….......... 171 4.2 HDFS 如何检测并删除多余副本块...... . …....... . .………….... . .... . .............…….........……. 171 4.2.1 多余副本块以及发生的场景… …··…………………………………………………………… 172 4.2.2 OverReplication 多余副本块处理……………………………………………………………. 172 4.2.3 多余副本块清除的场景调用...... ...... .. .. .... .. .. ...... . . ...... . ... . .. ... . . .…................ . ….. 177 4.3 HDFS 数据块的汇报与处理…………………………………………………………………………….. 179 4 .3. l 块处理的五大类型………………………………………………………………………………… 179 4.3.2 toAdd : 新添加的块... .. ....….... .. . ..…… … ………………………………………… 181 4.3.3 toRemove : 待移除的块…·……………………… ………………………………………… … .. 184 4.3.4 tolnvalidate : 无效的块………………… …………………………………. . 186 4 .3.5 toCorrupt : 损坏的块… · ………………………………………………………………………… 189 4.3.6 toUC : 正在构建中的块………… ... .. .. .. ... ... .. ... .... . .. ....... -. ..... ...... .. ....……··…… 191 44 小结… … ………·· ·· ··· ……………… … ………… …… ·· …………………………………………….. 193 第5 章HDFS 的流量处理…··…………………………………………………… ………………………… .. 1 归 5.1 HDFS 的内部限流. . ..... .. . .... ........... . .. . …………………………… · …… ………… . . .. .. . .. . . 194 5.1.l 数据的限流….... ....…·………………………………………… … ……… …… …………………. 194 5.1.2 DataTransferThrottler 限流原理.. .... ... ………………………………………………………. 196 5.1.3 数据流限流在Hadoop 中的使用… ………… ·….. . .....................….................…… 198 5.1.4 Hadoop 限流优化点… ·………………… ………………………………………………………… 202 5.2 数据平衡…….. . ... ... ............................ .………… ………………………·······…·…....... 204 5.2. 1 Balancer 和Dispatcher········· ·· ···· …………………………………………… 204 5.2.2 数据不平衡现象… ·……… … ……... ....…..............… … ………………………….. 207 5.2. 3 Balancer 性能优化……………… …… …·……………………………………………….. 207 IX 5 3 HDFS 节点内数据平衡… …·………………… ………………………………………………………….. 210 5.3. l 磁盘问数据不平衡现象及问题……………………………………………………………… 0021 l 5.3.2 传统的磁盘问数据不平衡解决方案…………………………………··………… 211 5.3.3 社区解决方案: DiskBalancer ·… .. ......…...............….......…··….......….......…....... 212 第6 章HDFS 的部分结构分析… ··…………………………… … … …………………………… … ……… 217 6.1 HDFS 镜像文件的解析与反解析…··· ··· ········…...........……………………........…...... 217 6.1 .1 HDFS 的Fslmage 镜像文件... ......….........…………………………… · ·……................ 218 6.1.2 Fslmage 的解析.. . .....…·…………… …………………………………………………………….. 218 6.1.3 Fslmage 的反解析........…………………….. . .......…….......……......................….. 221 6.1.4 HDFS 镜像文件的解析与反解析命令…...........….......................................….. 226 6.2 DataNode 数据处理中心DataXceiver ……… .. ..... .……. ... ... ……..... . …... . ...…...... .... ....….. 227 6.2.l DataXceiver 的定义和结构...... . .. .. ...................……………… ………··…….. ..... 228 6.2.2 DataXceiver 下游处理方法…………………………………………………………………… 232 6.2.3 ShortCircuit …...... ..…......... .. .......….... .. ..... .............…·……………………………. 232 6.2.4 DataXceiver 的上游调用... .. .. . .. ...……………………………………………………….. 233 6.2 5 DataXceiver 与DataXce1verSe凹er .. ··………………………………………………………. 234 6.3 日DFS 邻近信息块: BlocklnfoContiguous ....... · ..........................………………. .. ...….. 235 6.3 .1 tnplets 对象数组···· · ··· ···· · ··· ·· ···· · ··…………………………………………………………….. 236 6 .3.2 BlocklnfoContiguous 的链表操作…·… · ···············….......... .. ….......…................. 239 6.3.3 块迭代器Blocklterator ..…… ............. ...…...............………………… ... ......…… 244 6.4 小结.......……… ….. .. . ...…………......................... . ..... ... . ... . . . ……………… ·· ····· ··…··…........ 246 第三部分解决方案篇 第7 章HDFS 的数据管理… .......…………........….......…........…·……………........................ 248 7.1 HDFS 的读写限流方案………...... . …….......….......….......….........….. ... ............….......… 248 7 . 1.1 限流方案实现要点以及可能造成的影响.. .. .. .…………···· · ··· ·….. . . .....…........... 248 7.1.2 限流方案实现…………….... ........ .... . ......…...............................................….. 249 7.1.3 限流测试结果……....... .………… …………………………………………………..... .. .… 250 x 7.2 HDFS 数据资源使用量分析以及趋势预测…........... . ....……..............…······· · ·······…… 250 7.2. 1 要获取哪些数据……. . . ... .... ... ... … ….......…... . ...… … …... . ............ . ...... . ............… 251 7.2.2 如何获取这些数据……. . . . ...………·· … … … …..... . ......................................... . ......... 251 7 .2 3 怎么用这些数据… ·……………………………………………………………….. . .. . ....... . … 254 7.3 H DFS 数据迁移解决方案… … ........ . …································…………….. .. ...… . ..............… 257 7.3. l 数据迁移使用场景………………………………………………………………………………… 257 7.3.2 数据迁移要素考量... . ............…··································· · ·…………….......………. 258 7 .3.3 HD F S 数据迁移解决方案: D istCp …………………………………………………………. 259 7.3.4 DistCp 优势特性…………………………………… … ………………………………………….. 260 7.3 .5 Hadoop DistCp 命令······· · ·····… … ……· · ……………………….....................… . 264 7.3.6 D is tC p 解决集群间数据迁移实例…… … . .... .. …… . ..................................…........ 265 7 4 D ataNo de 迁移方案…··… … …….......….. . .. .. .… . ......…................……….......…................… 265 7.4.1 迁移方案的目标... . ..... … ……………….. . .... . … h ………………………………………… 266 7.4.2 DataNo d e 更换主机名、i p 地址时的迁移方案…….......................................... 267 7.5 H D FS 集群重命名方案……....... . ... . ...…….. . .. . .. . .......…….............................. . .....……… 268 7.6 HD FS 的配置管理方案... . ...........…··…………………………………………………………….. 271 7.6. 1 HDFS 配置管理的问题………………………………………………………………………… . . 271 7.6.2 现有配置管理工具....................... . . … … . ........... . .....….......... . ...... . ................ . ...… 272 7.6.3 运用Git 来做配置管理………………………………………………………………………. 272 第8 章HDFS 的数据读写……… … …………………………................... . ..….............. 274 8.1 D ataNo d e 引用计数磁盘选择策略.... . ... . .............. . ...... . .... . ........... . .... . ... . ... . .............. .' .... 274 8.1.1 HD FS 现有磁盘选择策略..... . ............….......…….......……………………… . .. . . 274 8.1.2 自定义磁盘选择策略…………… … …………… … … … ……………………………………….. 279 8.2 Hadoo p 节点“慢磁盘”监控…… … .. ... ...……··…………………………………………………….. 282 8.2.1 慢磁盘的定义以及如何发现………………… … ……………………………….. 282 8.2.2 慢磁盘监控…·· · ···· · ·………··· · ···…………… . ......…........…................................... 284 第9 章HDFS 的异常场景……….. ... ... … .... . ..……. .. ....……………….... . ..……... . ..….......…······· 288 9 . 1 DataN ode 慢启动问题…·……………………………………………………………………………… … .. 288 XI 9 .1.1 DataN ode 慢启动现象………………………………·······……….......……......... 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 中止下线操作后移除残余副本块解决方案…………………………..... ...…·······…… 3 03 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 线程泄漏问题.........……… .. .... .……………………………… …………………… 3 16 9.4 小结. ..... ...………·…………………………………………………………………………………………. 319 附录如何向开源社区提交自己的代码………………………………. ... .. ............................ 320