

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Amazon EMR 架构和服务层
<a name="emr-overview-arch"></a>

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

**Topics**
+ [仓储服务](#emr-arch-storage)
+ [集群资源管理](#emr-arch-resource-management)
+ [数据处理框架](#emr-arch-processing-frameworks)
+ [应用程序和项目](#emr-arch-applications)

## 仓储服务
<a name="emr-arch-storage"></a>

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

### Hadoop Distributed File System（HDFS）
<a name="emr-storage-hdfs"></a>

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

有关更多信息，请参阅本指南中的 [Amazon EMR 中的实例存储选项和行为](emr-plan-storage.md) 或访问 Apache Hadoop 网站上的 [HDFS 用户指南](http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsUserGuide.html)。

### EMR 文件系统 (EMRFS)
<a name="emr-storage-emrfs"></a>

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

### 本地文件系统
<a name="emr-storage-lfs"></a>

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

## 集群资源管理
<a name="emr-arch-resource-management"></a>

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

默认情况下，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 节点标签](https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/NodeLabel.html)功能来实现这一目标。（早期版本使用代码补丁）。`yarn-site` 中的属性和 `capacity-scheduler` 配置分类是默认配置，以便 YARN capacity-scheduler 和 fair-scheduler 利用节点标注。Amazon EMR 自动为核心节点添加 `CORE` 标注，并设置属性，以便只在具有 CORE 标签的节点上安排应用程序主节点。手动修改 yarn-site 和 capacity-scheduler 配置分类中的相关属性，或直接在关联的 XML 文件中修改相关属性，可能会破坏此功能或调整此功能。

## 数据处理框架
<a name="emr-arch-processing-frameworks"></a>

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

### Hadoop MapReduce
<a name="emr-processing-framework-mapreduce"></a>

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

有关更多信息，请参阅 Apache Hadoop Wiki 网站上的 [Map 和 Reduce 操作的执行原理](http://wiki.apache.org/hadoop2/HadoopMapReduce)。

### Apache Spark
<a name="emr-processing-framework-spark"></a>

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

有关更多信息，请参阅《Amazon EMR 版本指南》**中的[Amazon EMR 集群上的 Apache Spark](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark.html)。

## 应用程序和项目
<a name="emr-arch-applications"></a>

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

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

有关更多信息，请参阅[《Amazon EMR 版本指南》](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/)。