Spark介绍

文章来自逗点云:https://www.doudianyun.com

1. 目的

首先介绍Spark 编程,了解Spark历史,然后我们将了解为什么需要Spark,涵盖Spark组件的所有基础知识,了解Spark的核心抽象和Spark RDD,最后介绍Spark特性,Spark限制和Spark用例。

2. Spark编程简介

什么是Spark? Spark是一个通用和快速集群计算平台。换句话说,它是一个开源的数据处理引擎。它提供了API,这使数据工作者可以完成流,机器学习或SQL。 而且,它集成了所有大数据工具。例如Spark可以访问任何Hadoop数据源,也可以在Hadoop集群上运行。此外,Spark将Hadoop MapReduce扩展到更高级别,包括迭代查询和流处理。 关于Spark的另一个常见看法是它是Hadoop的扩展。这是不正确的,Spark独立于Hadoop,因为它拥有自己的集群管理系统,它仅将Hadoop用于存储目的。 尽管Spark是用Scala编写的,但仍然用Scala,Java,Python和R语言提供了丰富的API。 最重要的是,比较Spark和Hadoop,它比Hadoop快10到100倍。内存计算下,Spark 比 Hadoop 大约快100倍,在磁盘计算下,大约快10倍。

3. Spark历史

起初,Spark于2009年在加州大学伯克利分校研发实验室推出,现在称为AMPLab。之后,在2010年,它成为BSD许可下的开源软件。Spark于2013年捐赠给Apache软件基金会,然后在2014年,它成为顶级Apache项目。

4. 为什么用Spark

正如我们所知道的那样,在工业界没有一个引擎可以实时和批量处理数据,还要求这个引擎可以在亚秒内响应并执行内存中的处理。

4.1 要执行批处理,我们使用Hadoop MapReduce。

4.2 为了执行流处理,我们使用了Apache Storm / S4。

4.3 对于交互式处理,我们使用Apache Impala / Apache Tez。

4.4 为了执行图形处理,我们使用了Neo4j / Apache Graph。

因此,Spark诞生了,它是一个强大的开源引擎。它提供了交互式处理,实时流处理,图形处理,内存处理以及批处理。这些功能是Hadoop不具备的。

5. Spark组件

Spark组件提供了更快的数据处理以及更简单的开发,现在让我们逐一讨论每个Spark组件。

5.1 Spark Core

Spark Core是Spark的核心。它为所有的Spark应用程序提供了一个通用的执行平台。

5.2 Spark SQL

Spark SQL使用户能够运行SQL / HQL查询。我们可以使用Spark SQL处理结构化以及半结构化数据。此外,它还可以在现有部署中将查询运行速度提高10到100倍。

5.3 Spark Streaming

Spark Streaming具有高吞吐量,强容错能力的实时流处理系统,支持包括Kafka,Flume,HDFS/S3,Twitter,TCP Sockets等数据源。获取数据后可以使用map,reduce,join等函数进行处理,处理结果存储到文件系统,数据库或者在仪表盘上展示。

5.4 Spark MLlib

机器学习库提供了高质量的算法和开发效率,让机器学习更加容易,它是数据科学家最热门的选择,由于它能够进行内存数据处理,因此可以大大提高迭代算法的性能。

5.5 Spark GraphX

Spark GraphX是构建在Spark之上的图形计算引擎,可以处理大规模的图形数据。

5.6 SparkR

R是遵循GNU协议的一款开源、免费的软件,广泛应用于统计计算和统计制图,但是它只能单机运行,分析小型数据集。SparkR允许数据科学家分析大型数据集,并通过R shell交互式地在SparkR上运行作业。

6. 弹性分布式数据集 – RDD

Spark的关键抽象是RDD,RDD是弹性分布式数据集(Resilient Distributed Dataset)的首字母缩略词。它是Spark中数据的基本单位,是跨集群节点的分布式集合,执行并行操作。Spark RDD本质上是不可改变的,它可以通过转换现有的RDD来生成新的RDD

6.1 如何创建Spark RDD

有3种方法来创建Spark RDD

6.1.1 并行集合

通过调用并行化方法,我们可以创建并行化的集合。

6.1.2 外部数据集

可以通过调用textFile等方法来创建Spark RDD。因此,这种方法会获取文件的URL并将其作为行的集合读取。

6.1.3 现有的RDD

我们可以通过对现有的RDD进行转换操作来创建新的RDD。

6.2 Spark RDD的操作

Spark RDD支持两种类型的操作:

6.2.1 转换操作 – Transformation

它从现有的RDD创建一个新的RDD。

6.2.2 行动操作 – Action

触发Spark提交作业并将最终结果返回给驱动程序或将其写入外部存储。

6.3 Spark RDD的特点

RDD有很多特点,例如:

6.3.1 内存计算

通过将数据保存在内存中,可以将性能提高一个数量级。

6.3.2 延迟计算

RDD内部的数据不会立即计算,只有在某个动作触发所有更改或执行计算之后才开始计算。

6.3.3 容错

如果任何工作节点出现故障,通过使用血统(lineage),我们可以重新计算RDD的丢失分区。 因此,可以轻松地恢复丢失的数据。

6.3.4 不变性

不变性意味着一旦我们创建了一个RDD,我们就无法改变它。我们可以通过执行转换来创建新的RDD。 此外,我们通过不变性实现一致性。

6.3.5 存储

我们可以在内存中存储经常使用的RDD,然后可以直接从内存中检索它们,而不必通过磁盘,从内存中检索数据非常快,我们也可以对相同的数据执行多个操作。 只有通过调用persist或cache函数才能将数据显式存储在内存中。

