Spark 大数据

17 Mar 2025 | 6 分钟阅读

Spark 由Apache Software Foundation提出,用于加速 Hadoop 计算过程。Spark 包含其集群管理,而 Hadoop 只是实现 Spark 的一种形式。

Spark 以两种形式应用 Hadoop。第一种是存储,另一种是处理。因此,Spark 包含其集群管理的计算,而仅将 Hadoop 用于存储目的。

Apache Spark

Apache Spark 是一个分布式开源处理系统。它用于“大数据”工作负载。Spark 利用优化的查询执行和内存缓存,对任何规模的数据进行快速查询。它只是一个通用的、快速的引擎,用于大规模数据处理。

与之前的实现大数据概念(如经典的MapReduce)相比,它速度更快。Spark 更快,因为它在 RAM/内存上执行,并且与磁盘驱动器相比,处理速度更快。

Spark 很简单,因为它可用于多种用途,例如处理数据流或图、机器学习算法、将数据摄入数据库、构建数据管道、执行分布式 SQL 等等。

Apache Spark 的演进

Spark 是Hadoop 最重要的子项目之一。它于 2009 年由 Matei Zaharia 在加州大学伯克利分校的 APMLab 开发。2010 年,它以 BSD 许可证开源。Spark 于 2013 年捐赠给 Apache Software Foundation。Apache Spark 自 2014 年 2 月起已成为 Apache 的顶级项目。

Spark 生态系统

Spark 生态系统的主要组成部分如下所示:

Spark Big Data
  • Apache Spark Core:Apache Spark Core 可以定义为 Spark 平台的底层通用执行引擎。它方便应用程序开发者与外部存储结构中的数据集和内存计算进行引用。
  • Spark SQL:此组件是 Apache Spark 的一个模块,用于处理各种结构化数据。Spark SQL 提供的各种接口为 Spark 提供了有关正在实现的计算和数据的大量信息。
  • Spark Streaming:Spark Streaming 允许 Spark实时处理流数据。数据可以从多种源摄入,例如 Hadoop Distributed File System (HDFS)、Flume 和 Kafta。然后,数据可以通过复杂算法进行处理,并推送到实时仪表板、数据库和文件系统中。
  • 机器学习库 (MLlib)Apache Spark 配备了一个名为 MLlib 的丰富库。MLlib 包含广泛的机器学习算法,如协同过滤、聚类、回归和分类。此外,它还包含用于调整、评估和构建 ML 管道的其他资源。这些功能中的每一项都支持 Spark 在集群中的横向扩展。
  • GraphX:Apache Spark 提供了一个用于操作图数据库和执行计算的库,称为 GraphX。该组件将提取、转换和加载 (ETL) 过程、常图计算和探索性分析统一在单个系统中。

还有一些其他的,如 Tachyon 和 BlinkDB。

  • Tachyon:它是一个以内存为中心的共享文件系统。它可以在 MapReduce 和 Spark 等集群框架中实现内存速度的可靠文件分发。它缓存实现的数据集文件在内存中,从而避免了访问频繁读取的数据集时访问磁盘。它允许不同的框架和查询/作业以内存速度访问缓存文件。
  • BlinkDB:它是一个近似查询引擎。它可用于对大量数据运行交互式 SQL 查询。此外,它允许用户在查询效率和响应时间之间进行权衡。BlinkDB 通过在各种数据样本上执行查询来处理大数据集。它可以呈现带有有效误差线的标注结果。
    此外,还有一些与其他产品的集成适配器,如 SparkR (R) 和 Spark Cassandra Connector (Cassandra)。我们可以利用 Spark 访问存储在 Cassandra 数据库中的数据,并使用 Cassandra Connector 对该特定数据进行数据分析。

Spark 架构

Spark 架构包含以下三个主要元素:

  • API
  • 数据存储
  • 资源管理

下面我们详细定义这些元素。

API

该元素方便了许多应用程序开发者使用经典的 API 接口创建基于 Spark 的应用程序。Spark 为 Python、Java 和 Scala 编程语言提供了 API。

数据存储

Spark 将 Hadoop Distributed File System 用于各种数据存储目的。它可以与任何与 Hadoop 兼容的数据源一起工作,包括 Cassandra、HBase、HDFS 等。

