Amazon EMR Serverless

无需集群管理即可运行 Apache Spark 和 Hive 作业,仅按实际使用的 vCPU 和内存时间计费的无服务器大数据处理服务

概述

Amazon EMR Serverless 是一项以无服务器方式运行 Apache Spark 和 Hive 作业的大数据处理服务。完全无需构建、扩缩容和补丁管理集群,只需提交作业即可自动配置所需资源。处理完成后资源自动释放,仅按实际使用的 vCPU 时间和内存时间计费。通过 EMR Runtime for Apache Spark,可在无额外费用的情况下实现相比开源版 Spark 最高 3.5 倍的加速。

应用程序与作业执行的生命周期

EMR Serverless 中首先创建应用程序。应用程序是定义 Spark 或 Hive 运行时环境的容器,需指定 EMR 发行版本 (emr-6.x、emr-7.x)。应用程序有 CREATED、STARTED、STOPPED 三种状态,在 STARTED 状态下接受作业。通过 StartJobRun API 提交作业,Spark 场景下需指定 JAR 文件或 Python 脚本的 S3 路径和入口点。作业提交后,EMR Serverless 自动配置 Worker 并开始处理。Worker 启动时间通常为 15-30 秒,配置预初始化 Worker (Pre-initialized Workers) 可将启动时间缩短至接近零。作业完成后 Worker 自动释放。启用应用程序自动停止功能后,一定时间无作业时应用程序本身也会转为 STOPPED 状态,完全消除等待成本。

Worker 配置与成本控制

EMR Serverless 的 Worker 由 vCPU 和内存的组合定义,可根据作业特性进行自定义。默认为 Spark Driver 分配 4 vCPU / 16 GB,Executor 分配 4 vCPU / 16 GB,但内存密集型处理可调整为 4 vCPU / 30 GB 等配置。通过设置最大 Worker 数可限制每个作业的资源消耗上限。成本控制的关键是应用程序级别的最大资源设置。通过 maxCapacity 指定 vCPU 和内存上限,可控制所有作业的总资源不超过此上限。费用约为 vCPU 小时 0.052 USD、内存 GB 小时 0.0057 USD,虽然单价高于 EMR on EC2 的按需价格,但由于空闲时间成本为零,批处理和临时分析的总成本往往更低。作业执行日志自动输出到 S3,Spark UI 也可从 S3 上的日志重建查看。

与 S3 数据湖的集成模式

EMR Serverless 的典型架构是以 S3 为数据湖,通过 Spark 作业执行 ETL 处理。输入数据为 S3 上的 Parquet、ORC、CSV、JSON 文件,使用 Glue Data Catalog 作为元数据存储。Spark SQL 可直接引用 Glue Data Catalog 的表,分区裁剪和谓词下推自动应用。还支持对 Apache Iceberg 表的读写,可构建具有 ACID 事务、模式演进和时间旅行查询的健壮数据管道。与 Step Functions 结合编排日常 ETL 管道是实务中广泛使用的模式。从 Step Functions 的任务状态调用 StartJobRun API,等待作业完成后进入下一步。配合 EventBridge Scheduler 设置每日触发,即可完成完全无服务器的定期批处理管道。

共有するXB!