支持 Amazon EMR 集群高可用性的功能以及它们如何与开源应用程序配合使用 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

支持 Amazon EMR 集群高可用性的功能以及它们如何与开源应用程序配合使用

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

高可用性 HDFS

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

在 Amazon EMR 集群中,两个或更多单独的节点配置为 NameNodes。一个NameNode 处于active状态,另一个处于standby状态。如果节点出现active NameNode 故障,Amazon 将EMR启动自动HDFS故障转移过程。具有的节点standbyNameNode 将变为active并接管集群中的所有客户机操作。Amazon EMR 将故障节点替换为新节点,然后新节点重新加入。standby

注意

在 Amazon 5.23.0 及之前的 5.30.1 EMR 版本中,三个主节点中只有两个运行。HDFS NameNode

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

hdfs haadmin -getAllServiceState

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

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

高可用性 YARN ResourceManager

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

在具有多个主节点的 Amazon EMR 集群中,在所有三个主节点上YARN ResourceManager 运行。一个 ResourceManager 处于active状态,另外两个处于standby状态。如果主节点active ResourceManager 出现故障,Amazon 将EMR启动自动故障转移过程。带有的主节点standby ResourceManager 接管所有操作。Amazon EMR 用新的主节点替换出现故障的主节点,然后该主节点作为重新加入 ResourceManager 法定人数。standby

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

yarn rmadmin -getAllServiceState

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

您可以在具有多个主节点的 Amazon EMR 集群上安装和运行以下应用程序。对于每个应用程序,主节点失效转移过程各不相同。

应用程序 主节点失效转移期间的可用性 备注
Flink

可用性不受主节点失效转移的影响

Amazon 上的 Flink 任务作为YARN应用程序EMR运行。Flink ApplicationMasters 在核心节点YARN上按原样JobManagers 运行。JobManager 不受主节点故障转移过程的影响。

如果您使用亚马逊EMR版本 5.27.0 或更早版本,则 JobManager 是单点故障。 JobManager 失败时,它将丢失所有作业状态,并且不会恢复正在运行的作业。您可以通过配置应用程序尝试次数、检查点操作以及启用 Flink 的状态存储来实现 JobManager ZooKeeper 高可用性。有关更多信息,请参阅在具有多个主节点的 Amazon EMR 集群上配置 Flink

从 Amazon 5.28.0 EMR 版本开始,无需手动配置即可实现 JobManager 高可用性。

Ganglia

可用性不受主节点失效转移的影响

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

Hadoop

高可用性

HDFS NameNode 并在主动主节点出现故障时YARN ResourceManager 自动故障转移到备用节点。

HBase

高可用性

HBase当主节点出现故障时,会自动故障转移到备用节点。

如果您HBase通过REST或 Thrift 服务器进行连接,则在主动主节点出现故障时必须切换到其他主节点。

HCatalog

可用性不受主节点失效转移的影响

HCatalog建立在集群外部的 Hive 元数据仓之上。 HCatalog在主节点故障切换过程中仍然可用。

JupyterHub

高可用性

JupyterHub 已安装在所有三个主实例上。强烈建议配置 Notebook 持久性,以防止在出现主节点故障时丢失 Notebook。有关更多信息,请参阅在 Amazon S3 中为 Notebooks 配置持久性

Livy

高可用性

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

Mahout

可用性不受主节点失效转移的影响

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

MXNet

可用性不受主节点失效转移的影响

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

Phoenix

高可用性

Phoenix'仅在三个主节点中的一个上 QueryServer 运行。所有三个主机上的 Phoenix 都配置为连接 Phoenix QueryServer。您可以通过使用 /etc/phoenix/conf/phoenix-env.sh 文件找到 Phoenix 查询服务器的私有 IP。

Pig

可用性不受主节点失效转移的影响

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

Spark

高可用性

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

Sqoop

高可用性

默认情况下,sqoop-job 和 sqoop-metastore 将数据(作业描述)存储在运行该命令的主节点的本地磁盘上,如果您想在外部数据库上保存元数据仓数据,请参阅 Apache Sqoop 文档

Tez

高可用性

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

TensorFlow

