支持的应用程序和功能
本主题提供有关 Amazon EMR 集群中 HDFS NameNode 和 YARN ResourceManager 的 Hadoop 高可用性功能的信息,以及高可用性功能如何与开源应用程序和其他 Amazon EMR 功能配合使用。
高可用性 HDFS
具有多个主节点的 Amazon EMR 集群在 Hadoop 中启用 HDFS NameNode 高可用性功能。有关更多信息,请参阅 HDFS 高可用性
在 Amazon EMR 集群中,两个或更多个单独的节点配置为 NameNodes。一个 NameNode 处于 active
状态,另一个则处于 standby
状态。如果具有 active
NameNode 的节点发生故障,Amazon EMR 将会启动自动 HDFS 故障转移过程。具有 standby
NameNode 的节点将变成 active
并接管集群中的所有客户端操作。Amazon EMR 用新的主节点替换故障的主节点,新主节点将作为 standby
重新加入。
注意
在 Amazon EMR 版本 5.23.0 到 5.30.1 中,三个主节点中只有两个运行 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 用新的主节点替换故障的主节点,新节点将作为 standby
重新加入 ResourceManager 仲裁。
您可以针对任何主节点连接到“http://master-public-dns-name
:8088/cluster”,它会自动将您引导至 active
资源管理器。要找出哪个资源管理器是 active
,请使用 SSH 连接到集群中的任何主节点。然后运行以下命令以获取三个主节点及其状态的列表:
yarn rmadmin -getAllServiceState
具有多个主节点的 Amazon EMR 集群中支持的应用程序
您可以在具有多个主节点的 Amazon EMR 集群上安装和运行以下应用程序。对于每个应用程序,主节点失效转移过程各不相同。
应用程序 | 主节点失效转移期间的可用性 | 注意 |
---|---|---|
Flink | 可用性不受主节点失效转移的影响 |
在 Amazon EMR 上作为 YARN 应用程序运行的 Flink 任务。Flink 的 JobManager 在核心节点上作为 YARN 的 ApplicationMaster 运行。JobManager 不受主节点失效转移过程的影响。 如果您使用 Amazon EMR 版本 5.27.0 或更早版本,则 JobManager 是单点故障。当 JobManager 失败时,它会失去所有作业状态,并且不会恢复正在运行的作业。通过配置应用程序尝试计数、开展检查点检验并启用 ZooKeeper 作为 Flink 的状态存储,您可以启用 JobManager 高可用性。有关更多信息,请参阅在包括多个主节点的 Amazon EMR 集群中配置 Flink。 从 Amazon EMR 版本 5.28.0 开始,无需手动配置即可启用 JobManager 高可用性。 |
Ganglia | 可用性不受主节点失效转移的影响 |
Ganglia 在所有主节点上可用,因此 Ganglia 可以在主节点失效转移过程中继续运行。 |
Hadoop | 高可用性 |
当处于活动状态的主节点发生故障时,HDFS NameNode 和 YARN ResourceManager 会自动故障转移到备用节点。 |
HBase |
高可用性 |
当处于活动状态的主节点发生故障时,HBase 会自动故障转移到备用节点。 如果通过 REST 或 Thrift 服务器连接到 HBase,则必须在处于活动状态的主节点发生故障时切换到其他主节点。 |
HCatalog |
可用性不受主节点失效转移的影响 |
HCatalog 是在 Hive 元数据仓上构建的,而 Hive 元数据仓存在于集群之外。在主节点失效转移过程中,HCatalog 仍然可用。 |
JupyterHub | 高可用性 |
JupyterHub 安装在所有三个主实例上。强烈建议配置笔记本电脑持久性,以防止在出现主节点故障时丢失笔记本。有关更多信息,请参阅在 Amazon S3 中为笔记本配置持久性。 |
Livy | 高可用性 |
Livy 安装在所有三个主节点上。当处于活动状态的主节点发生故障时,您将无法访问当前的 Livy 会话,并需要在不同的主节点或新的替换节点上创建新的 Livy 会话。 |
Mahout |
可用性不受主节点失效转移的影响 |
由于 Mahout 没有进程守护程序,因此不受主节点失效转移过程的影响。 |
MXNet |
可用性不受主节点失效转移的影响 |
由于 MXNet 没有进程守护程序,因此不受主节点失效转移过程的影响。 |
Phoenix |
高可用性 |
Phoenix 的查询服务器仅在三个主节点之一上运行。所有三个主节点上的 Phoenix 都配置为连接到 Phoenix 查询服务器。您可以通过使用 |
Pig |
可用性不受主节点失效转移的影响 |
由于 Pig 没有进程守护程序,因此不受主节点失效转移过程的影响。 |
Spark | 高可用性 |
所有 Spark 应用程序都在 YARN 容器中运行,并且可以像高可用性 YARN 功能一样对主节点失效转移做出反应。 |
Sqoop | 高可用性 |
默认情况下,sqoop-job 和 sqoop-metastore 将数据(作业描述)存储在运行该命令的主节点的本地磁盘上,如果您想在外部数据库上保存元数据仓数据,请参阅 Apache Sqoop 文档 |
Tez |
高可用性 |
由于 Tez 容器在 YARN 上运行,因此在主节点失效转移过程中,Tez 的行为与 YARN 相同。 |
TensorFlow |
可用性不受主节点失效转移的影响 |
由于 TensorFlow 没有进程守护程序,因此不受主节点失效转移过程的影响。 |
Zeppelin |
高可用性 |
Zeppelin 安装在所有三个主节点上。Zeppelin 默认将注释和解释器配置存储在 HDFS 中,以防止数据丢失。解释器会话在所有三个主实例间完全隔离。发生主节点故障时,会话数据将丢失。建议不要在不同的主实例上同时修改同一注释。 |
ZooKeeper | 高可用性 |
ZooKeeper 是 HDFS 自动故障转移功能的基础。ZooKeeper 提供高可用性服务,用于维护协调数据、通知客户端数据的更改以及监控客户端的故障。有关更多信息,请参阅 HDFS 自动故障转移 |
要在具有多个主节点的 Amazon EMR 集群中运行以下应用程序,您必须配置外部数据库。外部数据库位于集群外部,在主节点失效转移过程中能够永久保存数据。对于以下应用程序,服务组件将在主节点失效转移过程中自动恢复,但活动任务可能会失败,需要重试。
应用程序 | 主节点失效转移期间的可用性 | 注意 |
---|---|---|
Hive | 仅适用于服务组件的高可用性 |
Hive 的外部元数据仓是必需的。这必须是一个 MySQL 外部元数据仓,因为 PostgreSQL 不支持多主集群。有关更多信息,请参阅为 Hive 配置外部元存储。 |
Hue | 仅适用于服务组件的高可用性 |
Hue 的外部数据库是必需的。有关更多信息,请参阅在 Amazon RDS 中将 Hue 与远程数据库结合使用。 |
Oozie |
仅适用于服务组件的高可用性 |
Oozie 的外部数据库是必需的。有关更多信息,请参阅在 Amazon RDS 中将 Oozie 与远程数据库结合使用。 Oozie-server 和 oozie-client 安装在所有三个主节点上。默认情况下,oozie 客户端配置为连接到正确的 oozie 服务器。 |
PrestoDB 或 PrestoSQL/Trino |
仅适用于服务组件的高可用性 |
PrestoDB(或 Amazon EMR 6.1.0 至 6.3.0 版本的 PrestoSQL 或 Amazon EMR 6.4.0 以及跟高版本的 Trino)的外部 Hive 元数据是必需的。您可以将 Presto 与 Amazon Glue 数据目录结合使用,也可以使用适用于 Hive 的外部 MySQL 数据库。 由于 Presto CLI 安装在所有三个主节点上,因此您可以使用它从任何主节点访问 Presto 协调器。Presto 协调器仅安装在一个主节点上。您可以通过调用 Amazon EMR |
注意
当主节点发生故障时,Java 数据库连接(JDBC)或开放式数据库连接(ODBC)将终止其与主节点的连接。您可以连接到任何剩余的主节点以继续工作,因为 Hive 元存储进程守护程序在所有主节点上运行。或者您可以等待故障的主节点被替换。
Amazon EMR 功能如何在具有多个主节点的集群中工作
使用 SSH 连接到主节点
您可以采用与连接到单个主节点相同的方式,使用 SSH 连接到 Amazon EMR 集群中三个主节点中的任何一个。有关更多信息,请参阅使用 SSH 连接到主节点。
如果主节点发生故障,与该主节点的 SSH 连接将终止。要继续工作,您可以连接到另外两个主节点之一。或者,您可以在 Amazon EMR 用新的主节点替换故障的节点后访问新的主节点。
注意
替换主节点的私有 IP 地址与前一个相同。替换主节点的公有 IP 地址可能会更改。您可以在控制台中或使用 Amazon CLI 中的 describe-cluster
命令检索新的 IP 地址。
NameNode 仅在两个主节点上运行。但是,您可以运行 hdfs
CLI 命令并操作任务以访问所有三个主节点上的 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 集群目前不支持以下 Amazon EMR 功能:
-
EMR Notebooks
-
实例集
-
一键访问持久性 Spark 历史记录服务器
-
持久性应用程序用户界面
-
目前,具有多个主节点的 Amazon EMR 集群或与 Amazon Lake Formation 集成的 Amazon EMR 集群不支持一键式访问持久性应用程序用户界面。
注意
要在集群中使用 Kerberos 身份验证,您必须配置外部 KDC。
从 Amazon EMR 版本 5.27.0 开始,您可以在具有多个主节点的 Amazon EMR 集群上配置 HDFS 透明加密。有关更多信息,请参阅 Amazon EMR 上的 HDFS 中的透明加密。