Hadoop技术内幕:深入解析MapReduce架构设计与实现原理.pdf

Hadoop技术内幕:深入解析MapReduce架构设计与实现原理.pdf
 

书籍描述

编辑推荐
《Hadoop技术内幕:深入解析MapReduce架构设计与实现原理》编辑推荐:资深Hadoop技术专家撰写,EasyHadoop和51CTO等专业技术社区联袂推荐!
从源代码角度深入分析MapReduce的设计理念,以及RPC框架、客户端、JobTracker、TaskTracker和Task等运行时环境的架构设计与实现原理。
深入探讨Hadoop性能优化、多用户作业调度器、安全机制、下一代MapReduce框架等高级主题。

名人推荐
Hadoop是近两年来技术领域最热门的话题,从媒体界到学术界,再到企业界,都给予了高度关注。在企业界,无论是在IT领域,还是在金融、电信、生物、医药、制造等传统领域,Hadoop的应用都非常广泛,可以说只要有海量数据需要处理的地方,就有Hadoop。尤其是在IT领域,从国外的Google、Yahoo!、Microsoft、Oracle、Facebook,到国内的阿里巴巴、淘宝、腾讯、百度、新浪、搜狐,都在Hadoop的研发和应用上投入了大量的人力和资金,并获得了丰厚的收益。随着Hadoop的普及,用户遇到的问题会越来越多,也会越来越复杂。要解决实际生产环境中可能遇到的复杂问题,掌握Hadoop本身的设计和实现原理是根本之道。“Hadoop技术内幕”这两本书就本着这个目标出发,从源代码的角度对Hadoop的工作机制进行了深入的分析,并对实践中可能会遇到的各种问题给出了解决方案。
——童小军 资深Hadoop技术专家、企业级大数据解决方案RedHadoop创始人

媒体推荐
经过几年的快速发展,Hadoop已经成为大数据时代存储和处理海量数据的事实标准,具有高可靠性、高扩展性、高效性和高容错性等许多优点,在学术界备受关注,在业界则更受欢迎。Hadoop的功能非常强大,与之相伴的是使用上的复杂性,如何才能更好地使用Hadoop、更好地对Hadoop进行性能优化、扩展和定制?通过阅读和研究它的源代码实现以上目标是一种不错的选择。“Hadoop技术内幕”这两本书根据读者的需求,对Common、HDFS和MapReduce等核心技术的架构设计和实现原理进行了深入且详细的分析,对于想了解Hadoop工作机制的读者来说,这两本书应该是十分难得的,强烈推荐。
——EasyHadoop开源技术社区 致力于Hadoop的易用和普及

作者简介
董西成,资深Hadoop技术实践者和研究者,对Hadoop技术有非常深刻的认识和理解,有着丰富的实践经验。曾经参与了商用Hadoop原型的研发,以及人民搜索的分布式日志系统、全网图片搜索引擎、Hadoop调度器等多个项目的设计与研发,实践经验非常丰富。对Hadoop的源代码有深入的研究,能通过修改Hadoop的源代码来完成二次开发和解决各种复杂的问题。热衷于分享,撰写了大量关于Hadoop的技术文章并分享在自己的博客上,由于文章技术含量高,所以非常受欢迎,这使得他在Hadoop技术圈内颇具知名度和影响力。

