文档详情

Spark,一种快速数据分析替代方案.pdf

发布:2025-06-12约1.16万字共9页下载文档
文本预览下载声明

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中的每个值都是一个对象。同样,从函

数观点来看,每个函数都是一

显示全部
相似文档