内容简介
这是一本依据技术版本,系统、全面、详细讲解Spark的著作,作者结合自己在微软和IBM的实践经验和对Spark源代码的研究撰写而成。先从技术层面讲解了Spark的体系结构、工作机制、安装与部署、开发环境搭建、计算模型、Benchmark、BDAS等内容;然后从应用角度讲解了一些简单的、有代表性的案例;对Spark的性能优化进行了探讨。
目录
Contents?目 录
前 言
第1章 Spark简介 1
1.1 Spark是什么 1
1.2 Spark生态系统BDAS 4
1.3 Spark架构 6
1.4 Spark分布式架构与单机多核
架构的异同 9
1.5 Spark的企业级应用 10
1.5.1 Spark在Amazon中的应用 11
1.5.2 Spark在Yahoo!的应用 15
1.5.3 Spark在西班牙电信的应用 17
1.5.4 Spark在淘宝的应用 18
1.6 本章小结 20
第2章 Spark集群的安装与部署 21
2.1 Spark的安装与部署 21
2.1.1 在Linux集群上安装与配置Spark 21
2.1.2 在Windows上安装与配置Spark 30
2.2 Spark集群初试 33
2.3 本章小结 35
第3章 Spark计算模型 36
3.1 Spark程序模型 36
3.2 弹性分布式数据集 37
3.2.1 RDD简介 38
3.2.2 RDD与分布式共享内存的异同 38
3.2.3 Spark的数据存储 39
3.3 Spark算子分类及功能 41
3.3.1 Value型Transformation算子 42
3.3.2 Key-Value型Transformation算子 49
3.3.3 Actions算子 53
3.4 本章小结 59
第4章 Spark工作机制详解 60
4.1 Spark应用执行机制 60
4.1.1 Spark执行机制总览 60
4.1.2 Spark应用的概念 62
4.1.3 应用提交与执行方式 63
4.2 Spark调度与任务分配模块 65
4.2.1 Spark应用程序之间的调度 66
4.2.2 Spark应用程序内Job的调度 67
4.2.3 Stage和TaskSetManager调度方式 72
4.2.4 Task调度 74
4.3 Spark I/O机制 77
4.3.1 序列化 77
4.3.2 压缩 78
4.3.3 Spark块管理 80
4.4 Spark通信模块 93
4.4.1 通信框架AKKA 94
4.4.2 Client、Master和Worker间的通信 95
4.5 容错机制 104
4.5.1 Lineage机制 104
4.5.2 Checkpoint机制 108
4.6 Shuffle机制 110
4.7 本章小结 119
第5章 Spark开发环境配置及流程 120
5.1 Spark应用开发环境配置 120
5.1.1 使用Intellij开发Spark程序 120
5.1.2 使用Eclipse开发Spark程序 125
5.1.3 使用SBT构建Spark程序 129
5.1.4 使用Spark Shell开发运行Spark程序 130
5.2 远程调试Spark程序 130
5.3 Spark编译 132
5.4 配置Spark源码阅读环境 135
5.5 本章小结 135
第6章 Spark编程实战 136
6.1 WordCount 136
6.2 Top K 138
6.3 中位数 140
6.4 倒排索引 141
6.5 Countonce 143
6.6 倾斜连接 144
6.7 股票趋势预测 146
6.8 本章小结 153
第7章 Benchmark使用详解 154
7.1 Benchmark简介 154
7.1.1 Intel Hibench与Berkeley BigDataBench 155
7.1.2 Hadoop GridMix 157
7.1.3 Bigbench、BigDataBenchmark与TPC-DS 158
7.1.4 其他Benchmark 161
7.2 Benchmark的组成 162
7.2.1 数据集 162
7.2.2 工作负载 163
7.2.3 度量指标 167
7.3 Benchmark的使用 168
7.3.1 使用Hibench 168
7.3.2 使用TPC-DS 170
7.3.3 使用BigDataBench &nb
摘要与插图
第1章Spark 简 介
本章主要介绍Spark大数据计算框架、架构、计算模型和数据管理策略及Spark在工业界的应用。围绕Spark的BDAS 项目及其子项目进行了简要介绍。目前,Spark生态系统已经发展成为一个包含多个子项目的集合,其中包含SparkSQL、Spark Streaming、GraphX、MLlib等子项目,本章只进行简要介绍,后续章节再详细阐述。
1.1 Spark是什么
Spark是基于内存计算的大数据并行计算框架。Spark基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将Spark 部署在大量廉价硬件之上,形成集群。
Spark于2009年诞生于加州大学伯克利分校AMPLab。目前,已经成为Apache软件基金会旗下的开源项目。下面是Spark的发展历程。
1.Spark的历史与发展
2009年:Spark诞生于AMPLab。
2010年:开源。
2013年6月:Apache孵化器项目。
2014年2月:Apache项目。
2014年2月:大数据公司Cloudera宣称加大Spark框架的投入来取代MapReduce。
2014年4月:大数据公司MapR投入Spark阵营,Apache Mahout放弃MapReduce,将使用Spark作为计算引擎。
2014年5月:Pivotal Hadoop集成Spark全栈。
2014年5月30日:Spark 1.0.0发布。
2014年6月:Spark 2014 峰会在旧金山召开。
2014年7月:Hive on Spark项目启动。
目前AMPLab和Databricks负责整个项目的开发维护,很多公司,如Yahoo!、Intel等参与到Spark的开发中,同时很多开源爱好者积极参与Spark的更新与维护。
AMPLab开发以Spark为核心的BDAS时提出的目标是:one stack to rule them all,也就是说在一套软件栈内完成各种大数据分析任务。相对于MapReduce上的批量计算、迭代型计算以及基于Hive的SQL查询,Spark可以带来上百倍的性能提升。目前Spark的生态系统日趋完善,Spark SQL的发布、Hive on Spark项目的启动以及大量大数据公司对Spark全栈的支持,让Spark的数据分析范式更加丰富。
2.Spark之于Hadoop
更准确地说,Spark是一个计算框架,而Hadoop中包含计算框架MapReduce和分布式文件系统HDFS,Hadoop更广泛地说还包括在其生态系统上的其他系统,如Hbase、
Hive等。
Spark是MapReduce的替代方案,而且兼容HDFS、Hive等分布式存储层,可融入Hadoop的生态系统,以弥补缺失MapReduce的不足。
Spark相比Hadoop MapReduce的优势如下。
(1)中间结果输出
基于MapReduce的计算引擎通常会将中间结果输出到磁盘上,进行存储和容错。出于任务管道承接的考虑,当一些查询翻译到MapReduce任务时,往往会产生多个Stage,而这些串联的Stage又依赖于底层文件系统(如HDFS)来存储每一个Stage的输出结果。
Spark将执行模型抽象为通用的有向无环图执行计划(DAG),这可以将多Stage的任务串联或者并行执行,而无须将Stage中间结果输出到HDFS中。类似的引擎包括Dryad、Tez。
(2)数据格式和内存布局
由于MapReduce Schema on Read处理方式会引起较大的处理开销。Spark抽象出分布式内存存储结构弹性分布式数据集RDD,进行数据的存储。RDD能支持粗粒度写操作,但对于读取操作,RDD可以到每条记录,这使得RDD可以用来作为分布式索引。Spark的特性是能够控制数据在不同节点上的分区,用户可以自定义分区策略,如Hash分区等。Shark和Spark SQL在Spark的基础之上实现了列存储和列存储压缩。
(3)执行策略
MapReduce在数据Shuffle之前花费了大量的时间来排序,Spark则可减轻上述问题带来的开销。因为Spark任务在Shuffle中不是所有情景都需要排序,所以支持基于Hash的分布式聚合,调度中采用更为通用的任