概述

Spark 作为新一代的大数据处理引擎,使大数据处理和机器学习又向前迈向了一步。Spark 最初是由加州大学伯克利分校AMP实验室(UC Berkeley AMP lab) 所开发的研究性项目。在2013年6月进入Apache 成为孵化项目,8个月后成为Apache顶级项目。

Spark 是一个高度抽象的大数据引擎,它本身使用Scala 语言实现(Scala是一种面向对象,函数式编程语言),对外提供了更高级的API( Java、Scala、 Python 和 R)供开发者使用。同时他也提供了更高级的一组工具,包括用于结构化数据处理的Spark SQL, 用于机器学习的MLlib, 用于图处理的GraphX,还有基于流式处理的Spark Streaming.  Spark 本身具有运行速度快、易用性好、通用性、随处运行的特点。据官方介绍如果数据由磁盘读取,速度是Hadoop MapReduce的10倍以上,如果数据从内存中读取,速度可以高达100多倍。

2

Spark 框架

Spark 在设计时提出了新的RDD概念(Resilient Distributed Datasets),中文叫做弹性分布式数据集,Spark 生态圈中的应用都是基于RDD构建的,RDD 本身具有一组定义好的操作。RDD的操作主要分为两类:转换(transformation)和动作(action)。两类操作的主要区别是,前者接受RDD并返回一个新的RDD,而后者是接受RDD但是返回非RDD。

Spark 在RDD 上做了很好的封装,能够很好的支持如下几类模型:

迭代算法: 对于现在常用的一些机器学习和图处理算法模型中,有很多算法模型需要进行迭代式的运算,RDD通过自己的封装可以很好的支持这些算法实现

关系型查询:如果采用MapReduce的方式进行关系型数据的复杂查询,那么我们需要花费很多时间去多Job数据流转与交换之间的逻辑,更甚至需要写很多临时文件。有了RDD之后可以更加方便将数据缓存在内存中减少上述操作的复杂性。如果内存放不下则会序列会到硬盘上。而这些操作对于开发者来说是透明的。

流处理:Spark 利用离散数据流和RDD相结合,形成了一套流数据处理模型。在这种模型下可以方便的利用已经有的算法库对新进入的数据进行实时处理。

 

 Spark 子系统

Spark Core : 基于RDD提供了丰富的操作接口,利用DAG 进行统一任务划分。使得Spark更加灵活能够处理更多批处理场景

Spark SQL: 兼容Hive的接口,提供了读写数据库的接口。

Spark Streaming: 流式计算,利用Spark的调度框架,可以很好的支持流式处理。目前已经支持从Kafka、Flume、Twiter、TCP Socket 读取数据。

GraphX: 基于Spark的图计算框架,兼容Pregel 和 GraphLab接口,增强了图构建以及图转换功能

MLib: 机器学习库,目前已经支持常用的分类算法、聚类算法、推荐算法

SparkR: SparkR 是一个包,它提供了一个轻量级的R语言的分布式实现。支持filter、selection、aggregation.

1

 

与Hadoop的兼容性

Spark 生态系统兼容Hadoop生态系统。这个特性非常好。Hadoop用户可以非常容易的迁移到Spark系统中,完美的支持HDFS和YARN 等其他组件。反过来说Spark 程序可以轻松的在Hadoop集群上运行。

 

1

 

与Hadoop对比

Hadoop 的MapReduce 存在一些局限性,一个Job只有Map和Reduce两个处理当我们编写多次迭代算法时就显得有些力不从心了。为了让后续作业能够使用上一个处理的数据必须将数据存储到硬盘上。而Spark 可以很方便的解决上述两个问题,同时保证处理性能。

Hadoop MR Spark
中间数据 需要落盘 可放在内存中
迭代处理 编写繁琐 编写简单
编程模型 只有Map和Redcue两个处理 模型类型丰富(Map,Join,Partition,Redcue,Group …)
开发难度 需要自己实现代码较多 简单明了
机器学习库 很少 丰富,原生支持

小结

Spark 在架构上使用了更为抽象的分布式弹性数据集(Resilient Distributed Datasets),通过这个数据集可以方便对数据抽象处理,同时每个RDD本身有自己的Lineage数据信息,当发生异常丢失数据时,可以通过这些信息进行重算找回丢失的数据。Spark 本身支持多种运行模式,可以方便的与现有的YARN 和 Mesos 集群进行整合。Spark 有强大的社区支持,目前已经有Cloudera、Hortonworks、MapR 等公司相继宣布支持Spark 软件栈。

参考资料:

【1】Spark 官方文档   http://spark.apache.org/

【2】 Hadoop 官方文档 http://hadoop.apache.org/

【3】http://www.cnblogs.com/bourneli/p/4394271.html