内容简介
本书以Spark 0.9版本为基础进行编写,是一本全面介绍Spark及Spark生态圈相关技术的书籍,是国内本深入介绍 Spark 原理和架构的技术书籍。主要内容有 Spark 基础功能介绍及内部重要模块分析,包括部署模式、调度框架、存储管理以及应用监控;同时也详细介绍了 Spark 生态圈中其他的软件和模块,包括 SQL 处理引擎 Shark 和 Spark SQL、流式处理引擎 Spark Streaming、图计算框架 Graphx 以及分布式内存文件系统 Tachyon。本书从概念和原理上对 Spark 核心框架和生态圈做了详细的解读,并对 Spark 的应用现状和未来发展做了一定的介绍,旨在为大数据从业人员和 Spark爱好者提供一个更深入学习的平台。
本书适合任何大数据、Spark 领域的从业人员阅读,同时也为架构师、软件开发工程师和大数据爱好者展现了一个现代大数据框架的架构原理和实现细节。相信通过学习本书,读者能够熟悉和掌握 Spark 这一当前流行的大数据框架,并将其投入到生产实践中去。
目录
第1章 Spark系统概述 15
1.1 大数据处理框架 15
1.2 Spark大数据处理框架 17
1.2.1 RDD表达能力 17
1.2.2 Spark子系统 18
1.3 小结 21
第2章 Spark RDD及编程接口 23
2.1 Spark程序“Hello World” 23
2.2 Spark RDD 26
2.2.1 RDD分区(Partition)27
2.2.2 RDD优先位置(preferredLocations)28
2.2.3 RDD依赖关系(Dependencies)29
2.2.4 RDD分区计算(Compute) 34
2.2.5 RDD分区函数(partitioner)35
2.3 创建操作 39
2.3.1 集合创建操作 39
2.3.2 存储创建操作 40
2.4 转换操作 42
2.4.1 RDD 基本转换操作 42
2.4.2 键值RDD 转换操作 52
2.4.3 再论RDD 依赖关系 59
2.5 控制操作(control operation) 61
2.6 行动操作(action operation) 63
2.6.1 集合标量行动操作 63
2.6.2 存储行动操作 68
2.7 小结 72
第3 章 Spark 运行模式及原理 74
3.1 Spark 运行模式概述 74
3.1.1 Spark 运行模式列表74
3.1.2 Spark 基本工作流程 75
3.1.3 相关基本类 77
3.2 Local 模式 80
3.2.1 部署及程序运行80
3.2.2 内部实现原理 80
3.3 Standalone 模式 81
3.3.1 部署及程序运行 81
3.3.2 内部实现原理 85
3.4 Local-cluster 模式 86
3.4.1 部署及程序运行 86
3.4.2 内部实现原理 86
3.5 Mesos 模式 87
3.5.1 部署及程序运行 87
3.5.2 内部实现原理 88
3.6 Yarn standalone / Yarn cluster 模式 91
3.6.1 部署及程序运行 91
3.6.2 内部实现原理 93
3.7 Yarn Client 模式 94
3.7.1 部署及程序运行 94
3.7.2 内部实现原理 95
3.8 各种模式的实现细节比较 96
3.8.1 环境变量的传递 97
3.8.2 Jar 包和各种依赖文件的分发 99
3.8.3 任务管理和序列化 101
3.8.4 用户参数配置 102
3.8.5 用户及权限控制 103
3.9 Spark 1.0 版本之后的变化 104
3.10 小结 105
第4 章 Spark 调度管理原理 106
4.1 Spark 作业调度管理概述 106
4.2 Spark 调度相关基本概念 107
4.3 作业调度模块顶层逻辑概述 108
4.4 作业调度具体工作流程 112
4.4.1 调度阶段的拆分113
4.4.2 调度阶段的提交 117
4.4.3 任务集的提交 119
4.4.4 完成状态的监控 119
4.4.5 任务结果的获取 121
4.5 任务集管理模块详解 122
4.6 调度池和调度模式分析 124
4.7 其他调度相关内容 126
4.7.1 Spark 应用之间的调度关系 126
4.7.2 调度过程中的数据本地性问题 127
4.8 小结 127
第5章 Spark 的存储管理 128
5.1 存储管理模块整体架构 128
5.1.1 通信层架构 129
5.1.2 通信层消息传递 132
5.1.3 注册存储管理模块 133
5.1.4 存储层架构 134
5.1.5 数据块 (Block) 136
5.2 RDD 持久化 137
5.2.1 RDD 分区和数据块的关系 137
5.2.2 内存缓存 138
5.2.3 磁盘缓存 139
5.2.4 持久化选项 141
5.2.5 如何选择不同的持久化选项 142
5.3 Shuffle 数据持久化 143
5.4 广播(Broadcast)变量持久化 146
5.5 小结 146
第6 章 Spark 监控管理 148
6.1 UI 管理 148
6.1.1 实时UI 管理 149
6.1.2 历史UI 管理 154
6.2 Metrics 管理 155
6.2.1 Metrics 系统架构 156
6.2.2 Metrics 系统配置 157
6.2.3 输入源(Metrics Source)介绍 159
6.2.4 输出方式(Metrics Sink)介绍 160
6.3 小结 162
第7 章 Shark 架构与安装配置 163
7.1 Shark 架构浅析 164
7.2 Hive/Shark 各功能组件对比分析 165
7.2.1 metaStore 165
摘要与插图
序2009年的时候,Netflix公司举办了一个叫作Netflix Prize的算法比赛。这个比赛匿名公布了Netflix五十万用户对近两万部电影的一亿个评分数据,希望参赛者能够开发出更好的算法,以提高系统的质量。这个比赛的奖金有一百万美元。一百万美元看似很多,但是和一个更好的算法给Netflix带来的效益相比,实则九牛一毛。
高昂的奖金和Netflix提供的真实数据吸引了不少的参赛者,其中也包括了来自加州大学伯克利分校(UC Berkeley)的博士生Lester Mackey。Lester师从机器学习领域泰斗Michael Jordan,在一个叫作AMPLab的大数据实验室里进行博士研究。AMPLab和大多数学术界实验室不同的地方在于实验室内有多个教授和他们带领的学生一起合作。这些研究人员来自不同的领域,包括机器学习、数据库、计算机网络、分布式系统等。当时,要想提高算法研究迭代的效率,需要利用多台机器的分布式建模。在尝试了当时业界行的Hadoop MapReduce后,Lester发现自己的时间并不是花在提高算法效率上,而是耗费在MapReduce的编程模型和低效的执行模式上。这个时候,他向实验室内部的另外一名进行分布式系统研究的学生Matei Zaharia求助。
当时年纪轻轻的Matei在业界已经小有名望。他在雅虎和Facebook实习期间做了很多Hadoop早期的奠基工作,包括现今Hadoop系统内应用的fair scheduler调度算法。在和Lester的思维碰撞中,Matei总结了Hadoop MR的不足,开始设计了第一个版本的Spark。这个版本为了Lester定制,只有几百行的代码,使得Lester可以率地进行分布式机器学习建模。
Lester所在的The Ensemble团队和BellKor's Pragmatic Chaos设计了在效率上并列第一的算法,可惜因为晚了20分钟提交,与一百万美元奖金失之交臂。5年之后,Lester和Matei都变成了学术界和业界杰出的人物。Lester成为了斯坦福大学计算机系的教授,带领着自己的学生攻克一个又一个机器学习和统计的难题。Matei成为了麻省理工计算机系的教授,也是Databricks公司的CTO。
2009年之后的4年里面,AMPLab以Spark为基础展开了很多不同的学术研究项目,其中包括了我参与和主导的Shark和GraphX,还有Spark Streaming、MLlib等。4年里随着Hadoop的发展,Spark也逐渐从一个纯学术研究项目发展到了开始有业界敢于吃螃蟹的用户。
2013年,包括Matei和我在内的Spark核心人员共同创立了Databricks公司,立志于提高Spark的发展速度。过去两年,Spark的发展超越了我们所有人的想象。一年半以前Spark还是一个连监控界面都不存在的系统,很难放进生产线部署。而一年半后的今天,它已经变成了整个大数据生态圈和Apache Software Foundation内跃的项目,活跃程度远远超出了曾经Spark只能望其项背的Hadoop。
在从Hadoop转向Spark的道路上,我个人感觉国内的速度甚至超越了国外的社区。一年以前我第一次在中国的大数据会议上宣讲Spark,当时台下的大多数人对这个新的项目还有很大的质疑,认为其只会昙花一现。一年之后,Spark的每个新版本中都有不少华人贡献的代码,国内很多高科技和互联网公司也都有了Spark的生产作业,不少用户直接减少了在Hadoop MapReduce上的投资,把新的项目都转移到了Spark上。
今天正好是Databricks公司成立一年半,也是Spark 1.2版本第一个release candidate发布的日期。Spark的高速发展导致了中文信息的脱节。这本书深入浅出地介绍了Spark和Spark上多个重要计算框架,希望它的问世可以更好地在大中华地区普及Spark,增进华人Spark社区的发展。
辛湜 Reynold Xin
2014年11月30号
Berkeley, CA