一、Spark简介
Spark 是一个用来实现快速而通用的集群计算的平台,官网上的解释是:Apache Spark™是用于大规模数据处理的统一分析引擎。 Spark 适用于各种各样原先需要多种不同的分布式平台的场景,包括批处理、迭代算法、交互式查询、流处理等,对外提供了十分丰富的API接口, 除了提供基于 Python、 Java、 Scala 和 SQL 的简单易用的API 以及内建的丰富的程序库以外, Spark 还能和其他大数据工具密切配合使用。例如,Spark 可以运行在 Hadoop 集群上,访问包括 Cassandra 在内的任意 Hadoop 数据源。
Spark最大的特点是基于内存的,数据处理速度十分快,号称是100倍于MapReduce处理数据速度。同时Spark还是一个大一统的软件栈,其构成如下图所示:
二、Spark Core简介
Spark Core 实现了 Spark 的基本功能,包含任务调度、内存管理、错误恢复、与存储系统及Spark数据分析等模块。 Spark Core 中还包含了对弹性分布式数据集(resilient distributed dataset,简称 RDD) 的 API 定义。 RDD 表示分布在多个计算节点上可以并行操作的元素集合,是Spark 主要的编程抽象。 Spark Core 提供了创建和操作这些集合的多个 API。
Spark基本架构:
三、Spark SQL简介
Spark SQL 是 Spark 用来操作结构化数据的程序包。通过 Spark SQL,我们可以使用 SQL或者 Apache Hive 版本的 SQL 方言(HQL)来查询数据。Spark SQL 支持多种数据源,比如 Hive 表、 Parquet 以及 JSON 等。除了为 Spark 提供了一个 SQL 接口, Spark SQL 还支持开发者将 SQL 和传统的 RDD 编程的数据操作方式相结合,不论是使用 Python、 Java 还是 Scala, 开发者都可以在单个的应用中同时使用 SQL 和复杂的数据分析。
四、Spark Streaming
Spark Streaming 是 Spark 提供的对实时数据进行流式计算的组件。比如生产环境中的网页服务器日志, 或是网络服务中用户提交的状态更新组成的消息队列,都是数据流。 SparkStreaming 提供了用来操作数据流的 API, 并且与 Spark Core 中的 RDD API 高度对应。这样一来,程序员编写应用时的学习门槛就得以降低,不论是操作内存或硬盘中的数据,还是操作实时数据流, 程序员都更能应对自如。从底层设计来看, Spark Streaming 支持与Spark Core 同级别的容错性、吞吐量以及可伸缩性。
五、Spark MLlib
Spark 中还包含一个提供常见的机器学习(ML)功能的程序库,叫作 MLlib。 MLlib 提供了很多种机器学习算法, 包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据导入等额外的支持功能。 MLlib 还提供了一些更底层的机器学习原语,包括一个通用的梯度下降优化算法。所有这些方法都被设计为可以在集群上轻松伸缩的架构。
六、GraphX
GraphX 是用来操作图(比如社交网络的朋友关系图)的程序库,可以进行并行的图计算。与 Spark Streaming 和 Spark SQL 类似,GraphX 也扩展了 Spark 的 RDD API,能用来创建一个顶点和边都包含任意属性的有向图。 GraphX 还支持针对图的各种操作(比如进行图分割的 subgraph 和操作所有顶点的 mapVertices),以及一些常用图算法(比如 PageRank和三角计数)。
七、集群管理器
就底层而言, Spark 设计为可以高效地在一个计算节点到数千个计算节点之间伸缩计算。为了实现这样的要求, 同时获得最大灵活性, Spark 支持在各种集群管理器(cluster manager) 上运行, 包括 Hadoop YARN、 Apache Mesos,以及 Spark 自带的一个简易调度器,叫作独立调度器。 如果要在没有预装任何集群管理器的机器上安装 Spark,那么 Spark自带的独立调度器可以让你轻松入门; 而如果已经有了一个装有 Hadoop YARN 或 Mesos的集群,通过 Spark 对这些集群管理器的支持,你的应用也同样能运行在这些集群上。会详细探讨这些不同的选项以及如何选择合适的集群管理器。
八、Spark的用户和用途
Spark 是一个用于集群计算的通用计算框架,因此被用于各种各样的应用程序。两大目标读者人群: 数据科学家和工程师。仔细分析这两个群体以及他们使用 Spark 的方式,我们不难发现这两个群体使用 Spark 的典型用例并不一致,不过我们可以把这些用例大致分为两类——数据科学应用和数据处理应用。