6.3.6 分区

RDD由逻辑分区组成,运行时分发分区到集群中的各个节点,这些分区并行执行。

6.3.7 并行

并行 RDD在集群上并行处理数据。

6.3.8 位置相关性

为了计算分区,RDD可以定义位置信息,DAGScheduler将分区放置在尽可能接近数据的位置进行计算,这样可以减少网络传输数据。

6.3.9 粗粒度操作

通常,我们将转换应用于RDD。这意味着该操作适用于整个数据集,而不适用于RDD数据集中的单个元素。

6.3.10 类型化

RDD有类型,如:RDD [int],RDD [long],RDD [string]。

6.3.11 RDD数量没有限制

使用RDD的数量没有限制,我们可以使用任何数量的RDD。基本上,限制取决于磁盘和内存的大小。

7. Spark的特点

7.1 处理速度快

Spark提供高处理速度。内存计算下,Spark 比 Hadoop 大约快100倍,在磁盘计算下,大约快10倍。

7.2 易用性

Spark 提供了80多个高级运算符。

7.3 通用性

Spark 提供了大量的库,包括SQL、Streaming、MLlib、GraphX。开发者可以在同一个应用程序中无缝组合使用这些库。

7.4 支持多种资源管理器

Spark 支持 Hadoop YARN,Apache Mesos,及其自带的独立集群管理器。

8. Spark局限性

8.1 不支持实时处理

基本上,Spark接近实时处理实时数据。换句话说,微量批处理是在Spark Streaming中进行的,因此我们不能说Spark是完全实时处理引擎。

8.2 小文件问题

在RDD中,每个文件都是一个分区,如果小文件特别多,这意味着,RDD中有大量的微小分区。因此,如果我们希望在处理过程中提高效率,RDD应该被重新分区,这要求在网络上进行大规模的数据移动(shuffle)。

8.3 没有文件管理系统

Spark没有自己的文件管理系统,它依赖于其他平台,如Hadoop或其他基于云的平台。

8.4 昂贵

由于内存通常比磁盘空间更贵,因此相比基于磁盘的系统,Spark成本更高。然而处理速度的提升意味着可以更快速完成任务,在需要按照小时数为资源付费的环境中,这一特性通常可以抵消增加的成本。

8.5 算法的数量较少

Spark MLlib的可用算法数量比较少。

8.6 手动优化

Spark针对适合特定的数据集必须手动优化。

8.7 延迟

与Flink相比,Spark具有更高的延迟。

9. Spark使用案例

9.1 金融行业

有许多银行正在使用Spark,它有助于访问和分析银行部门的大规模记录,例如电子邮件,社交媒体档案,通话录音,论坛等等,它有助于为多个领域做出正确的决定。

9.2 电子商务行业

Spark有助于获得有关实时交易的信息,这些信息被传递给流聚类算法。

9.3 媒体和娱乐行业

Spark从实时游戏事件中识别模式,有助于获取丰厚的商业机会。

9.4 旅游行业

Spark可以通过加快个性化建议帮助用户规划完美的旅程。

10. 结论

了解了Apache Spark的各个方面,什么是Spark编程和Spark定义,Spark的历史,为什么需要Spark,Spark RDD的特性,Spark的组件,Spark的功能,Spark的限制,Spark用例。

文章来自逗点云:https://www.doudianyun.com

### Apache Spark简介 Apache Spark 是一个开源的分布式计算系统,旨在提供数据处理的高速度和通用性[^2]。该平台不仅能够处理大规模的数据集,还具备实时数据分析的能力。通过使用最前沿的有向无环图(DAG)调度程序、查询优化器以及物理执行引擎,Spark实现了对于批处理数据和流数据处理性能的高度提升[^4]。 #### 基本概念 - **弹性分布式数据集(RDD)**:这是Spark最早引入的一种抽象表示形式,代表不可变且分区化的集合对象,在集群上并行操作。 - **DataFrame**:一种组织成命名列的数据结构,类似于关系数据库中的表或Pandas库里的DataFrame。它允许开发者以更直观的方式对大型数据集进行转换和聚合操作,并能自动优化内部执行计划[^5]。 - **Dataset**:结合了RDD的强大特性和DataFrame易于使用的API优势,既提供了编译期类型安全又保持了运行效率。 - **Transformation与Action**:Transformations定义了一系列懒加载的操作序列来构建新的RDD/Dataset/DataFrame;而Actions则触发实际计算并将结果返回给驱动程序或者保存到外部存储系统中。 ### 应用场景 由于其强大的功能特性,Apache Spark广泛应用于多个领域: - **机器学习模型训练**:借助MLlib组件提供的各种算法实现快速迭代开发复杂预测模型。 - **日志分析/ETL流程自动化**:可用于清洗整理海量的日志文件,从中提取有价值的信息用于业务决策支持。 - **实时推荐系统建设**:利用Structured Streaming模块实现实时事件流处理,及时响应用户行为变化调整个性化建议列表。 - **图形计算任务加速**:GraphX扩展包使得在超大社交网络或其他关联型数据集中查找路径变得简单高效。 ```python from pyspark.sql import SparkSession spark = SparkSession.builder.appName("example").getOrCreate() data = [("James", "", "Smith", "36636", "M", 3000), ("Michael", "Rose", "", "40288", "M", 4000)] columns = ["firstname", "middlename", "lastname", "id", "gender", "salary"] df = spark.createDataFrame(data, columns) df.show() ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值