
Hadoop是使用最广泛的大数据处理框架之一,在大数据领域有着极其重要的地位,掌握Hadoop可以让学习者对大数据的理解更进一步。本书是基于Hadoop 3.1.3编写的,从大数据的特点和处理难点入手,逐步讲解Hadoop的起源和发展。从搭建Hadoop的学习环境开始,依次对Hadoop的三大功能模块进行重点讲解,并且结合大量案例,细致地讲解HDFS、MapReduce、YARN的内核原理和调优方法,还会扩展讲解Hadoop的高可用实现、在生产环境中的调优方法及源码解读。本书广泛适用于大数据的学习者与从业人员,是大数据学习的必备书籍。
Hadoop的诞生,为后来的大数据处理框架提供了一个思考角度、一个切入点和一个垫脚石。有人可能会说,Hadoop已经不再流行,我们要学习更新、更快的技术,但最终通常都会重新回到Hadoop这个起点。Hadoop中的很多数据处理理念,如分而化之、shuffle、分布式存储等,在大数据处理领域都非常经典,值得反复琢磨。 很多读者在初学Hadoop时,面对众多的Hadoop图书都会有点困惑,到底哪一本才是最全面、最适合自己的?在编写本书时,编者站在一个大数据初学者的角度去思考:到底什么样的书,可以让初学者轻松入门,理解Hadoop的精妙之处,不被晦涩的源码和专业术语劝退,并且可以真正掌握这门技术,将其应用到实践中?为了解决这个问题,编者编写本书的最高准则就是深入而不晦涩,简洁而无疏漏,实践与理论并重。 本书首先会为读者演示如何搭建一个简单的Hadoop学习环境,以此为基础展开Hadoop的学习过程。在讲解具体内容时,力求针对每个知识点设计一个案例,通过讲解案例,让读者更容易掌握相关的理论知识:大数据精妙的设计理念是如何应用到实际的数据处理领域的,在实际工作中如何编写代码才可以获得更高的工作效率。Hadoop自诞生以来,已经迭代更新了很多版本,本书选用编写期间最新的稳定版本,希望能给读者提供更多指导。 本书共分9章,具体内容如下。 ? 第1章:大数据的特征、发展前景和生态体系,以及Hadoop的发展史和架构。 ? 第2章:搭建Hadoop的Linux运行环境。 ? 第3章:安装配置Hadoop,并且运行基础的Hadoop案例程序。 ? 第4~6章:详解Hadoop的三大模块——HDFS、MapReduce、YARN,这是Hadoop学习中的重要部分,穿插了大量的案例和命令行操作。 ? 第7章:Hadoop的高可用实现。 ? 第8章:Hadoop的生产环境调优。 ? 第9章:进阶部分,学习如何逐步追踪源码,从源码中理解Hadoop的核心理念。 大数据和Hadoop的初学者可以按照章节顺序进行阅读,建议跟随书中案例实际操作,编写代码。对Hadoop有一定了解的读者可以选择重点章节进行阅读。 本书是尚硅谷集合多年的Hadoop教学经验,充分考虑初学者的认知规律,综合多年教案编写而成的。多年的教学经验,使编者更懂得Hadoop学习的重点和难点,希望本书能为读者带来良好的学习体验,让更多的人知道,Hadoop其实并不难学。 读者可以关注尚硅谷教育微信公众号:atguigu,在聊天窗口发送关键字“hadoopbook”,免费获取本书配套的视频教程及资料包。如果不具备相关基础知识,则可以在尚硅谷教育公众号的聊天窗口发送关键字“大数据”,免费获取尚硅谷关于大数据的全套视频教程及学习路线图。 感谢电子工业出版社的李冰编辑,是您的精心指导让本书得以付梓面世。也感谢所有为本书内容编写提供技术支持的老师们所付出的努力。 关于我们 尚硅谷是一家专业的IT教育培训机构,现拥有位于北京、深圳、上海、武汉、西安的五处分校,开设有Java EE、大数据、HTML5前端开发、UI/UE设计等多门课程,累计发布视频教程三千多小时,广受赞誉。通过面授课程、视频分享、在线学习、直播课堂、图书出版等多种方式,满足了全国编程爱好者对多样化学习场景的需求。 尚硅谷一直坚持“技术为王,课比天大”的发展理念,设有独立的研究院,与多家互联网大厂的研发团队保持技术交流,保障教学内容始终基于研发一线,坚持聘用名校、名企的技术专家,进行源码级技术讲解。 希望通过我们的努力,让天下没有难学的技术,为中国的IT人才培养尽一点绵薄之力。 尚硅谷教育
第1章 大数据概论 1 1.1 大数据的特征 1 1.2 大数据的发展前景 2 1.2.1 大数据的应用场景 2 1.2.2 大数据的未来发展 3 1.3 大数据生态体系与Hadoop 4 1.3.1 Hadoop的发展史 4 1.3.2 大数据生态体系 5 1.3.3 Hadoop架构 7 1.4 本章总结 10 第2章 环境准备 11 2.1 安装VMware 11 2.2 安装CentOS 11 2.3 安装远程终端 19 2.3.1 安装Xshell 19 2.3.2 安装SecureCRT 21 2.4 虚拟机配置 23 2.4.1 网络配置 23 2.4.2 网络IP地址配置 24 2.4.3 主机名配置 25 2.4.4 防火墙配置 25 2.4.5 一般用户配置 26 2.4.6 克隆虚拟机 26 2.5 本章总结 27 第3章 Hadoop快速上手 28 3.1 集群角色 28 3.1.1 Hadoop集群的主要角色 28 3.1.2 YARN的主要组成部分 28 3.2 本地模式 30 3.2.1 安装 30 3.2.2 运行官方示例程序 32 3.3 完全分布式模式 33 3.3.1 SSH免密登录 33 3.3.2 shell脚本准备 34 3.3.3 集群配置 36 3.3.4 NameNode格式化问题 42 3.3.5 配置历史服务器与日志聚集功能 44 3.3.6 Hadoop集群启停脚本 47 3.3.7 集群时间同步 48 3.4 本章总结 50 第4章 分布式文件系统HDFS 51 4.1 HDFS概述 51 4.1.1 HDFS背景及定义 51 4.1.2 HDFS的基本架构 52 4.2 HDFS的shell操作 53 4.2.1 命令大全 53 4.2.2 命令行命令实操 54 4.3 HDFS的API操作 58 4.3.1 客户端环境准备 58 4.3.2 HDFS文件上传案例 61 4.3.3 HDFS文件下载案例 62 4.3.4 HDFS文件重命名案例 63 4.3.5 HDFS文件删除案例 63 4.3.6 HDFS文件详情查看案例 63 4.3.7 HDFS文件和文件夹判断案例 64 4.4 HDFS的读/写流程 65 4.4.1 HDFS中的数据块大小 65 4.4.2 写数据流程 65 4.4.3 读数据流程 68 4.5 HDFS的工作机制 69 4.5.1 NameNode和SecondaryNameNode的工作机制 69 4.5.2 EditLog和FsImage文件解析 70 4.5.3 检查点时间设置 76 4.5.4 DataNode的工作机制 76 4.5.5 数据完整性 77 4.6 本章总结 78 第5章 分布式计算MapReduce 79 5.1 MapReduce概述 79 5.1.1 MapReduce定义 79 5.1.2 MapReduce核心思想 80 5.2 MapReduce编程入门 81 5.2.1 官方示例程序WordCount源码 81 5.2.2 编程规范 82 5.2.3 WordCount案例实操 82 5.3 Hadoop的序列化 89 5.3.1 序列化概述 89 5.3.2 Writable接口 89 5.3.3 序列化案例实操 90 5.4 MapReduce框架原理之InputFormat数据输入 96 5.4.1 切片与MapTask并行度决定机制 96 5.4.2 Job提交流程源码和FileInputFormat切片源码详解 98 5.4.3 FileInputFormat切片机制总结 101 5.4.4 TextInputFormat 101 5.4.5 CombineTextInputFormat切片机制 102 5.4.6 CombineTextInputFormat案例实操 103 5.5 MapReduce框架原理之shuffle机制 104 5.5.1 shuffle机制 104 5.5.2 分区 105 5.5.3 分区案例实操 106 5.5.4 WritableComparable排序 110 5.5.5 WritableComparable排序案例实操(全排序) 111 5.5.6 WritableComparable排序案例实操(区内排序) 116 5.5.7 Combiner合并 119 5.5.8 Combiner合并案例实操 120 5.6 MapReduce框架原理之OutputFormat数据输出 121 5.6.1 OutputFormat接口的实现类 121 5.6.2 自定义OutputFormat类的案例实操 122 5.7 MapReduce工作流程 126 5.8 Join 127 5.8.1 Reduce Join 127 5.8.2 Reduce Join案例实操 127 5.8.3 Map Join 133 5.8.4 Map Join案例实操 134 5.9 数据清洗 137 5.10 Hadoop中的数据压缩 139 5.10.1 数据压缩概述 139 5.10.2 压缩参数配置 140 5.10.3 压缩案例实操 141 5.11 本章总结 145 第6章 资源调度器YARN 146 6.1 YARN概述 146 6.1.1 基本架构 147 6.1.2 工作机制 148 6.2 YARN的资源调度器和调度算法 150 6.2.1 FIFO调度器 150 6.2.2 容量调度器 150 6.2.3 公平调度器 152 6.3 YARN实操 156 6.3.1 常用的命令行命令 156 6.3.2 核心参数 158 6.3.3 核心参数配置案例 159 6.3.4 容量调度器配置案例 163 6.3.5 公平调度器配置案例 168 6.3.6 Tool接口案例 171 6.4 本章总结 174 第7章 高可用HA 175 7.1 ZooKeeper详解 175 7.1.1 ZooKeeper入门 175 7.1.2 ZooKeeper安装 178 7.1.3 ZooKeeper的内部原理 180 7.1.4 ZooKeeper的命令操作 181 7.2 HA概述 188 7.2.1 什么是HA 188 7.2.2 HDFS HA的工作机制 188 7.3 Hadoop HA集群的搭建 189 7.3.1 HDFS HA手动故障转移 189 7.3.2 HDFS HA自动故障转移 192 7.3.3 YARN HA 195 7.3.4 Hadoop HA集群规划 199 7.4 本章总结 199 第8章 生产调优手册 200 8.1 HDFS的核心参数 200 8.1.1 NameNode的内存生产配置 200 8.1.2 NameNode心跳并发配置 202 8.1.3 启用回收站功能 203 8.2 HDFS集群压测 204 8.2.1 测试HDFS的写性能 205 8.2.2 测试HDFS的读性能 207 8.3 HDFS的多目录配置 208 8.3.1 NameNode的多目录配置 208 8.3.2 DataNode的多目录配置 208 8.3.3 集群数据均衡之磁盘之间的数据均衡 209 8.4 HDFS集群的扩容及缩容 209 8.4.1 添加白名单 209 8.4.2 服役新服务器 212 8.4.3 服务器之间的数据均衡 214 8.4.4 黑名单退役服务器 214 8.5 HDFS的存储优化策略 216 8.5.1 纠删码 216 8.5.2 异构存储 218 8.6 HDFS的故障排除 223 8.6.1 NameNode故障处理 223 8.6.2 集群安全模式&磁盘数据损坏 224 8.6.3 慢磁盘监控 226 8.6.4 小文件存档 227 8.7 MapReduce的生产经验 228 8.7.1 MapReduce程序运行较慢的原因 228 8.7.2 MapReduce的常用调优参数 229 8.7.3 MapReduce的数据倾斜 231 8.8 Hadoop的综合调优 232 8.8.1 Hadoop的小文件优化方法 232 8.8.2 测试MapReduce的计算性能 233 8.8.3 企业开发场景案例 234 8.9 本章总结 239 第9章 源码解析 240 9.1 RPC通信原理 240 9.2 NameNode启动源码解析 243 9.2.1 查看源码的准备工作 243 9.2.2 启动9870端口服务 246 9.2.3 加载镜像文件和编辑日志文件 247 9.2.4 初始化RPC服务器端 248 9.2.5 检查资源 249 9.2.6 检测心跳信息并进行超时判断 252 9.2.7 退出安全模式 255 9.3 DataNode启动源码解析 257 9.3.1 查看源码的准备工作 257 9.3.2 初始化DataXceiverServer 259 9.3.3 初始化HTTP服务 260 9.3.4 初始化RPC服务器端 261 9.3.5 DataNode向NameNode注册 262 9.3.6 DataNode向NameNode发送心跳信息 266 9.4 HDFS写数据流程的源码解析 268 9.4.1 查看源码的准备工作 269 9.4.2 Client向NameNode发起写请求 269 9.4.3 NameNode处理Client的写请求 270 9.4.4 DataStreamer启动流程 271 9.4.5 向DataStreamer的队列中写数据 274 9.4.6 建立管道之机架感知 276 9.4.7 建立管道之socket发送 278 9.4.8 建立管道之socket接收 280 9.4.9 客户端接收DataNode的写数据响应 283 9.5 YARN源码解析 284 9.5.1 查看源码的准备工作 284 9.5.2 创建YARN客户端并提交任务 286 9.5.3 启动MRAppMaster 288 9.5.4 调度器任务执行 291 9.6 Hadoop的源码编译 294 9.6.1 前期准备工作 295 9.6.2 安装工具包 295 9.6.3 编译源码 297 9.7 本章总结 298