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

介绍在 EMR 集群上运行 Spark 作业和 Hive 查询、与 EMR Serverless 的选用,以及通过托管扩缩进行的成本优化。

EMR 集群的配置

EMR 集群由主节点(集群管理和 YARN 资源管理器)、核心节点(保存 HDFS 数据和计算处理)和任务节点(仅计算处理)构成。核心节点保存 HDFS 的数据,因此缩减时存在数据丢失的风险,而任务节点不保存数据,因此可以自由扩缩。将 S3 用作主存储时,将核心节点的 HDFS 限定于中间数据的临时存储,并通过在任务节点上利用 Spot 实例来削减成本。使用 EC2 实例队列,可以指定多种实例类型,提高 Spot 的可用性。

运行 Spark 与 Hive

在 Spark on EMR 中,使用 spark-submit 命令或 EMR Steps API 提交作业。EMRFS 是 EMR 用于读写 S3 的文件系统,由于 S3 的最终一致性自 2020 年 12 月起已变更为强一致性,EMRFS 的一致性视图已不再需要。启用 Spark 的动态资源分配(Dynamic Resource Allocation)后,会根据作业的负载自动调整执行器的数量。在 Hive on EMR 中,可以将 Glue Data Catalog 设置为外部元存储,并与 Athena 和 Redshift Spectrum 共享表定义。EMR Serverless 无需预置集群,按应用程序指定资源来运行作业。

EMR on EKS 与托管扩缩

EMR on EKS 在现有的 EKS 集群上运行 Spark 作业,并利用 Kubernetes 的资源管理和调度。创建虚拟集群并将其映射到 EKS 的命名空间,然后使用 StartJobRun API 提交作业。EMR on EC2 的托管扩缩会根据作业的负载自动添加 / 删除核心节点和任务节点。设置扩缩的最小 / 最大节点数,并根据 YARN 的内存使用率作出扩缩判断。EMR Studio 是基于浏览器的 IDE,可以从 Jupyter 笔记本连接到 EMR 集群并执行交互式分析。

EMR 的成本优化

EMR 的成本由实例费用和 EMR 费用构成。可以采用任务节点使用 Spot 实例、核心节点使用按需实例来保护 HDFS 数据的配置。在将 S3 作为主存储的 EMRFS 架构中,可以将核心节点的 HDFS 控制在最低限度,减轻 Spot 中断的风险。通过仅在运行作业时启动临时集群、完成后自动终止的设计,控制空闲时间的成本。Graviton 实例(m6g、r6g)可以用于运行 Spark 作业。

存储与数据湖的集成

高效使用 EMR 的基础是将计算与存储分离。如果采用将数据放在 S3 中、仅在需要处理时启动集群读取数据的配置,就无需让集群始终运行,可以控制成本。即使终止集群,数据也会保留在 S3 中,因此可以让多个处理重复使用同一份数据。如果在数据目录中注册表定义,不仅是 EMR,其他分析服务也可以引用同一份数据,可以一致地处理整个数据湖。将存储集中到持久的 S3 中的设计,是构建大数据平台的方式之一。

集群的运行形态

EMR 的集群根据用途分别使用。执行既定的处理、结束后就销毁集群的临时用法适合批处理,可以避免无谓的运行。对于交互式分析和持续的处理,使用常驻运行的集群。也可以将处理定义为步骤并按顺序执行。如果选择无服务器的运行形态,就不再需要管理集群本身,可以只专注于提交作业。使用笔记本环境,数据科学家可以交互式地推进分析。根据处理的性质和频率选择运行形态。

性能与成本的优化

EMR 的成本和性能会因实例的选择方式而变化。如果采用灵活组合多种实例类型的配置,可以在保持可用性的同时利用价格低廉的 Spot 实例。将 Spot 用于可以容忍中断的处理,可以控制成本。使用根据负载自动调整集群规模的机制,可以配合处理量的波动增减资源,控制浪费。如果适当地预估数据的划分方式和处理所需的资源量,便于控制处理时间和费用。

安全与治理

在大数据平台中,重要的是保护所处理的数据和管理访问。对存储的数据和处理中的通信进行加密,保护敏感信息。对数据的访问与细粒度的权限管理机制相结合,控制每个用户可以查看的范围。如果在列或行的级别限制访问,即使是同一个数据集,也可以按部门改变显示的范围。记录谁处理了哪些数据,使其能够接受审计。正因为是大量用户处理大量数据的环境,建立结合加密 / 访问控制 / 审计的治理,是安全的分析平台的前提。

总结

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

参考资料(AWS 官方)

本页的第一手信息来源是 AWS 官方网站及官方文档。最新的规格与价格请以下列官方页面为准。

如本页内容与官方文档不一致,请以官方文档为准。

分享