Logo
Section 1 / 5

Spark 基础

Spark作为一种工具,用于解决特定问题的概述及其架构。

导入

Spark 基础

Spark作为一种工具,用于解决特定问题的概述及其架构。

为什么选择 Spark?

随着数据处理和信息生成需求的持续增长,工程师和数据科学家越来越需要易于使用且灵活的工具来实现并行数据分析。这一趋势在云计算兴起后尤为明显,因为计算能力和横向扩展能力变得更加普及。

Spark 出现正是为了解决这些问题,主要原因如下:

易用性:相比 Spark 之前存在的工具(如基于 MapReduce 的 Hadoop),Spark 更加简单易用。它允许开发者专注于计算逻辑,通过高级 API 编写代码即可完成任务。同时,Spark 也能在普通的笔记本电脑上安装和运行。

高性能:Spark 极其高效,在大数据领域广受赞誉。

通用计算引擎:Spark 支持多种计算类型,例如 SQL 查询、文本处理、机器学习等,并能灵活组合使用。


什么是 Spark?

Spark 本质上是一个基于集群的计算平台,设计目标是快速且通用。如果试图为 Spark 定义一个具体用途,反而会受限于其广泛的应用场景。通常,Spark 被称为用于大规模数据处理的统一分析引擎。

从开发者的角度来看,Spark 的魅力在于它是一组用多种语言(如 Scala、Java、Python 等)编写的库。Spark 为程序赋予强大的数据处理能力,并提供分布式特性,使程序能够在集群中的每台机器上协调运行。

由于 Spark 尽可能将计算过程放在内存中执行,因此处理大规模数据集时,时间从数小时缩短至几分钟。它主要通过在内存中处理数据块,而非依赖硬盘等 I/O 设备,从而显著降低数据处理和传输的延迟。

其通用性体现在支持多种功能,包括命令式编程(如迭代算法)、SQL 查询、流式处理,以及本课程重点介绍的批处理。

Spark 是开源项目,由 Apache 软件基金会维护,得益于全球开发者的贡献,不断优化性能或增加新功能(需经过 Apache 的审查、测试和批准流程)。

Netflix、eBay 等大型科技公司已大规模部署 Spark,其应用也遍及多个行业和领域。


Spark 简史

那么,Spark 的前身是什么?让我们回顾一下 Spark 及相关技术的发展历程。

MapReduce 的诞生

MapReduce 于 2004 年诞生,最初是谷歌内部的一个分布式处理框架。它可大致描述为一种在集群上并行处理大规模数据集的模型,主要包括三个操作:

  • Map 阶段:可视为对集群中各节点本地数据执行的函数,定义“映射”阶段。即为每条记录识别或定义键(ID)及其对应值。

  • Shuffle 阶段:在集群节点之间进行数据交换,通常伴随排序操作。该阶段处理 Map 阶段的结果,按全局维度整理相关信息。这意味着将数据按键值对形式聚合,相同键的数据被集中在一起,并在此过程中进行排序。

  • Reduce 阶段:对前一阶段的输出结果再次在集群节点上执行,对映射后的数据进行聚合计算。

该模型采用“分而治之”的策略,将一个大问题(如高效处理海量数据)拆分为多个小任务并行执行,从而更高效地利用资源,节省时间。

以下是一个简单的示例说明该过程:

...
Map and Reduce operations

值得注意的是,这种处理方式存在一些前提条件和影响:

  • 要运行此类分布式处理模型,数据必须分布在集群的不同节点或连接的资源上。

  • 在 Shuffle 和 Sort 阶段,数据会在不同机器或节点之间传输。

  • 不再依赖单一超强计算机,而是通过多台普通设备协同工作(通常使用通用软件)。正如那句名言所说:“整体大于部分之和”,因为可以按需动态添加资源,使得整个计算集群具备良好的可扩展性。


Spark 的到来

十年后,Apache 软件基金会于 2014 年推出了 Spark,旨在保留 MapReduce 的优势(如可扩展性、分布式并行处理等)的同时,进一步提升效率和易用性。

与 MapReduce 相比,Spark 具有以下显著优势:

  • Spark 通过尽可能将数据缓存到内存中运行,实现更快的执行速度。而 MapReduce 在读写数据时频繁依赖磁盘,导致性能瓶颈,磁盘的访问速度远低于内存。

  • Spark 提供了更丰富的编程接口和更强的功能化编程模型,这一点对开发者尤其具有吸引力,也推动了其广泛应用。

  • 与 MapReduce 使用重型 JVM 进程不同,Spark 引入了轻量级线程和轻量级 JVM 进程,提升了并行度和启动速度。

那么,Spark 内部是如何组织的呢?接下来我们简要了解一下其架构。


完整的技术栈

在核心层面,Spark 负责管理跨工作节点的计算单元(如作业、任务)的调度、分发、执行和监控。

它还包含多个高层组件,分别针对不同类型的工作负载进行了优化,如下图所示:

...
Spark Fundamentals

需要指出的是,上述图表中“管理者”部分缺少了 Spark Standalone 管理器。

该组件负责管理独立集群,即通过在一台或多台计算机上安装并运行 Spark 二进制文件创建的集群。

所谓“独立”,是指需要手动启动和停止集群中的各个节点。

尽管 Spark Standalone 管理器完全适用于运行任何基于 Spark 的应用程序,但在生产环境中很少使用,业界更倾向于采用云原生的集群管理器(如 AWS 中的 YARN)。

课程介绍

组件与架构