资源管理

Spark 可以扩展为独立服务器。此外,它还可以扩展到任何共享计算框架,如 YARN 或 Mesos。

Spark 中的 RDD

RDD 代表弹性分布式数据集 (Resilient Distributed Dataset)。它是 Spark 框架中的一个核心概念。可以把 RDD 想象成数据库中的任何表。它可以包含任何数据类型。Spark 可以将数据存储在不同分区上的弹性分布式数据集中。
这些数据集可以支持重排计算和升级数据处理。
此外,这些数据集是容错的,因为 RDD 知道如何重新计算和重建数据集。
弹性分布式数据集是不可变的。我们可以通过转换来修改 RDD。但是,此转换将返回一个新的 RDD,而原始 RDD 保持不变。
更详细地说,RDD 支持两种类型的操作:

  • 操作
  • 转换

操作

此操作评估并返回一个新值。每次数据处理查询都会被计算,如果调用 RDD 对象上的操作函数,则返回最终值。
一些操作包括 foreach、countByKey、take、first、count、collect 和 reduce。

转换

转换不返回任何单个值。它返回一个新的 RDD。如果我们调用任何转换函数,什么也不会被评估。它只保留 RDD,然后返回一个新的 RDD。

一些转换操作包括coalesce、pipe、aggregateByKey、reduceByKey、groupByKey、flatMap、filtermap

Spark 安装

还有一些其他的使用和安装 Spark 的方法。我们可以将 Spark 作为任何独立框架安装在我们的机器上,或者使用来自 MapR、HortonWorks 和 Cloudera 等多个供应商提供的Spark VM(虚拟机)镜像。此外,我们还可以使用配置并安装在云中的 Spark(例如 Databricks Clouds)。

Spark 执行

当我们在云端安装 Spark 或在本地机器上安装 Spark 时,有几种不同的方式可以连接到 Spark 引擎。
下表说明了不同 Spark 执行方式的 Master URL 参数:

Master URL描述
局部它可以在本地使用单个工作线程(无并行性)执行 Spark。
Local[K]它可以在本地使用 K 个工作节点执行 Spark(最好将其设置为我们机器上的核心数)。
Local[*]它可以在本地使用与我们机器上的逻辑核心数量相同的大量工作线程执行 Spark。
spark://HOST:PORT它提供了一个连接到提供的独立 Spark 集群主机的设施。端口应该是可以轻松配置供我们的主节点使用的端口,默认值为 7077。
mesos://HOST:PORT它提供了一个连接到提供的 Mesos 集群的设施。端口应该是可以轻松配置供使用的端口,默认值为 5050。
yam-client此 URL 有助于在客户端模式下连接到 YARN 集群。集群的位置将根据变量 HADOOP_CONF_DIR 进行检测。
yam-cluster此 URL 有助于在集群模式下连接到 YARN 集群。集群的位置将根据 HADOOP_CONF_DIR 进行检测。

Spark 的特点

Spark 的一些主要特点如下:

Spark Big Data
  • 快速处理:Spark 最重要的方面之一是它让大数据世界可以选择其他技术,因为它速度快。另一方面,大数据以真实性、多样性、速度体量为特征,需要高速实现。Spark 包含 RDD(弹性分布式数据集),可以节省读写操作的时间,使其执行速度比 Hadoop 快几倍。
  • 灵活性:Spark 支持多种语言,并允许许多开发人员使用 Python、R、Scala 或 Java 编写应用程序。
  • 内存计算:Apache Spark 可以将数据存储在服务器的 RAM 中,从而实现快速访问。此外,它还能加速分析速度。
  • 实时处理:Apache Spark 可以实时处理流数据。与只能处理存储数据的 MapReduce 不同,Apache Spark 可以实时处理数据。因此,它也可以产生即时结果。
  • 更好的分析:与提供映射和归约功能的 MapReduce 不同,Spark 提供了更多功能。Apache Spark 结合了丰富的机器学习、复杂分析、SQL 查询等。通过利用这些功能中的每一个,可以使用 Spark 以更好的方式实现分析。

下一主题如何旋转图片