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 作为元数据存储,与 Athena 和 Redshift 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 环境集成。