Amazon EMR 架构概览 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon EMR 架构概览

Amazon EMR 服务架构包括多个层,每个层为集群提供特定的功能。本节概览这些层及每个层的组件。

存储

存储层包含可用于集群的不同的文件系统。有多种不同类型的存储选项,如下所述。

Hadoop Distributed File System(HDFS)

Hadoop Distributed File System(HDFS)是一种分布式、可扩展的文件系统,供 Hadoop 使用。HDFS 将它所存储的数据在集群中的实例之间进行分配,从而在不同的实例上存储多份数据副本,确保在单个实例发生故障的情况下不会出现数据的丢失。HDFS 属于一种暂时性存储,会在集群终止时收回。HDFS 在缓存 MapReduce 处理期间的中间结果或具有大量随机 I/O 的工作负载时非常有用。

有关更多信息,请参阅本指南中的 实例存储 或访问 Apache Hadoop 网站上的 HDFS 用户指南

EMR 文件系统 (EMRFS)

借助 EMR 文件系统(EMRFS),Amazon EMR 可使 Hadoop 具备直接访问存储在 Amazon S3 中的数据(就像使用 HDFS 文件系统时一样)的功能。在集群中,您可以将 HDFS 或 Amazon S3 用作文件系统。Amazon S3 最常用于存储 HDFS 中存储的输入和输出数据以及中间结果。

本地文件系统

本地文件系统指的是本地连接的磁盘。创建 Hadoop 集群时,会从 Amazon EC2 实例上创建各个节点,这些节点附带了预先配置的数据块,这些数据块属于称为实例存储的预先附加的磁盘存储。实例存储卷上的数据仅在 Amazon EC2 实例的生命周期内保留。

集群资源管理

资源管理层负责管理集群资源和调度作业,以进行数据处理。

默认情况下,Amazon EMR 使用 YARN(Yet Another Resource Negotiator,Apache Hadoop 2.0 中引入的一个组件)集中管理多个数据处理框架的集群资源。但是,Amazon EMR 中提供有不使用 YARN 作为资源管理器的其它框架和应用程序。Amazon EMR 还在每个节点上配备一个代理,用于管理 YARN 组件、确保集群正常运行以及与 Amazon EMR 服务进行通信。

由于竞价型实例通常用于运行任务节点,而 Amazon EMR 具有调度 YARN 任务的默认功能,因此在竞价型实例上运行的任务节点终止时,正在运行的任务不会失败。Amazon EMR 通过允许应用程序主进程仅在核心节点上运行来实现这一目标。应用程序主进程控制正在运行的任务,并且需要在任务的整个生命周期内保持活动状态。

Amazon EMR 发行版 5.19.0 及更高版本使用内置 YARN 节点标签功能来实现这一目标。(早期版本使用代码补丁)。yarn-site 中的属性和 capacity-scheduler 配置分类是默认配置,以便 YARN capacity-scheduler 和 fair-scheduler 利用节点标注。Amazon EMR 自动为核心节点添加 CORE 标注,并设置属性,以便只在具有 CORE 标签的节点上安排应用程序主节点。手动修改 yarn-site 和 capacity-scheduler 配置分类中的相关属性,或直接在关联的 XML 文件中修改相关属性,可能会破坏此功能或调整此功能。

数据处理框架

数据处理框架层是用于分析和处理数据的引擎。可在 YARN 上运行并具有自己的资源管理功能的框架有很多。不同的框架适用于不同类型的处理需求,如批处理、交互式处理、内存中处理、流式处理等。框架的选择因使用案例而定。这影响到应用程序层 (用于与要处理的数据交互的层) 可用的语言和接口。Hadoop MapReduce 和 Spark 是可用于 Amazon EMR 的主处理框架。

Hadoop MapReduce

Hadoop MapReduce 是一种用于分布式计算的开源编程模型。它通过处理 (除 Map-Reduce 功能外的) 所有逻辑简化了编写平行分布式应用程序的过程。Map 函数将数据映射到一系列称为中间结果的键值对上。Reduce 函数则汇总这些中间结果、应用其它计算法并生成最终输出。有多个可用于 MapReduce 的框架,如可自动生成 Map 和 Reduce 程序的 Hive。

有关更多信息,请参阅 Apache Hadoop Wiki 网站上的 Map 和 Reduce 操作的执行原理

Apache Spark

Spark 是一种用于处理大数据工作负载的集群框架和编程模型。与 Hadoop MapReduce 一样,Spark 是开源、分布式的处理系统,但它为执行计划使用有向无环图并为数据集使用内存缓存。在 Amazon EMR 上运行 Spark 时,您可以使用 EMRFS 直接访问 Amazon S3 中的数据。Spark 支持多种交互式查询模块,如 SparkSQL。

有关更多信息,请参阅《Amazon EMR 版本指南》中的Amazon EMR 集群上的 Apache Spark

应用程序和项目

Amazon EMR 支持许多应用程序,如 Hive、Pig 和 Spark Streaming 库,以提供使用更高级的语言创建处理工作负载、运用机器学习算法、制作流处理应用程序、构建数据仓库等功能。此外,Amazon EMR 还支持拥有自己的集群管理功能而不使用 YARN 的开源项目。

您可以使用多种库和语言与在 Amazon EMR 中运行的应用程序交互。例如,您可以使用 Java、Hive、Pig with MapReduce 或 Spark Streaming、Spark SQL、MLlib 和 GraphX with Spark。

有关更多信息,请参阅《Amazon EMR 版本指南》