什么是 Apache Spark?

Apache Spark 是一个用于进行大规模数据处理的统一分析引擎,内置了用于 SQL、流式传输、机器学习和图处理的模块。Spark 可在 Apache Hadoop、Kubernetes、云环境中运行,也可独立运行,支持多种数据源。它提供丰富的 Java、Scala、Python 和 R API,使其适合广泛的开发者和数据科学家使用。其 Python API PySpark 还能与 Pandas 等热门库良好集成,用于数据处理。在 Google Cloud 上,Apache Spark 借助无服务器选项、Lightning Engine(预览版)等突破性性能增强功能,以及与统一数据和 AI 平台的深度集成,跃升至新高度。

一个常见问题是,何时使用 Apache Spark,何时使用 Apache Hadoop?两者都是目前市场上最重要的分布式系统,也是类似的 Apache 顶级项目,经常一起使用。Hadoop 采用 MapReduce 范式,主要用于大量磁盘操作。Spark 是一种更灵活、通常费用更高的内存中处理架构。了解各自的特性,有助于您在合适的时机做出使用决策。

了解 Google Cloud 如何助您以更简化、集成且更具成本效益的方式运行 Apache Spark 工作负载。您可以利用 Google Cloud Serverless for Apache Spark 进行零运维开发,也可以使用 Dataproc 管理 Spark 集群。

Apache Spark 概览

Spark 生态系统包含五个关键组件:

  1. Spark Core 是一个通用的分布式数据处理引擎。它是基础执行引擎,管理分布式任务调度、安排和基本的 I/O。Spark Core 引入了弹性分布式数据集 (RDD) 的概念,即不可变的对象分布式集合,可通过容错机制并行处理。在其上有用于 SQL、流处理、机器学习和图计算的库,所有这些库都可以在应用中一起使用。
  2. Spark SQL 是用于处理结构化数据的 Spark 模块,它引入了 DataFrame,相较于 RDD 提供了更优化、更适合开发者使用的 API,用于结构化数据处理。它支持您使用 SQL 或熟悉的 DataFrame API 在 Spark 程序中查询结构化数据。Spark SQL 支持 HiveQL 语法,并允许访问现有的 Apache Hive 仓库。Google Cloud 利用 Lightning Engine 等创新技术进一步提升 Spark 作业性能,尤其是 SQL 和 DataFrame 操作,从而在 Google Cloud 上运行 Spark 时显著加快查询和数据处理任务的速度。
  3. Spark Streaming 可轻松构建可扩缩、具有容错性的流式解决方案。它将 Spark 的语言集成 API 引入流处理,因此您可以像编写批处理作业一样编写流式作业,无论是使用 DStreams 还是基于 DataFrame 构建的较新 Structured Streaming API 都可以。Spark Streaming 支持 Java、Scala 和 Python,具备开箱即用的有状态“恰好一次”语义。
  4. MLlib 是 Spark 可扩容的机器学习库,它所提供的工具可以简化实际的机器学习并为其扩容。MLlib 包含许多常见的学习算法,例如分类、回归、推荐和聚类。它还包含工作流和其他实用工具,包括特征转换、机器学习流水线构建、模型评估、分布式线性代数和统计分析。与 Google Cloud 的 Vertex AI 结合使用时,Spark MLlib 工作流可以无缝集成到 MLOps 流水线中,并可利用 Gemini 来增强开发,用于编码和问题排查。
  5. GraphX 是用于图和图并行计算的 Spark API。它非常灵活,可以无缝处理图和集合 - 统一提取、转换、加载;进行探索性分析;在一个系统中迭代图计算。

在这些组件之间,Google Cloud 提供了一个经过优化的环境。例如,Lightning Engine 可提升 Spark 和 DataFrame 的性能,Google Cloud Serverless for Apache Spark 可简化部署与管理,而 Gemini 可在 BigQuery StudioVertex AI Workbench 等笔记本环境中提升开发者的工作效率。

Apache Spark 的工作原理

Apache Spark 的强大功能源自以下几个核心架构原则:

  • 内存中处理:与基于磁盘的系统相比,Spark 将数据加载到内存中,从而显著加快迭代算法和交互式查询的速度。
  • 分布式执行:在机器集群上运行。驱动程序会协调执行器(工作器进程),使其在不同数据分区上并行运行任务。
  • RDD 和 DataFrame:弹性分布式数据集 (RDD) 是基本的容错数据抽象。DataFrame 基于 RDD 构建,为结构化数据提供更丰富的支持架构的 API,并通过 Catalyst 优化器实现优化。
  • 惰性求值和 DAG:Spark 会构建一系列操作的有向无环图 (DAG)。转换是“惰性”的(不会立即计算),因此 Spark 可以在“操作”触发执行之前优化整个工作流。

Apache Spark 有哪些优势?

速度

