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

支持的应用程序和功能

本主题提供有关 EMR 集群中 HDFS NameNode 和 YARN ResourceManager 的 Hadoop 高可用性功能的信息,以及高可用性功能如何与开源应用程序和其他 EMR 功能配合使用。

高可用性 HDFS

具有多个主节点的 EMR 集群 在 Hadoop 中启用 HDFS NameNode 高可用性功能。有关更多信息,请参阅 HDFS 高可用性

在 EMR 集群中,NameNode 仅在三个主节点中的两个节点上运行。一个 NameNode 处于 active 状态,另一个处于 standby 状态。如果具有 active NameNode 的主节点发生故障,EMR 将会启动自动 HDFS 故障转移过程。具有 standby NameNode 的主节点将变成 active 并接管集群中的所有客户端操作。EMR 用新的主节点替换故障的主节点,新主节点将作为 standby 重新加入。

如果需要找出哪个 NameNode 是 active,可以使用 SSH 连接到集群中的任何主节点并运行以下命令:

hdfs haadmin -getAllServiceState

输出列出安装了 NameNode 的两个节点及其状态。例如,

ip-##-#-#-##1.ec2.internal:8020 active ip-##-#-#-##2.ec2.internal:8020 standby

高可用性 YARN ResourceManager

具有多个主节点的 EMR 集群 在 Hadoop 中启用 YARN ResourceManager 高可用性功能。有关更多信息,请参阅 ResourceManager 高可用性

在 具有多个主节点的 EMR 集群 中,YARN ResourceManager 在所有三个主节点上运行。一个 ResourceManager 处于 active 状态,另两个处于 standby 状态。如果具有 active ResourceManager 的主节点发生故障,EMR 将会启动自动故障转移过程。具有 standby ResourceManager 的主节点会接管所有操作。EMR 用新的主节点替换故障的主节点,新节点将作为 standby 重新加入 ResourceManager 仲裁。

您可以针对任何主节点连接到“http://master-public-dns-name:8088/cluster”,它会自动将您引导至 active 资源管理器。要找出哪个资源管理器是 active,请使用 SSH 连接到集群中的任何主节点。然后运行以下命令以获取三个主节点及其状态的列表:

yarn rmadmin -getAllServiceState

具有多个主节点的 EMR 集群中支持的应用程序

您可以在 具有多个主节点的 EMR 集群 上安装和运行以下应用程序:

应用程序 主节点故障转移期间的可用性 备注
Ganglia

可用性不受主节点故障转移的影响

Ganglia 在所有主节点上可用,因此 Ganglia 可以在主节点故障转移过程中继续运行。

Hadoop

高可用性

当处于活动状态的主节点发生故障时,HDFS NameNode 和 YARN ResourceManager 会自动故障转移到备用节点。

HBase

高可用性

当处于活动状态的主节点发生故障时,HBase 会自动故障转移到备用节点。

如果通过 REST 或 Thrift 服务器连接到 HBase,则必须在处于活动状态的主节点发生故障时切换到其他主节点。

HCatalog

可用性不受主节点故障转移的影响

HCatalog 是在 Hive 元数据仓上构建的,而 Hive 元数据仓存在于集群之外。在主节点故障转移过程中,HCatalog 仍然可用。

Hive

仅适用于服务组件的高可用性

要在 具有多个主节点的 EMR 集群 上运行 Hive,必须为 Hive 指定外部元数据仓。当主节点发生故障时,任何本地数据都将丢失。外部元数据仓存在于集群之外,在主节点故障转移过程中能够永久保存数据。

Livy

高可用性

Livy 安装在所有三个主节点上。当处于活动状态的主节点发生故障时,您将无法访问当前的 Livy 会话,并需要在不同的主节点或新的替换节点上创建新的 Livy 会话。

Mahout

可用性不受主节点故障转移的影响

由于 Mahout 没有守护程序,因此它不受主节点故障转移过程的影响。

Pig

可用性不受主节点故障转移的影响

由于 Pig 没有守护程序,因此它不受主节点故障转移过程的影响。

Spark

高可用性

所有 Spark 应用程序都在 YARN 容器中运行,并且可以像高可用性 YARN 功能一样对主节点故障转移做出反应。

Tez

高可用性

由于 Tez 容器在 YARN 上运行,因此在主节点故障转移过程中,Tez 的行为与 YARN 相同。

已知问题:Tez UI 在 具有多个主节点的 EMR 集群 上不起作用。

ZooKeeper

高可用性

ZooKeeper 是 HDFS 自动故障转移功能的基础。ZooKeeper 提供高可用性服务,用于维护协调数据、通知客户端数据的更改以及监控客户端的故障。有关更多信息,请参阅 HDFS 自动故障转移

Pig、Hue、JupyterHub、MXNet、Zeppelin、Presto、Sqoop、Phoenix、Flink、Oozie 和 TensorFlow 当前在 具有多个主节点的 EMR 集群 中不受支持。

注意

当主节点发生故障时,Java 数据库连接 (JDBC) 或开放式数据库连接 (ODBC) 将终止其与主节点的连接。您可以连接到任何剩余的主节点以继续工作,因为 Hive 元数据仓守护程序在所有主节点上运行。或者您可以等待故障的主节点被替换。

EMR 功能如何在具有多个主节点的集群中工作

使用 SSH 连接到主节点

您可以使用 SSH 以与连接到单个主节点相同的方式连接到 EMR 集群中三个主节点中的任何一个。有关更多信息,请参阅使用 SSH 连接到主节点

如果主节点发生故障,则与该主节点的 SSH 连接将结束。要继续工作,您可以连接到另外两个主节点之一。或者,您可以在 EMR 用新的主节点替换故障的节点后访问新的主节点。

注意

替换主节点的私有 IP 地址与前一个相同。替换主节点的公有 IP 地址可能会更改。您可以在控制台中或使用 AWS CLI 中的 describe-cluster 命令检索新的 IP 地址。

NameNode 仅在两个主节点上运行。但是,您可以运行 hdfs CLI 命令并操作作业以访问所有三个主节点上的 HDFS。

在具有多个主节点的 EMR 集群中的处理步骤

您可以使用与具有单个主节点的集群中的步骤相同的方式向 具有多个主节点的 EMR 集群 提交步骤。有关更多信息,请参阅向集群提交工作

以下是在 具有多个主节点的 EMR 集群 中处理步骤时的注意事项:

  • 如果主节点发生故障,主节点上运行的步骤将标记为 FAILED。任何本地写入的数据都将丢失。但是,状态 FAILED 可能无法反映步骤的实际状态。

  • 如果在主节点发生故障时一个正在运行的步骤已启动 YARN 应用程序,由于主节点的自动故障转移,该步骤可以继续并成功。

  • 建议您通过参考作业的输出来检查步骤的状态。例如,MapReduce 作业使用 _SUCCESS 文件来确定作业是否成功完成。

  • 建议您将 ActionOnFailure 参数设置为 CONTINUE 或 CANCEL_AND_WAIT,而不是 TERMINATE_JOB_FLOW 或 TERMINATE_CLUSTER。

具有多个主节点的 EMR 集群中不支持的功能

以下 EMR 功能目前在 具有多个主节点的 EMR 集群 中不可用:

  • EMR 笔记本

  • 实例队列

  • 在正在运行的集群中重新配置应用程序

  • Amazon EMR 上的 HDFS 中的透明加密

注意

要在集群中使用 Kerberos 身份验证,您必须配置外部 KDC。