在 Amazon EMR Serverless 上以无服务器方式运行 Spark 作业 - 无需集群管理的大数据处理

介绍通过 EMR Serverless 执行 Spark/Hive 作业、作业运行的设计以及成本优化方法。

EMR Serverless 概述

EMR Serverless 是一项以无服务器方式运行 Spark 和 Hive 作业的大数据处理服务,Worker 资源可自动扩展至最大 400 vCPU。与需要配置实例类型、节点数和 Auto Scaling 设置的 EMR on EC2 不同,EMR Serverless 只需提交作业即可自动预置资源。集群的补丁和版本升级也无需管理,可将运维精力完全集中在作业开发上。

自动扩缩容与按量计费机制

EMR Serverless 的核心价值在于资源仅在作业执行期间存在,完成后缩减至零。提交作业时指定 Driver 和 Executor 的 vCPU 与内存上限,但执行过程中 Executor 数量会根据数据量以秒为粒度动态增减。计费按实际消耗的 vCPU 秒和内存 GB 秒累计,作业结束后成本即为零。这一机制使得即使每天仅运行一次的批处理 ETL 也无需保持集群持续运行,与 EMR on EC2 维护常驻集群相比,在低利用率工作负载下可实现显著的成本削减。

应用程序设计与 Hive 集成

EMR Serverless 的应用程序通过选择 Spark 或 Hive 运行时来创建。Spark 应用程序将 PySpark 脚本放置在 S3 上,通过作业运行执行。Hive 应用程序使用 HiveQL 脚本编写 ETL 处理,并将 Glue Data Catalog 用作元数据存储。配置预初始化 Worker 后,可避免作业启动时的冷启动,数秒内即可开始作业。作业运行的 Driver 和 Executor 的 vCPU 和内存可分别指定,能够根据作业特性进行资源分配。将 S3 上的数据以 Parquet 格式存储并进行分区,可优化查询性能。 如需深入了解 Spark 的应用案例,可参考相关书籍 (Amazon)

EMR on EC2 / Glue 的区分使用

与 EMR Serverless 类似的选项包括 EMR on EC2 和 Glue,根据工作负载特性进行选择。当需要 Serverless 不支持的功能(GPU 实例、自定义 AMI、Presto/Trino 集群)或集群利用率较高可利用预留实例折扣时,EMR on EC2 更具优势。Glue ETL 可通过可视化编辑器构建 ETL 管道,在 Data Catalog 集成和作业书签(恢复功能)方面表现突出,但对 Spark 调优参数的访问受限,大规模 Spark SQL 分析工作负载使用 EMR Serverless 更为灵活。判断标准:作业可通过标准 Spark/Hive 功能完成且集群利用率低时选择 EMR Serverless;需要 Spark 以外的框架(Flink、HBase)时选择 EMR on EC2;优先考虑无代码可视化 ETL 时选择 Glue。

设计最佳实践与陷阱

确保 EMR Serverless 稳定运行的三个设计要点。第一,务必设置作业运行的最大资源上限,防止无限扩展导致的成本失控。未设置上限的作业因数据倾斜持续生成大量 Executor 会导致意外账单。第二,仅在作业频率较高(每小时多次)时启用预初始化 Worker。由于空闲时也会计费,为日常批处理启用会产生 23 小时的空闲成本,抵消 Serverless 的优势。第三,使用 Iceberg 表时规划压缩策略。小文件积累会导致 Spark 任务数爆炸,延长作业启动时间。将定期 OPTIMIZE 命令纳入作业管道可维持查询性能。

EMR Serverless 的定价

EMR Serverless 按 vCPU 小时和内存 GB 小时按量计费。vCPU 每小时约 0.052 美元,内存每 GB 小时约 0.0057 美元。作业未执行期间不产生费用,因此对于零散的批处理任务,成本效率远优于 EMR on EC2。预初始化 Worker 在空闲状态下也会计费,需根据作业频率判断是否启用。设置作业运行的资源上限以控制失控作业的成本,并通过超时自动停止。EMR on EC2 的盈亏平衡点大约在集群利用率低于 30% 时,Serverless 更具优势。

总结

EMR Serverless 是一项无需集群管理即可运行 Spark/Hive 作业的服务。按量计费消除了空闲成本,预初始化 Worker 避免了冷启动。将 Glue Data Catalog 用作元数据存储,实现对 S3 上 Parquet 数据的高效 ETL 处理。在集群利用率低于 30% 的环境中比 EMR on EC2 更具优势,合理管理资源上限和预初始化 Worker 是成本优化的关键。