与 Hadoop MapReduce 相比,Spark 的内存处理和 DAG 调度程序可让工作负载更快地完成,尤其是迭代任务。Google Cloud 借助优化的基础架构和 Lightning Engine 提升了处理速度。

易用性

Spark 的高级 Operator 可简化并行应用的构建。通过 Scala、Python、R 和 SQL 以交互方式使用 Spark 可实现快速开发。Google Cloud 提供无服务器选项和集成笔记本,并通过 Gemini 提升易用性。



可伸缩性

Spark 提供横向可伸缩性,通过在集群节点之间分配工作来处理大量数据。Google Cloud 通过无服务器自动扩缩和灵活的 Dataproc 集群简化了扩缩操作。

通用性

Spark 支持很多库,包括 SQL 和 DataFrame、用于机器学习的 MLlib、GraphX 和 Spark Streaming。您可以在同一应用中无缝地组合使用这些库。

开源框架创新性

Spark 利用开源社区的力量快速创新和解决问题,从而加快开发速度和缩短上市时间。Google Cloud 秉承这种开放精神,提供标准 Apache Spark 并增强其功能。

为何要选择 Spark 而非仅支持 SQL 的引擎?

Apache Spark 是一个快速通用集群计算引擎,可以部署在 Hadoop 集群中或以独立模式部署。借助 Spark,程序员可以使用 Java、Scala、Python、R 和 SQL 快速编写应用,这使得具有统计学经验的开发者、数据科学家和高级商业人士都可以使用它。使用 Spark SQL,用户可以连接到任何数据源,并将其呈现为可供 SQL 客户端使用的表。此外,交互式机器学习算法可以在 Spark 中轻松实现。

使用像 Apache Impala、Apache Hive 或 Apache Drill 这样仅支持 SQL 的引擎,用户只能使用 SQL 或类似 SQL 的语言来查询存储在多个数据库中的数据。这意味着与 Spark 相比,这些框架要小一些。 不过,在 Google Cloud 上,您无需在二者之间严格选择;BigQuery 提供强大的 SQL 功能,而 Google Cloud Serverless for Apache Spark 和用于 Spark 与 Hadoop 的 Dataproc 托管式服务让您能够充分利用 Spark 的多功能性,通常可通过 BigLake Metastore 和开放格式在同一数据上操作。

公司如何使用 Spark?

许多公司都在使用 Spark 帮助其简化具有挑战性的计算密集型任务,即处理和分析大量实时或归档数据,包括结构化和非结构化数据。Spark 还能让用户无缝整合相关的复杂功能,如机器学习和图算法。 常见应用包括:

  • 大规模 ETL/ELT
  • 实时数据处理
  • 机器学习
  • 交互式数据探索
  • 图表分析

数据工程师

数据工程师使用 Spark 编写和构建数据处理作业,并可选择使用更广泛的语言集进行编程。在 Google Cloud 上,数据工程师可以利用 Google Cloud Serverless for Apache Spark 构建零运维的 ETL/ELT 流水线,也可以使用 Dataproc 进行托管式集群控制,并与 BigQuery 和 Dataplex Universal Catalog 等服务集成以实现统一治理。

数据科学家

数据科学家可以将 Spark 与 GPU 结合使用,获取更丰富的分析和机器学习经验。使用熟悉的语言更快速地处理大量数据的能力有助于加速创新。 Google Cloud 为 Spark 提供强大的 GPU 支持,并可与 Vertex AI 无缝集成,帮助数据科学家更快速地构建和部署模型。他们可以利用各种笔记本环境,例如 BigQuery Studio、Vertex AI Workbench,也可以连接他们首选的 IDE,例如 Jupyter 和 VS Code。这种灵活的开发体验结合 Gemini,可加快从初始探索到生产部署的整个工作流。

在 Google Cloud 上运行 Apache Spark

借助 Google Cloud 优化您的 Spark 体验

  • Google Cloud Serverless for Apache Spark无需管理任何集群即可运行 Spark 作业,实现真正的零运维体验。可获益于近乎即时启动、自动扩缩,以及 Lightning EngineGemini 带来的性能提升。非常适合 ETL、数据科学和交互式分析,尤其是与 BigQuery 集成时。
  • Dataproc如果您需要更灵活地控制集群环境,或需要 Spark 之外的特定 Hadoop 生态系统组件,Dataproc 提供的是一项全托管式服务。Dataproc 简化了集群创建和管理,还受益于 Lightning Engine 增强功能,可提升 Spark 性能。
  • 统一的开放式生态系统:在 Google Cloud 上运行 Spark 意味着与 BigQuery(用于统一分析)、Vertex AI(用于 MLOps)、BigLake Metastore(用于开放元数据共享)和 Dataplex Universal Catalog(用于全面数据治理)等服务无缝集成,所有这些服务都支持开放式湖仓一体架构。

更进一步

获享 $300 赠金以及 20 多种提供“始终免费”用量的产品,开始在 Google Cloud 上构建项目。