Amazon EMR
管理指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

Amazon EMR 概述

本主题概述 Amazon EMR 集群,包括:如何向集群提供工作、数据的处理方式、集群在处理期间经历的各种状态。

了解集群和节点

集群 是 Amazon EMR 的核心组件。集群是 Amazon Elastic Compute Cloud (Amazon EC2) 实例的集合。集群中的每个实例称作节点。集群中的每个节点都有一个角色,称作节点类型。Amazon EMR 还在每个节点类型上安装不同的软件组件,在分布式应用 (如 Apache Hadoop) 中为每个节点赋予一个角色。

Amazon EMR 中的节点类型有:

  • 主节点:管理集群以实现处理作业的节点,它运行软件组件来协调数据和任务在其他节点 (统称为从属节点) 间的分配。主节点跟踪任务的状态并监控集群的健康状况。

  • 核心节点:拥有在您的集群上运行任务和在 Hadoop 分布式文件系统 (HDFS) 中存储数据的软件组件的从属节点。

  • 任务节点:拥有只运行任务的软件组件的从属节点。任务节点是可选的。

下图中的集群包含一个主节点和四个从属节点。

向集群提交工作

当在 Amazon EMR 上运行集群时,有几个选项可供您指定所需完成的工作。

  • 完整地定义要在 Map 和 Reduce 函数中完成的工作。对于那些处理固定的数据量并在处理完成时终止的集群,通常会采取这种做法。有关更多信息,请参阅 Amazon EMR 版本指南 中的 Apache Hadoop

  • 创建一个长时间运行的集群并使用 Amazon EMR 控制台、Amazon EMR API 或 AWS CLI 提交包含一个或多个 Hadoop 作业的步骤。有关更多信息,请参阅 向集群提交工作

  • 创建一个安装了 Hadoop 应用程序 (如 Hive 或 Pig) 的集群,并使用这些应用程序提供的接口以脚本或者交互方式提交查询。有关更多信息,请参阅 Amazon EMR 版本指南

  • 创建长时间运行的集群、连接该集群并使用 Hadoop API 提交 Hadoop 任务。有关更多信息,请参阅 Apache Hadoop API 文档中的 JobClient 类

处理数据

启动集群时,您需要选择要安装的框架和应用程序,以满足您的数据处理需求。在 Amazon EMR 集群中处理数据的方式有两种:直接向安装在集群上的应用程序提交作业或查询,或在集群中运行步骤

直接向应用程序提交作业

您可以直接向安装在 Amazon EMR 集群中的应用程序提交作业和与之交互。为此,您通常需要通过安全连接与主节点连接,并访问可用于直接运行在集群上的软件的接口和工具。有关更多信息,请参阅 连接到集群

运行步骤以处理数据

您可以向 Amazon EMR 集群提交一个或多个有序的步骤。每个步骤都是一个工作单位,其中包含可由集群上安装的软件处理的数据操作指令。

下面是一个使用四个步骤的示例处理操作:

  1. 提交要处理的输入数据集。

  2. 使用 Pig 程序处理第一个步骤的输出.

  3. 使用 Hive 程序处理第二个输入数据集。

  4. 写入一个输出数据集。

通常,在 Amazon EMR 中处理数据时,输入为以文件形式存储在您选择的底层文件系统 (如 Amazon S3 或 HDFS) 中的数据。数据从处理序列中的一个步骤传递到下一个。最后一步将输出数据写入指定位置,如 Amazon S3 存储桶。

步骤按下面的序列运行:

  1. 提交请求以开始处理步骤。

  2. 所有步骤的状态均设为 PENDING

  3. 序列中的第一个步骤启动时,其状态更改为 RUNNING。其他步骤仍处于 PENDING 状态。

  4. 第一个步骤完成后,其状态更改为 COMPLETED

  5. 序列中的下一个步骤启动,其状态更改为 RUNNING。完成时,其状态更改为 COMPLETED

  6. 对每个步骤重复这一模式,直到所有步骤均完成,处理结束。

下图显示了此步骤序列及随着处理的进行各步骤的状态更改。

如果处理期间步骤失败,其状态会更改为 TERMINATED_WITH_ERRORS。默认情况下,此序列中的剩余步骤均设为 CANCELLED 且不运行,但您可以选择忽略处理失败并继续执行剩余步骤。

下图显示了此步骤序列和处理期间某个步骤失败时默认的状态变更。

理解集群的生命周期

成功的 Amazon EMR 集群会遵循这个流程:

  1. Amazon EMR 首先预置包含您选择的应用程序 (如 Hadoop 或 Spark) 的集群。在这个期间,集群的状态是 STARTING

  2. 接下来,在集群上运行用户定义的任意操作 - 称作引导操作,如安装其他应用程序。在这个期间,集群的状态是 BOOTSTRAPPING

  3. 在所有引导操作成功完成后,集群的状态是 RUNNING。在此阶段,集群会按顺序运行所有步骤。

  4. 成功运行步骤后,集群进入 WAITING 状态或 SHUTTING_DOWN 状态,如下所述。

    • 如果您通过禁用自动终止或在 API 中使用 KeepJobFlowAliveWhenNoSteps 参数将集群配置为长时间运行的集群,则在处理完所有提交的步骤并等待下一组指令时,集群将进入 WAITING 状态。如果您还有要处理的数据,则可添加更多步骤。如果您不再需要长时间运行的集群,则必须手动终止它。手动终止集群后,它先进入 SHUTTING_DOWN 状态,再进入 TERMINATED 状态。

    • 如果您通过启用自动终止或在 API 中使用 KeepJobFlowAliveWhenNoSteps 参数将集群配置为暂时性集群,则在完成所有步骤后,集群会自动进入 SHUTTING_DOWN 状态。实例终止,集群中存储的所有数据都会删除。存储在其他位置 (如 Amazon S3 存储桶) 的信息仍保留。关闭流程完成后,集群状态设为 COMPLETED

集群过程中如果出现故障,则会终止该集群及其所有的实例,除非:a) 您启用终止保护; 或 b) 您在 StepConfig 中为步骤提供了 ActionOnFailure。集群上存储的任何数据都会被删除。集群状态设为 TERMINATED_WITH_ERRORS。如果您启用了终止保护,以便在失败时从集群检索数据,则不终止集群。待彻底完成与集群有关的工作后,您可以取消终止保护并终止集群。有关更多信息,请参阅 管理集群的终止

下图显示的是集群的生命周期以及生命周期的每个阶段是如何映射到具体的集群状态的。

有关集群状态的更多信息,请参阅 Amazon EMR API Reference 中的 JobFlowExecutionStatusDetail 数据类型。有关提交步骤和配置集群生命周期的更多信息,请参阅向集群提交工作将集群配置为暂时性或长时间运行的集群