目录
前言
第一部分 基础篇
第1章 阅读源代码前的准备 2
1.1 准备源代码学习环境 2
1.1.1 基础软件下载 2
1.1.2 如何准备Windows环境 3
1.1.3 如何准备Linux环境 6
1.2 获取Hadoop源代码 7
1.3 搭建Hadoop源代码阅读环境 8
1.3.1 创建Hadoop工程 8
1.3.2 Hadoop源代码阅读技巧 9
1.4 Hadoop源代码组织结构 10
1.5 Hadoop初体验 13
1.5.1 启动Hadoop 13
1.5.2 Hadoop Shell介绍 15
1.5.3 Hadoop Eclipse插件介绍 15
1.6 编译及调试Hadoop源代码 19
1.6.1 编译Hadoop源代码 19
1.6.2 调试Hadoop源代码 20
1.7 小结 23
第2章 MapReduce设计理念与基本架构 24
2.1 Hadoop发展史 24
2.1.1 Hadoop产生背景 24
2.1.2 Apache Hadoop新版本的特性 25
2.1.3 Hadoop版本变迁 26
2.2 Hadoop MapReduce设计目标 28
2.3 MapReduce编程模型概述 29
2.3.1 MapReduce编程模型简介 29
2.3.2 MapReduce编程实例 31
2.4 Hadoop基本架构 32
2.4.1 HDFS架构 33
2.4.2 Hadoop MapReduce架构 34
2.5 Hadoop MapReduce作业的生命周期 36
2.6 小结 38
第二部分 MapReduce编程模型篇
第3章 MapReduce编程模型 40
3.1 MapReduce编程模型概述 40
3.1.1 MapReduce编程接口体系结构 40
3.1.2 新旧MapReduce API比较 41
3.2 MapReduce API基本概念 42
3.2.1 序列化 42
3.2.2 Reporter参数 43
3.2.3 回调机制 43
3.3 Java API解析 44
3.3.1 作业配置与提交 44
3.3.2 InputFormat接口的设计与实现 48
3.3.3 OutputFormat接口的设计与实现 53
3.3.4 Mapper与Reducer解析 55
3.3.5 Partitioner接口的设计与实现 59
3.4 非Java API解析 61
3.4.1 Hadoop Streaming的实现原理 61
3.4.2 Hadoop Pipes的实现原理 64
3.5 Hadoop工作流 67
3.5.1 JobControl的实现原理 67
3.5.2 ChainMapper/ChainReducer的实现原理 69
3.5.3 Hadoop工作流引擎 71
3.6 小结 73
第三部分 MapReduce核心设计篇
第4章 Hadoop RPC框架解析 76
4.1 Hadoop RPC框架概述 76
4.2 Java基础知识 77
4.2.1 Java反射机制与动态代理 78
4.2.2 Java网络编程 80
4.2.3 Java NIO 82
4.3 Hadoop RPC基本框架分析 89
4.3.1 RPC基本概念 89
4.3.2 Hadoop RPC基本框架 91
4.3.3 集成其他开源RPC框架 98
4.4 MapReduce通信协议分析 100
4.4.1 MapReduce 通信协议概述 100
4.4.2 JobSubmissionProtocol通信协议 102
4.4.3 InterTrackerProtocol通信协议 102
4.4.4 TaskUmbilicalProtocol通信协议 103
4.4.5 其他通信协议 104
4.5 小结 106
第5章 作业提交与初始化过程分析 107
5.1 作业提交与初始化概述 107
5.2 作业提交过程详解 108
5.2.1 执行Shell命令 108
5.2.2 作业文件上传 109
5.2.3 产生InputSplit文件 111
5.2.4 作业提交到JobTracker 113
5.3 作业初始化过程详解 115
5.4 Hadoop DistributedCache原理分析 117
5.4.1 使用方法介绍 118
5.4.2 工作原理分析 120
5.5 小结 122
第6章 JobTracker内部实现剖析 123
6.1 JobTracker概述 123
6.2 JobTracker启动过程分析 125
6.2.1 JobTracker启动过程概述 125
6.2.2 重要对象初始化 125
6.2.3 各种线程功能 128
6.2.4 作业恢复 129
6.3 心跳接收与应答 129
6.3.1 更新状态 131
6.3.2 下达命令 131
6.4 Job和Task运行时信息维护 134
6.4.1 作业描述模型 134
6.4.2 JobInProgress 136
6.4.3 TaskInProgress 137
6.4.4 作业和任务状态转换图 139
6.5 容错机制 141
6.5.1 JobTracker容错 141
6.5.2 TaskTracker容错 142
6.5.3 Job/Task容错 145
6.5.4 Record容错 147
6.5.5 磁盘容错 151
6.6 任务推测执行原理 152
6.6.1 计算模型假设 153
6.6.2 1.0.0版本的算法 153
6.6.3 0.21.0版本的算法 154
6.6.4 2.0版本的算法 156
6.7 Hadoop资源管理 157
6.7.1 任务调度框架分析 159
6.7.2 任务选择策略分析 162
6.7.3 FIFO调度器分析 164
6.7.4 Hadoop资源管理优化 165
6.8 小结 168
第7章 TaskTracker内部实现剖析 169
7.1 TaskTracker概述 169
7.2 TaskTracker启动过程分析 170
7.2.1 重要变量初始化 171
7.2.2 重要对象初始化 171
7.2.3 连接JobTracker 172
7.3 心跳机制 172
7.3.1 单次心跳发送 172
7.3.2 状态发送 175
7.3.3 命令执行 178
7.4 TaskTracker行为分析 179
7.4.1 启动新任务 179
7.4.2 提交任务 179
7.4.3 杀死任务 181
7.4.4 杀死作业 182
7.4.5 重新初始化 184
7.5 作业目录管理 184
7.6 启动新任务 186
7.6.1 任务启动过程分析 186
7.6.2 资源隔离机制 193
7.7 小结 195
第8章 Task运行过程分析 196
8.1 Task运行过程概述 196
8.2 基本数据结构和算法 197
8.2.1 IFile存储格式 197
8.2.2 排序 198
8.2.3 Reporter 201
8.3 Map Task内部实现 204
8.3.1 Map Task整体流程 204
8.3.2 Collect过程分析 205
8.3.3 Spill过程分析 213
8.3.4 Combine过程分析 214
8.4 Reduce Task内部实现 214
8.4.1 Reduce Task整体流程 215
8.4.2 Shuffle和Merge阶段分析 215
8.4.3 Sort和Reduce阶段分析 218
8.5 Map/Reduce Task优化 219
8.5.1 参数调优 219
8.5.2 系统优化 220
8.6 小结 224
第四部分 MapReduce高级篇
第9章 Hadoop性能调优 228
9.1 概述 228
9.2 从管理员角度进行调优 229
9.2.1 硬件选择 229
9.2.2 操作系统参数调优 229
9.2.3 JVM参数调优 230
9.2.4 Hadoop参数调优 230
9.3 从用户角度进行调优 235
9.3.1 应用程序编写规范 235
9.3.2 作业级别参数调优 235
9.3.3 任务级别参数调优 239
9.4 小结 240
第10章 Hadoop多用户作业调度器 241
10.1 多用户调度器产生背景 241
10.2 HOD 242
10.2.1 Torque资源管理器 242
10.2.2 HOD作业调度 243
10.3 Hadoop队列管理机制 245
10.4 Capacity Scheduler实现 246
10.4.1 Capacity Scheduler功能介绍 247
10.4.2 Capacity Scheduler实现 249
10.4.3 多层队列调度 254
10.5 Fair Scheduler实现 255
10.5.1 Fair Scheduler功能介绍 255
10.5.2 Fair Scheduler实现 258
10.5.3 Fair Scheduler与Capacity Scheduler对比 263
10.6 其他Hadoop调度器介绍 264
10.7 小结 265
第11章 Hadoop安全机制 266
11.1 Hadoop安全机制概述 266
11.1.1 Hadoop面临的安全问题 266
11.1.2 Hadoop对安全方面的需求 267
11.1.3 Hadoop安全设计基本原则 267
11.2 基础知识 268
11.2.1 安全认证机制 268
11.2.2 Kerberos介绍 270
11.3 Hadoop安全机制实现 273
11.3.1 RPC 273
11.3.2 HDFS 276
11.3.3 MapReduce 278
11.3.4 上层服务 280
11.4 应用场景总结 281
11.4.1 文件存取 281
11.4.2 作业提交与运行 282
11.4.3 上层中间件访问Hadoop 282
11.5 小结 283
第12章 下一代MapReduce框架 284
12.1 第一代MapReduce框架的局限性 284
12.2 下一代MapReduce框架概述 284
12.2.1 基本设计思想 284
12.2.2 资源统一管理平台 286
12.3 Apache YARN 287
12.3.1 Apache YARN基本框架 287
12.3.2 Apache YARN工作流程 290
12.3.3 Apache YARN设计细节 291
12.3.4 MapReduce与YARN结合 294
12.4 Facebook Corona 298
12.4.1 Facebook Corona基本框架 298
12.4.2 Facebook Corona工作流程 300
12.4.3 YARN与Corona对比 303
12.5 Apache Mesos 304
12.5.1 Apache Mesos基本框架 304
12.5.2 Apache Mesos资源分配 305
12.5.3 MapReduce与Mesos结合 307
12.6 小结 309
附录A 安装Hadoop过程中可能存在的问题及解决方案 310
附录B Hadoop默认HTTP端口号以及HTTP地址 312
参考资料 313

