Amazon EMR 大数据处理 - Spark 与 Hive 的执行环境

在 EMR 集群上执行 Spark 作业和 Hive 查询,介绍与 EMR Serverless 的选择以及托管扩缩的成本优化。

EMR 集群配置

EMR 集群最多由数百个节点组成,包括主节点(集群管理和 YARN 资源管理器)、核心节点(HDFS 数据保存和计算处理)和任务节点(仅计算处理)。核心节点保存 HDFS 数据,缩减时有数据丢失风险,而任务节点不持有数据可自由扩缩。使用 S3 作为主存储时,核心节点的 HDFS 可最小化,降低 Spot 中断风险。

Spark 与 Hive 执行

Spark on EMR 通过 spark-submit 命令或 EMR Steps API 提交作业。EMRFS 是优化 S3 读写的文件系统,提供绕过 S3 最终一致性的一致性视图。启用 Spark 动态资源分配(Dynamic Resource Allocation)后,执行器数量根据作业负载自动调整。Hive on EMR 使用 Glue Data Catalog 作为元数据存储,与 AthenaRedshift Spectrum 共享表定义。

EMR on EKS 与托管扩缩

EMR on EKS 在现有 EKS 集群上执行 Spark 作业,利用 Kubernetes 的资源管理和调度。创建虚拟集群映射到 EKS 命名空间,通过 StartJobRun API 提交作业。EMR on EC2 的托管扩缩根据作业负载自动添加/删除核心节点和任务节点。扩缩策略可设置最小/最大节点数和扩缩触发条件。

EMR 成本优化

EMR 成本由实例费用和 EMR 费用(约 EC2 费用的 25%)构成。推荐任务节点使用 Spot 实例,核心节点使用按需实例确保 HDFS 数据安全。使用 S3 作为主存储的 EMRFS 架构可最小化核心节点 HDFS,降低 Spot 中断风险。临时集群仅在作业执行时启动,完成后自动终止,避免空闲成本。

总结

EMR 提供 Spark 和 Hive 等大数据框架的托管执行环境。通过以 S3 为主存储的 EMRFS 架构降低 Spot 实例中断风险,托管扩缩实现根据作业负载自动调整节点数。EMR on EKS 还可与现有 Kubernetes 环境集成。