理论教育 Spark简介与特点

Spark简介与特点

时间:2023-06-14 理论教育 版权反馈
【摘要】:Spark 能够在内存中完成运算,除非特殊要求中间结果均保存在内存中,减少磁盘IO 操作。Spark 的作业都是由进程内部的线程池执行,能极大减少JVM 开销。Spark 能够使用Yarn 或Mesos 作为资源管理框架。对文件系统的读取和写入功能是Spark 自己提供的,借助Mesos 分布式实现。

Spark简介与特点

MapReduce 通过map 函数和reduce 函数简化了分布式编程开发,但是要处理复杂的逻辑却要编写大量的代码。Spark 是基于Scala 实现,专为大规模数据处理而设计的快速通用的计算引擎,Spark 和Scala 能够紧密集成,Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。

Spark 是基于MapReduce 算法实现的分布式计算,拥有MapReduce 所具有的优点;但不同于MapReduce 的是中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark 能更好地适用于数据挖掘与机器学习等领域

一、Spark 的特点

1.高效性

(1)内存运算。Spark 能够在内存中完成运算,除非特殊要求中间结果均保存在内存中,减少磁盘IO 操作。根据Spark 官方提供的数据,如果数据由磁盘读取,速度是Hadoop MapReduce 的10 倍以上,如果数据从内存中读取,速度可以高达100多倍。

(2)Lazy 机制。Spark 运算不是对每一步操作都要计算出结果,而是在执行求和、输出等操作时才会将之前的操作合并执行,在处理大规模数据时,能够极大减少运算量。

(3)线程操作。Spark 的作业都是由进程内部的线程池执行,能极大减少JVM 开销。

2.通用性

(1)Spark 既使用Hadoop HDFS 完成数据存储,也可以使用HBase 等作为数据源。

(2)Spark 能够使用Yarn 或Mesos 作为资源管理框架

(3)Spark 不仅支持Scala 编写应用程序,而且支持Java,Python 和R 语言进行编写。

3.可靠性

Spark 引进了弹性分布式数据集RDD(Resilent Distributed Datasets),这些集合是弹性的,如果数据集一部分丢失,则可以根据Lineage(血统)对它们进行重建。

二、Spark 与Hadoop 的对比

1. MapReduce 模型

作为一个分布式计算框架,Spark 是在借鉴了MapReduce 基础之上发展而来的,继承了其分布式并行计算的优点并改进了MapReduce 明显的缺陷,提升了执行效率。从血统上来说,它们都同属性MapReduce 并行编程模型。

2.函数式编程

Spark 是由Scala 语言开发的,因此其支持函数式编程,这样就可以使其代码简洁;而MapReduce 框架采用Java 语言开发,目前还暂不支持函数式编程。

3.数据存储

Hadoop 不仅有MapReduce 计算模型,还提供了HDFS 存储机制,Spark 则关注于计算问题,没有提供数据存储的解决方案,Spark 可以使用HDFS、Amazon S3、HBase 等作为数据的输入源。

4.操作灵活

MapReduce 只提供了Map 和Reduce 两种操作,而Spark 提供了大量的数据集操作,如map,flatMap,filter,groupByKey,reduceByKey,union,join 和sort 等。

Spark 还有一种交互模式,开发人员和用户都可以获得查询和其他操作的即时反馈;MapReduce 没有交互模式。另外Spark 各个处理节点之间的通信模型不再像MapReduce只有Shuffle 一种模式,Spark 可以命名、物化、控制中间结果的存储、分区等。

三、Spark 的应用场景(www.daowen.com)

Spark 作为一种通用的分布式计算平台,主要应用在以下几个地方:

1.多次操作特定数据集的应用场合

Spark 是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小。

2.粗粒度更新状态的应用

由于RDD 的特性,Spark 适用于增量修改的应用模型,不适用那种待分析数据频繁变动,要求实时统计分析的场景,例如Web 服务的存储或者是增量的Web 爬虫和索引

三、Spark 生态圈

Spark 生态圈包含了Spark Core(内存计算框架)、Spark SQL(类SQL 查询)、Spark Streaming(流式处理)、MLLib(机器学习)和GraphX(图计算)等组件,如图8-1 所示:

图8-1 Spark 生态圈

1. Spark Core

Spark Core 是整个Spark 的核心组件,是一个分布式编程框架。Spark Core 将数据在分布式环境下分区,然后将作业转化为有向无环图(DAG),并分阶段进行DAG的调度和任务的分布式并行处理

2. Spark Streaming

Spark Streaming 基于微批量方式的计算和处理,可以用于处理实时的流数据。通过将流数据按指定时间片累积为RDD(通过Dstream 转换得到),然后将每个RDD进行批处理,进而实现大规模的流数据处理。

3. Spark SQL

Spark SQL 提供在大数据上的类SQL 查询功能,类似于Hive 的角色。用户还可以用Spark SQL 对不同数据格式,如JSON,Parquet 以及数据库等执行ETL,将其转换然后执行查询。

4. GraphX

GraphX 是一个分布式图处理框架,它是基于Spark 平台提供对图计算和图挖掘简洁易用的接口,极大的方便了对分布式图处理的需求。

5. MLLib

MLLib 是一个可扩展的Spark 机器学习库,由通用的学习算法和工具组成,包括二元分类、线性回归、聚类、协同过滤、梯度下降以及底层优化原语。

6. Mesos 和Yarn

Mesos 和Yarn 是资源管理框架,Mesos 会对资源和任务进行隔离,并实现高效的资源任务调度,是Spark 默认的资源管理器。

7. HDFS 和S3

Spark 支持两种分布式存储系统:HDFS 和S3。对文件系统的读取和写入功能是Spark 自己提供的,借助Mesos 分布式实现。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