Spark,一种快速数据分析替代方案.pdf
Spark,一种快速数据分析替代方案
虽然Hadoop在分布式数据分析方面备受关注,但是仍有一些替代产品提供了优于典型Hadoop
平台的令人关注的优势。Spark是一种可扩展的数据分析平台,它整合了内存计算的基元,因此,相
对于Hadoop的集群存储方法,它在性能方面更具优势。Spark是在Scala语言中实现的,并且利
用了该语言,为数据处理提供了独一无二的环境。了解Spark的集群计算方法以及它与Hadoop的
不同之处。
Spark是一种与Hadoop相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有
用的不同之处使Spark在某些工作负载方面表现得更加优越,换句话说,Spark启用了内存分布数
据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。
Spark是在Scala语言中实现的,它将Scala用作其应用程序框架。与Hadoop不同,Spark和
Scala能够紧密集成,其中的Scala可以像操作本地集合对象一样轻松地操作分布式数据集。
尽管创建Spark是为了支持分布式数据集上的迭代作业,但是实际上它是对Hadoop的补充,
可以在Hadoo文件系统中并行运行。通过名为Mesos的第三方集群框架可以支持此行为。Spark由
加州大学伯克利分校AMP实验室(Algorithms,Machines,andPeopleLab)开发,可用来构建大
型的、低延迟的数据分析应用程序。
Spark集群计算架构
虽然Spark与Hadoop有相似之处,但它提供了具有有用差异的一个新的集群计算框架。首先,
Spark是为集群计算中的特定类型的工作负载而设计,即那些在并行操作之间重用工作数据集(比如
机器学习算法)的工作负载。为了优化这些类型的工作负载,Spark引进了内存集群计算的概念,可
在内存集群计算中将数据集缓存在内存中,以缩短访问延迟。
Spark还引进了名为弹性分布式数据集(RDD)的抽象。RDD是分布在一组节点中的只读对象集
合。这些集合是弹性的,如果数据集一部分丢失,则可以对它们进行重建。重建部分数据集的过程依
赖于容错机制,该机制可以维护“血统”(即充许基于数据衍生过程重建部分数据集的信息)。RDD
被表示为一个Scala对象,并且可以从文件中创建它;一个并行化的切片(遍布于节点之间);另
一个RDD的转换形式;并且最终会彻底改变现有RDD的持久性,比如请求缓存在内存中。
Spark中的应用程序称为驱动程序,这些驱动程序可实现在单一节点上执行的操作或在一组节点
上并行执行的操作。与Hadoop类似,Spark支持单节点集群或多节点集群。对于多节点操作,Spark
依赖于Mesos集群管理器。Mesos为分布式应用程序的资源共享和隔离提供了一个有效平台(参见
图1)。该设置充许Spark与Hadoop共存于节点的一个共享池中。
图1.Spark依赖于Mesos集群管理器实现资源共享和隔离。
Spark编程模式
驱动程序可以在数据集上执行两种类型的操作:动作和转换。动作会在数据集上执行一个计算,
并向驱动程序返回一个值;而转换会从现有数据集中创建一个新的数据集。动作的示例包括执行一
个Reduce操作(使用函数)以及在数据集上进行迭代(在每个元素上运行一个函数,类似于Map操
作)。转换示例包括Map操作和Cache操作(它请求新的数据集存储在内存中)。
我们随后就会看看这两个操作的示例,但是,让我们先来了解一下Scala语言。
Scala简
Scala可能是Internet上不为人知的秘密之一。您可以在一些最繁忙的Internet网站(如
Twitter、LinkedIn和Foursquare,Foursquare使用了名为Lift的Web应用程序框架)的制作
过程中看到Scala的身影。还有证据表明,许多金融机构已开始关注Scala的性能(比如EDF
Trading公司将Scala用于衍生产品定价)。
Scala是一种多范式语言,它以一种流畅的、让人感到舒服的方法支持与命令式、函数式和面向
对象的语言相关的语言特性。从面向对象的角度来看,Scala中的每个值都是一个对象。同样,从函
数观点来看,每个函数都是一