对于依赖 Apache Spark 运行数据处理和分析工作负载的 Google Cloud 客户来说,一个关键的决定是在 Dataproc on Compute Engine(在本文档中称为“Dataproc”)和 Serverless for Apache Spark 之间做出选择。虽然这两种服务都提供托管式、高度可扩缩、可用于生产用途且安全的 Spark 环境,该环境与 OSS 兼容,并完全支持各种数据格式,但这两个平台在底层基础设施的管理和结算方式方面存在根本性差异。
本文档将 Google Cloud Serverless for Apache Spark 与 Dataproc 进行比较,并列出它们的特性和功能,以帮助您确定最佳的 Spark 工作负载解决方案。
将 Serverless for Apache Spark 与 Dataproc 进行比较
如果您想要预配和管理基础架构,然后在 Spark 和其他开源处理框架上执行工作负载,请使用 Dataproc on Compute Engine。下表列出了 Dataproc on Compute Engine 和 Serverless for Apache Spark 的主要区别。
| 能力 | Serverless for Apache Spark | Dataproc on Compute Engine |
|---|---|---|
| 处理框架 | 批量工作负载和交互式会话:Spark | Spark。其他开源框架,例如 Hive、Flink、Trino 和 Kafka |
| 无服务器 | 是 | 否 |
| 启动时间 | 50 年代 | 120 秒 |
| 基础架构控制 | 否 | 是 |
| 资源管理 | 无服务器 | YARN |
| GPU 支持 | 是 | 是 |
| 交互式会话 | 是 | 否 |
| 自定义容器 | 是 | 否 |
| 虚拟机访问权限 (SSH) | 否 | 是 |
| Java 版本 | Java 17, 21 | Java 17 及更低版本 |
确定最佳 Spark 服务
本部分概述了每项服务的核心优势和主要使用场景,以帮助您为 Spark 工作负载选择最佳服务。
概览
Dataproc 和 Serverless for Apache Spark 在控制程度、基础设施管理和结算模式方面有所不同。
- Dataproc 管理的 Spark:Dataproc 提供 Spark 集群即服务,可在您的 Compute Engine 基础架构上运行托管的 Spark。您需要按集群正常运行时间付费。
- Serverless for Apache Spark:Serverless for Apache Spark 提供 Spark 作业即服务,可在全代管式 Google Cloud基础架构上运行 Spark。您需要为作业运行时长付费。
由于存在这些差异,每项服务最适合以下使用情形:
| 服务 | 使用场景 |
|---|---|
| Dataproc | 长时间运行的共享环境 需要对基础架构进行精细控制的工作负载 迁移旧版 Hadoop 和 Spark 环境 |
| Serverless for Apache Spark | 不同的专用作业环境 已调度的批量工作负载 代码管理优先于基础架构管理 |
主要差异
| 功能 | Dataproc | Serverless for Apache Spark |
|---|---|---|
| 管理模型 | 基于集群。您负责预配和管理集群。 | 全代管式无服务器执行环境。 |
| 控制与自定义 | 可更好地控制集群配置、机器类型和软件。能够使用 Spot 虚拟机,并重复使用预留和 Compute Engine 资源容量。适用于依赖于特定虚拟机配置(例如 CPU 架构)的工作负载。 | 对基础架构的控制权较少,但可专注于提交代码和指定 Spark 参数。 |
| 使用场景 | 长时间运行的共享集群,迁移具有自定义配置的现有 Hadoop 和 Spark 工作负载,需要深度自定义的工作负载。 | 临时查询、交互式分析、新的 Spark 流水线以及资源需求不可预测的工作负载。 |
| 操作开销 | 开销较高,需要进行集群管理、伸缩和维护。 | 开销更低。 Google Cloud 管理基础架构、伸缩和预配,实现NoOps模型。Gemini Cloud Assist 可简化问题排查,而 Serverless for Apache Spark 自动调优有助于提供最佳性能。 |
| 效率模型 | 通过在作业和团队之间共享集群来提高效率,采用共享的多租户模型。 | 无闲置计算开销:仅在作业运行时分配计算资源。没有启动和关闭费用。支持共享互动会话,以提高效率。 |
| 位置信息控制 | 集群是可用区级的。在创建集群期间,系统可以自动选择可用区。 | Serverless for Apache Spark 支持区域性工作负载,无需额外费用,即可提供更高的可靠性和可获取性。 |
| 费用 | 根据节点数量,按集群的运行时间(包括启动和关闭时间)收费。包括 Dataproc 许可费用和基础架构费用。 | 仅根据所消耗的资源,按 Spark 作业的执行时长(不包括启动和拆解)计费。按所用的数据计算单元 (DCU) 和其他基础设施费用结算。 |
| 承诺使用折扣 (CUD) | Compute Engine CUD 适用于所有资源用量。 | BigQuery 基于支出的 CUD 适用于 Serverless for Apache Spark 作业。 |
| 映像和运行时控制 | 用户可以固定到次要和次次要 Dataproc 映像版本。 | 用户可以将运行时版本固定到次要 Serverless for Apache Spark 运行时版本;子次要版本由 Serverless for Apache Spark 管理。 |
| 资源管理 | YARN | 无服务器 |
| GPU 支持 | 是 | 是 |
| 互动式会话 | 否 | 是 |
| 自定义容器 | 否 | 是 |
| 虚拟机访问权限 (SSH) | 是 | 否 |
| Java 版本 | 支持过往版本 | Java 17、21 |
| 启动时间 | 120 秒 | 50 年代 |
何时选择 Dataproc
Dataproc 是一项代管式服务,您可以使用它来运行 Apache Spark 和其他开源数据处理框架。它具有高度的控制性和灵活性,因此在以下场景中是首选:
- 迁移现有的 Hadoop 和 Spark 工作负载:支持将本地 Hadoop 或 Spark 集群迁移到 Google Cloud。以最少的代码更改复制现有配置,尤其是在使用旧版 Spark 时。
- 深度自定义和控制:可让您自定义集群机器类型、磁盘大小和网络配置。这种控制级别对于复杂、长时间运行的作业的性能调优和资源利用率优化至关重要。
- 长时间运行的持久性集群:支持持续运行的长时间 Spark 作业,以及适用于多个团队和项目的持久性集群。
- 多样化的开源生态系统:提供统一的环境,以便您使用 Spark 工作负载运行 Hadoop 生态系统工具(例如 Hive、Pig 或 Presto)运行的数据处理流水线。
- 安全合规性:可控制基础架构以满足特定的安全或合规性标准,例如保护个人身份信息 (PII) 或受保护健康信息 (PHI)。
- 基础架构灵活性:提供 Spot 虚拟机,并支持重复使用预留和 Compute Engine 资源容量,以平衡资源使用情况并促进云基础架构策略的实施。
何时选择 Serverless for Apache Spark
Serverless for Apache Spark 可抽象化集群管理的复杂性,让您专注于 Spark 代码。因此,它非常适合用于以下数据处理场景:
- 临时分析和交互式分析:对于使用 Spark 运行交互式查询和探索性分析的数据科学家和分析师,无服务器模型提供了一种快速入门的方式,无需关注基础设施。
- 基于 Spark 的应用和流水线:在 Spark 上构建新的数据流水线或应用时,Serverless for Apache Spark 可消除集群管理方面的运营开销,从而显著加快开发速度。
- 需求时有时无或不可预测的工作负载:对于间歇性 Spark 作业或资源需求波动不定的作业,Serverless for Apache Spark 的自动扩缩和按用量付费定价(按作业资源消耗量收费)可以显著降低成本。
- 专注于提高开发者工作效率:Serverless for Apache Spark 无需预配和管理集群,可加快业务逻辑的创建速度,更快地提供数据洞见,并提高工作效率。
- 简化运营并减少开销:Serverless for Apache Spark 基础架构管理可减轻运营负担并降低成本。
总结
选择使用 Dataproc 还是 Serverless for Apache Spark 取决于您的工作负载要求、运维偏好和所需的控制级别。
- 如果您需要最大限度的控制权、需要迁移 Hadoop 或 Spark 工作负载,或者需要持久的自定义共享集群环境,请选择 Dataproc。
- 选择 Serverless for Apache Spark,因为它易于使用,对于间歇性工作负载具有成本效益,并且能够通过消除基础设施管理开销来加快新 Spark 应用的开发速度。
在评估本部分中列出的因素后,选择运行 Spark 的最高效且最具成本效益的服务,以充分发挥数据的潜力。