

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

# 了解 Amazon EMR 中的节点类型：主节点、核心节点和任务节点
<a name="emr-master-core-task-nodes"></a>

通过此节，您可以了解 Amazon EMR 如何使用其中每个节点类型并将其作为集群容量规划的基础。

## 主节点
<a name="emr-plan-master"></a>

主节点管理集群，通常运行分布式应用程序的主要组件。例如，主节点运行 YARN ResourceManager 服务来管理应用程序的资源。它还运行 HDFS NameNode 服务，跟踪提交到集群的任务的状态，并监控实例组的运行状况。

要监控集群的进度并直接与应用程序交互，您可以作为 Hadoop 用户通过 SSH 连接到主节点。有关更多信息，请参阅 [使用 SSH 连接到 Amazon EMR 集群主节点](emr-connect-master-node-ssh.md)。通过连接到主节点，您可以直接访问目录和文件，如 Hadoop 日志文件。有关更多信息，请参阅 [查看 Amazon EMR 日志文件](emr-manage-view-web-log-files.md)。您还可以查看应用程序以主节点上运行的网站形式发布的用户界面。有关更多信息，请参阅 [查看 Amazon EMR 集群上托管的 Web 界面](emr-web-interfaces.md)。

**注意**  
在 Amazon EMR 5.23.0 及更高版本中，您可以启动包含三个主节点的集群，以支持 YARN 资源管理器、HDFS、Spark、H NameNode ive 和 Ganglia 等应用程序的高可用性。使用此功能，主节点不再发生潜在的单点故障。如果其中一个主节点出现故障，Amazon EMR 会自动故障转移到备用主节点，并将出现故障的主节点替换为具有相同配置和引导操作的新主节点。有关更多信息，请参阅[计划和配置主节点](https://docs.amazonaws.cn/emr/latest/ManagementGuide/emr-plan-ha.html)。

## 核心节点
<a name="emr-plan-core"></a>

核心节点由主节点进行管理。核心节点运行数据节点守护程序以将数据存储作为 Hadoop Distributed File System（HDFS）的一部分进行协调。它们还运行任务跟踪守护程序，并对安装的应用程序所需的数据执行其它并行计算任务。例如，核心节点运行 YARN NodeManager 守护程序、Hadoop MapReduce 任务和 Spark 执行程序。

每个集群只能有一个核心实例组或实例机群，但可在实例组或实例机群中的多个 Amazon EC2 实例上运行多个节点。对于实例组，您可以在集群运行时添加和删除 Amazon EC2 实例。您还可以设置弹性伸缩，以根据指标的值来添加实例。有关使用实例组配置添加和删除 Amazon EC2 实例的更多信息，请参阅[使用 Amazon EMR 集群扩展来适应不断变化的工作负载](emr-scale-on-demand.md)。

对于实例集，您可以通过为按需实例与竞价型实例修改实例集的*目标容量*来高效地添加和删除实例。有关目标容量的更多信息，请参阅[实例集选项](emr-instance-fleet.md#emr-instance-fleet-options)。

**警告**  
从运行的核心节点删除 HDFS 守护程序或终止核心节点将面临数据丢失的风险。配置核心节点以使用竞价型实例时，请务必小心。有关更多信息，请参阅[什么时候应该使用竞价型实例？](emr-plan-instances-guidelines.md#emr-plan-spot-instances)。

## 任务节点
<a name="emr-plan-task"></a>

您可以使用任务节点来增强能力，以便对数据执行并行计算任务，例如 Hadoop MapReduce 任务和 Spark 执行器。任务节点不运行数据节点守护程序，也不在 HDFS 中存储数据。与使用核心节点一样，您可以将任务节点添加到集群，方式是将 Amazon EC2 实例添加到现有的统一实例组或修改任务实例机群的目标容量。

对于统一实例组配置，您最多可拥有 48 个任务实例组。通过此方式添加实例组，使您能够将 Amazon EC2 实例类型和定价选项混合在一起，例如按需型实例和 Spot 实例。这使您能够灵活且经济有效地响应工作负载要求。

对于实例集配置，提供了混合实例类型和购买选项的内置功能，因此仅有一个任务实例集。

由于竞价型实例通常用于运行任务节点，而 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 文件中修改相关属性，可能会破坏此功能或调整此功能。

从 Amazon EMR 6.x 发行版系列开始，默认情况下禁用 YARN 节点标注功能。默认情况下，应用程序主进程可以在核心节点和任务节点上运行。您可以通过配置以下属性来启用 YARN 节点标注功能：
+ `yarn.node-labels.enabled: true`
+ `yarn.node-labels.am.default-node-label-expression: 'CORE'`

从 Amazon EMR 7.x 发行版系列开始，Amazon EMR 按实例市场类型（如按需型或竞价型）为实例分配 YARN 节点标签。您可以配置以下属性，来启用节点标签并将应用程序进程限制为 ON\$1DEMAND：

```
yarn.node-labels.enabled: true
yarn.node-labels.am.default-node-label-expression: 'ON_DEMAND'
```

如果您使用的是 Amazon EMR 7.0 或更高版本，则可以使用以下配置将应用程序进程限制为具有 `CORE` 标签的节点：

```
yarn.node-labels.enabled: true
yarn.node-labels.am.default-node-label-expression: 'CORE'
```

对于 Amazon EMR 7.2 及更高版本，如果您的集群使用带有节点标签的托管扩展，Amazon EMR 将尝试根据应用程序进程和执行程序需求独立扩展集群。

例如，如果使用 Amazon EMR 7.2 或更高版本，并将应用程序进程限制为 `ON_DEMAND` 节点，则当应用程序进程需求增加时，托管扩展会扩展 `ON_DEMAND` 节点。同样，如果将应用程序进程限制为 `CORE` 节点，则当应用程序进程需求增加时，托管扩展会纵向扩展 `CORE` 节点。

有关特定属性的信息，请参阅[用于防止因任务节点竞价型实例终止而导致任务失败的 Amazon EMR 设置](emr-plan-instances-guidelines.md#emr-plan-spot-YARN)。