序言
前言
为什么要写这本书
突然之间,大数据一下子就“火”了,开源软件Hadoop也因此水涨船高。得益于一些国际领先厂商,尤其是FaceBook、Yahoo!以及阿里巴巴等互联网巨头的现身说法,Hadoop被看成大数据分析的“神器”。IDC在对中国未来几年的预测中就专门提到了大数据,其认为未来几年,会有越来越多的企业级用户试水大数据平台和应用,而这之中,Hadoop将成为最耀眼的“明星”。
尽管Hadoop整个生态系统是开源的,但是,由于它包含的软件种类过多,且版本升级过快,大部分公司,尤其是一些中小型公司,难以在有限的时间内快速掌握Hadoop蕴含的价值。此外,Hadoop自身版本的多样化也给很多研发人员带来了很大的学习负担。尽管当前市面上已有很多参考书籍,比如《Hadoop: The Definitive Guide》、《Hadoop in Action》、《Pro Hadoop》、《Hadoop Operations》等,但是,至今还没有一本书能够深入地剖析Hadoop内部的实现细节,比如JobTracker实现、作业调度器实现等。也正因如此,很多Hadoop初学者和研发人员只能参考网络上一些零星的源代码分析的文章,自己一点一点地阅读源代码,缓慢地学习Hadoop。而本书正是为了解决以上各种问题而编写的,它是国内第一本深入剖析Hadoop内部实现细节的书籍。
本书以Hadoop 1.0为基础,深入剖析了Hadoop MapReduce中各个组件的实现细节,包括RPC框架、JobTracker实现、TaskTracker实现、Task实现和作业调度器实现等。书中不仅详细介绍了MapReduce各个组件的内部实现原理,而且结合源代码进行了深入的剖析,使读者可以快速全面地掌握Hadoop MapReduce设计原理和实现细节。
读者对象
(1)Hadoop二次开发人员
Hadoop由于在扩展性、容错性和稳定性等方面的诸多优点,已被越来越多的公司采用。而为了减少开发成本,大部分公司在Hadoop基础上进行了二次开发,以打造属于公司内部的Hadoop平台。对于Hadoop二次开发人员来说,深入而又全面地了解Hadoop的设计原理与实现细节是修改Hadoop内核的前提,而本书可帮助这部分读者快速而又全面地了解Hadoop实现细节。
(2)Hadoop应用开发人员
如果要利用Hadoop进行高级应用开发,仅掌握Hadoop基本使用方法是远远不够的,必须对Hadoop框架的设计原理、架构和运作机制有一定的了解。对这部分读者而言,本书将带领他们全面了解Hadoop的设计和实现原理,加深对Hadoop框架的理解,提高开发水平,从而编写出更加高效的MapReduce应用程序。
(3)Hadoop运维工程师
对于一名合格的Hadoop运维工程师而言,适当地了解Hadoop框架的设计原理、架构和运作机制是十分有帮助的。这不仅可以使Hadoop运维人员更快地排除各种可能的Hadoop故障,还可以让Hadoop运维人员与研发人员进行更有效的沟通。通过阅读这本书,Hadoop运维人员可以了解到很多其他书中无法获取的Hadoop实现细节。
(4)开源软件爱好者
Hadoop是开源软件中的佼佼者。它在实现的过程中吸收了很多开源领域的优秀思想,同时有很多值得学习的创新。尤为值得一提的是,本书分析Hadoop架构设计和实现原理的方式也许值得所有开源软件爱好者学习和借鉴。通过阅读本书,这部分读者不仅能领略到开源软件的优秀思想,还可以掌握分析开源软件源代码的方法和技巧,从而进一步提高使用开源软件的效率和质量。
如何阅读本书
本书分为四大部分(不包括附录):
第一部分为基础篇,简单地介绍Hadoop的阅读环境搭建和基本设计架构,帮助读者了解一些基础背景知识。
第二部分为MapReduce编程模型篇,着重讲解MapReduce编程接口,主要包括两套编程接口,分别是旧API和新API。
第三部分为MapReduce核心设计篇,主要讲解Hadoop MapReduce的运行时环境,包括RPC框架、客户端、JobTracker、TaskTracker和Task等内部实现细节。
第四部分为MapReduce高级篇,主要讲解Hadoop MapReduce中的一些高级特性和未来发展趋势,包括多用户作业调度器、安全机制和下一代MapReduce框架等。
另外,本书最后还添加了几个附录:附录A为安装Hadoop过程中可能存在的问题及解决方案;附录B为Hadoop默认HTTP端口号以及HTTP地址。参考资料中包括了本书写作过程中参考的书籍、论文、Hadoop Jira和网络资源。
如果你是一名经验丰富的资深用户,能够理解Hadoop的相关基础知识和使用技巧,那么你可以直接阅读第三部分和第四部分。但是,如果你是一名初学者,请一定从第1章的基础理论知识开始学习。