可用性不受主节点失效转移的影响

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

Zeppelin

高可用性

Zeppelin 安装在所有三个主节点上。齐柏林飞艇默认存储笔记和解释器配置,HDFS以防止数据丢失。解释器会话在所有三个主实例间完全隔离。发生主节点故障时,会话数据将丢失。建议不要在不同的主实例上同时修改同一注释。

ZooKeeper

高可用性

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

要在具有多个主节点的 Amazon EMR 集群中运行以下应用程序,必须配置外部数据库。外部数据库位于集群外部,在主节点失效转移过程中能够永久保存数据。对于以下应用程序,服务组件将在主节点失效转移过程中自动恢复,但活动任务可能会失败,需要重试。

应用程序 主节点失效转移期间的可用性 备注
Hive

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

Hive 的外部元数据仓是必需的。这必须是我的SQL外部元数据仓,因为多主集群不支持 Postgre SQL。有关更多信息,请参阅为 Hive 配置外部元存储

Hue

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

Hue 的外部数据库是必需的。有关更多信息,请参阅在 Amazon 中将 Hue 与远程数据库配合使用RDS

Oozie

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

Oozie 的外部数据库是必需的。有关更多信息,请参阅在 Ama RDS zon 中将 Oozie 与远程数据库配合使用

Oozie-server 和 oozie-client 安装在所有三个主节点上。默认情况下,oozie 客户端配置为连接到正确的 oozie 服务器。

PrestoDB 或 Presto /Trino SQL

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

需要用于 PrestoDB 的外部 Hive 元存储库(亚马逊 EMR 6.1.0-6.3.0 SQL 上的 Presto 或亚马逊 6.4.0 及更高版本上的 Trino)。EMR你可以将 Presto 与 Glue 数据 Amazon 目录配合使用,也可以使用 Hive 的外部 “我的SQL数据库”。

Prest CLI o 安装在所有三个主节点上,因此您可以使用它从任何主节点访问 Presto 协调器。Presto 协调器仅安装在一个主节点上。您可以通过调用 Amazon EMR describe-cluster API 并在响应中读取该MasterPublicDnsName字段的返回值来找到安装了 Presto 协调器的主节点的DNS名称。

注意

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

Amazon EMR 功能如何在具有多个主节点的集群中发挥作用

使用连接到主节点 SSH

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

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

注意

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

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

使用具有多个主节点的 Amazon EMR 集群中的步骤

您可以向具有多个主节点的 Amazon EMR 集群提交步骤,就像在具有单个主节点的集群中处理步骤一样。有关更多信息,请参阅向集群提交工作

以下是在具有多个主节点的 Amazon EMR 集群中使用步骤的注意事项:

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

  • 如果某个正在运行的步骤在主节点出现故障时启动了YARN应用程序,则由于主节点会自动进行故障转移,因此该步骤可以继续并成功。

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

  • 建议您将 ActionOnFailure 参数设置为CONTINUE、或 CANCEL AND _WAIT,而不是 TERMINATE JOB _ FLOW 或 TERMINATE _ CLUSTER。

自动终止保护

Amazon EMR 会自动为具有多个主节点的所有集群启用终止保护,并覆盖您在创建集群时提供的任何步骤执行设置。您可以在集群启动后禁用终止保护。请参阅 为正在运行的集群配置终止保护。要关闭具有多个主节点的集群,您必须先修改集群属性,才能禁用终止保护。有关说明,请参阅 终止具有多个主节点的 Amazon EMR 集群

有关终止保护的更多信息,请参阅使用终止保护来保护您的 Amazon EMR 集群免遭意外关闭

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

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

  • EMR 笔记本

  • 一键访问持久性 Spark 历史记录服务器

  • 持久性应用程序用户界面

  • 对于具有多个主节点的亚马逊集群或与 La Amazon ke Formation 集成的亚马逊EMR集群,目前无法一键访问永久应用程序用户界面。EMR

注意

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

从 Amazon EMR 版本 5.27.0 开始,您可以在具有多个主节点的亚马逊EMR集群上配置HDFS透明加密。有关更多信息,请参阅 Amazon HDFS 上的透明加密EMR