Spark是一个快速、通用的大规模数据处理与计算框架,于2009年由Matei Zaharia在加州大学伯克利分校的AMPLab进行博士研究期间提出。与传统的数据处理框架不一样,Spark通过在内存中缓存数据集以及启动并行计算任务时的低延迟和低系统开销来实现高性能,能够为一些应用程序带来100倍的性能提升。Spark目前支持Java、Scala、Python和R等编程语言的接口供用户进行调度。
Spark的核心是建立在统一的抽象弹性分布式数据集(Resilient Distributed Datasets,RDD)基础上的,RDD允许开发人员在大型集群上执行基于内存的计算,同时屏蔽了Spark底层对数据的复杂抽象和处理,为用户提供了一系列方便、灵活的数据转换与求值方法。
为了针对不同的运算场景,Spark专门设计了不同的模块组件来提供支持,如图1-24所示。
● Spark SQL:Spark SQL是Spark中用于处理结构化数据的组件。
● Spark Streaming:Spark Streaming是Spark中用于处理实时流数据的组件。
● MLlib:MLlib是Spark中集成了常见的机器学习模型的组件,包括SVM、逻辑斯蒂回归、随机森林等模型。
● GraphX:GraphX是Spark提供图计算和并行图计算功能的组件。
图1-24 Spark软件栈
作为一个开源集群运算框架,Spark共支持4种集群运行模式:Standalone、基于Apahce Mesos、基于Hadoop YARN以及基于Kubernetes。Spark的整体架构如图1-25所示。每个Spark应用由驱动器程序(driver program)来发起各种并行操作,并通过其中的SparkContext对象进行协调。同时,SparkContext对象可以连接上述各种集群管理器,然后对连接的集群管理器进行整体的资源调度。连接成功之后,Spark会对工作节点中的执行器(executor)进行管理,将应用代码及相关资料信息发送到执行器,最终将任务(task)分配到每个执行器中执行。
图1-25 Spark整体架构
在过去的几年中,Spark发展极其迅猛,它一直在促进着Hadoop和大数据生态系统的演变,以便更好地支持当今大时代下的大数据分析需求。可以看到,Spark正在以前所未有的力量帮助广大的开发者、数据科学家以及企业更好地应对大数据处理方面的挑战。