文摘
第一部分
基础篇
本部分内容
阅读源代码前的准备
MapReduce设计理念与基本架构
第1章 阅读源代码前的准备
一般而言,在深入研究一个系统的技术细节之前,先要进行一些基本的准备工作,比如,准备源代码阅读环境,搭建运行环境并尝试使用该系统等。对于Hadoop而言,由于它是一个分布式系统,且由多种守护进程组成,具有一定的复杂性,如果想深入学习其设计原理,仅仅进行以上几项准备工作是不够的,还要学习一些调试工具的使用方法,以便对Hadoop源代码进行调试、跟踪。边用边学,这样才能事半功倍。
本章的编写目的是帮助读者构建一个“高效”的Hadoop源代码学习环境,包括Hadoop源代码阅读环境、Hadoop使用环境和Hadoop源代码编译调试环境等,这主要涉及如下内容:
在Linux和Windows环境下搭建Hadoop源代码阅读环境的方法;
Hadoop的基本使用方法,主要包括Hadoop Shell和Eclipse插件两种工具的使用;
Hadoop源代码编译和调试方法,其中,调试方法包括使用Eclipse远程调试和打印调试日志两种。
考虑到大部分用户在单机上学习Hadoop源代码,所以本章内容均是基于单机环境的。本章大部分内容较为基础,已经掌握这部分内容的读者可以直接跳过本章。
1.1 准备源代码学习环境
对于大部分公司而言,实验和生产环境中的服务器集群部署的都是Linux操作系统。考虑到Linux在服务器市场中具有统治地位,Hadoop从一开始便是基于Linux操作系统开发的,因而对Linux有着非常完美的支持。尽管Hadoop采用了具有跨平台特性的Java作为主要编程语言,但由于它的一些功能实现用到了Linux操作系统相关的技术,因而对其他平台的支持不够友好,且没有进行过严格测试。换句话说,其他操作系统(如Windows)仅可作为开发环境,不可作为生产环境。对于学习源代码而言,操作系统的选择显得不是非常重要,读者可根据个人爱好自行决定。本节以64 bit Linux和32 bit Windows两种操作系统为例,介绍如何在单机上准备Hadoop源代码学习环境。

内容简介
《Hadoop技术内幕:深入解析MapReduce架构设计与实现原理》内容简介:“Hadoop技术内幕”共两册,分别从源代码的角度对“Common+HDFS”和“MapReduce的架构设计和实现原理”进行了极为详细的分析。《Hadoop技术内幕:深入解析MapReduce架构设计与实现原理》由Hadoop领域资深的实践者亲自执笔,首先介绍了MapReduce的设计理念和编程模型,然后从源代码的角度深入分析了RPC框架、客户端、JobTracker、TaskTracker和Task等MapReduce运行时环境的架构设计与实现原理,最后从实际应用的角度深入讲解了Hadoop的性能优化、安全机制、多用户作业调度器和下一代MapReduce框架等高级主题和内容。《Hadoop技术内幕:深入解析MapReduce架构设计与实现原理》适合Hadoop的二次开发人员、应用开发工程师、运维工程师阅读。

购买书籍

当当网购书 京东购书 卓越购书

PDF电子书下载地址

相关书籍

搜索更多