目录
1 Spark是什么
Spark是一个用来实现快速而通用的集群计算的平台。Spark扩展了广泛使用的MapReduce计算模型,并且能够在内存中进行计算,因而速度更快。Spark所提供的接口非常丰富提供基于python, java, scala和SQL的简单易用的API以及内建的丰富的程序库。
Spark的核心是一个对由很多计算任务组成的,运行在多个工作机器或者是一个计算集群上的应用进行调度,分发以及监控的计算引擎。
2 核心组件
Spark的各个组件如下图所示:
2.1 Spark Core
实现基本功能,包含任务调度,内存管理,错误恢复,与存储系统交互等模块。Spark Core中还包含了对弹性分布式数据集 ( resilient distributed dataset, 简称RDD) 的API定义。RDD表示分布在多个计算节点上可以并行操作的元素集合,是Spark主要的编程抽象,Spark Core 提供了创建和操作这些集合的多个API。
2.2 Spark SQL
Spark SQL是Spark用来操作结构化数据的程序包。通过Spark SQL,可以使用SQL或者Apache Hive版本的SQL方言 (HQL) 来查询数据。Spark SQL还支持开发者将SQL和传统的RDD编程的数据操作方式相结合进行数据分析。
2.3 Spark Streaming
Spark Streaming是Spark提供的对实时数据进行流式计算的组件。Spark Streaming 提供了用来操作数据流的API,并且与Spark Core中的RDD API高度对应。因此,程序员编写应用时,不论是操作内存或是硬盘中的数据,还是操作实时流数据,都更能应对自如。
2.4 MLib
MLib是Spark中包含的一个提供常见的机器学习功能的程序库。MLlib提供了很多种机器学习算法,包括分类,回归,聚类,协同过滤等。还提供了模型评估,数据导入等额外的支持功能。
2.5 GraphX
GraphX是用来操作图 (比如社交网络的朋友关系图)的程序库,可以进行并行的图计算。GraphX也扩展了Spark的RDD API,能用来创建一个顶点和边包含任意属性的有向图。支持对图的各种操作(图的分割和操作所有的顶点)以及常用图算法(比如PageRank等)。
2.6 集群管理器
底层而言,Spark设计为可以高效地在一个计算节点到数千个计算节点之间伸缩计算。Spark支持在各种集群管理器上运行,包括Hadoop YARN、Apache Mesos,以及Spark自带的一个简易调度器,叫做独立调度器。
3 Spark简史
Spark是由一个强大而活跃的开源社区开发和维护的,社区中的开发者们来自许许多多不同的机构。2009年,Spark项目正式诞生,其后不久,相比于MapReduce, Spark在某些任务上已经获得几十倍的性能提升。Saprk最早在2010年3月开源,并且在2013年6月交给了Apache基金会,现在已经成了Apache开源基金会的顶级项目。