为什么我的 Amazon EMR 集群因“应用程序预调配失败”错误而终止?

3 分钟阅读
0

我的 Amazon EMR 集群因“应用程序预调配失败”错误而终止。此错误消息意味着什么,我如何修复它?

解决方法

如果 Amazon EMR 在启动 EMR 集群时无法安装、配置或启动指定软件,您可能会看到“应用程序预调配失败”错误。以下部分向您显示如何查找和查看预调配日志。它们还向您显示了不同类型的错误以及可以采取的解决这些错误的步骤。

查看存储在 Amazon S3 中的 Amazon EMR 预调配日志

Amazon EMR 预调配日志存储在集群启动时指定的 Amazon Simple Storage Service(Amazon S3)存储桶中。日志的存储位置使用以下 Amazon S3 URI 语法:

s3://example-log-location/example-cluster-ID/node/example-primary-node-ID/provision-node/apps-phase/0/example-UUID/puppet.log.gz

**注意:**将 example-log-locationexample-cluster-IDexample-primary-node-IDexample-UUID 替换为系统的命名。

  1. 打开 Amazon EMR 控制台。在导航窗格中,选择 Clusters(集群)。然后,选择发生故障的 EMR 集群以查看集群的详细信息。
  2. Summary(摘要)部分中,选择“Terminated with errors”(因错误而终止),并记下错误消息中包含的主节点 ID。
  3. Cluster logs(集群日志)部分中,选择要重定向到 Amazon S3 控制台中的集群日志的 Amazon S3 位置 URL。
  4. 按照以下路径导航到您的 UUID 文件夹:node/example-primary-node-ID/provision-node/apps-phase/0/example-UUID/
    **注意:**将 example-primary-node-IDexample-UUID 替换为系统的命名。
  5. 在结果列表中,选择 puppet.log.gz,然后选择 Open(打开) ,以在新浏览器选项卡上查看预调配。

确定预调配日志中失败的原因

不支持的配置参数可能会导致错误。错误也可能是由错误的主机名、错误的密码或一般的操作系统问题造成的。在日志中搜索相关关键字,包括“error”或“fail”。

以下是常见错误类型的列表:

  • 使用 Amazon Relational Database Service(Amazon RDS)实例连接到外部元存储时出现问题。
  • 连接到外部密钥分发中心(KDC)时出现问题。
  • 启动 YARN ResourceManager 和 Hadoop NameNode 之类的服务时出现问题。
  • 下载或安装应用程序时出现问题。
  • S3 日志不可用。

使用 Amazon RDS 实例连接到外部元存储时出现问题

一些 Amazon EMR 应用程序(例如 Hive、Hue 或 Oozie)可以配置为将数据存储在外部数据库中,例如 Amazon RDS。当连接出现问题时,会显示一条消息。

以下是来自 Hive 的示例错误消息:

2022-11-26 02:59:36 +0000 /Stage[main]/Hadoop_hive::Init_metastore_schema/Exec[init hive-metastore schema]/returns (notice): org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version.
2022-11-26 02:59:36 +0000 /Stage[main]/Hadoop_hive::Init_metastore_schema/Exec[init hive-metastore schema]/returns (notice): Underlying cause: java.sql.SQLNonTransientConnectionException : Could not connect to address=(host=hostname)(port=3306)(type=master) : Socket fail to connect to host:hostname, port:3306. hostname
2022-11-26 02:59:36 +0000 /Stage[main]/Hadoop_hive::Init_metastore_schema/Exec[init hive-metastore schema]/returns (notice): SQL Error code: -1

要解决此类错误,请执行以下操作:

  • 验证 RDS 实例的主机名、用户、密码和数据库是否正确。
  • 验证 RDS 实例安全组入站规则是否允许来自 Amazon EMR 主节点安全组的连接。

连接外部 KDC 时出现问题

Amazon EMR 允许您配置外部 KDC 以增加额外的安全层。您也可以与 Active Directory 服务器创建信任关系。在联系 KDC 或加入域时出现问题时,会显示一条消息。

以下是来自 Puppet 的示例错误消息:

2022-11-26 03:02:01 +0000 Puppet (err): 'echo "${AD_DOMAIN_JOIN_PASSWORD}" | realm join -v -U "${AD_DOMAIN_JOIN_USER}"@"${CROSS_REALM_TRUST_REALM}" "${CROSS_REALM_TRUST_DOMAIN}"' returned 1 instead of one of [0]
2022-11-26 03:02:01 +0000 /Stage[main]/Kerberos::Ad_joiner/Exec[realm_join]/returns (err): change from 'notrun' to ['0'] failed: 'echo "${AD_DOMAIN_JOIN_PASSWORD}" | realm join -v -U "${AD_DOMAIN_JOIN_USER}"@"${CROSS_REALM_TRUST_REALM}" "${CROSS_REALM_TRUST_DOMAIN}"' returned 1 instead of one of [0]

要解决此类错误,请执行以下操作:

  • 验证 Kerberos 领域的拼写是否正确。
  • 验证 KDC 管理密码拼写是否正确。
  • 验证 Active Directory 加入用户和密码拼写是否正确。
  • 验证 Active Directory 加入用户是否存在于 Active Directory 中并且具有正确的权限。
  • 验证 KDC 和 Active Directory 服务器是否在 Amazon EC2 上。然后,验证 KDC 和 Active Directory 安全组入站规则是否允许来自 Amazon EMR 主节点安全组的连接。
  • 验证 KDC 和 Active Directory 不在 Amazon EC2 上。然后,验证 KDC 和 Active Directory 是否允许来自 EMR 集群虚拟私有云(VPC)和子网的连接。

启动 YARN ResourceManager、Hadoop NameNode 或 Spark History Server 之类的服务时出现问题

Amazon EMR 允许在 EMR 集群启动时自定义配置所有应用程序。但是,有时候,这些配置会阻止服务启动。当出现阻止服务启动的问题时,会出现一条消息。

以下是来自 Spark History Server 的示例错误消息:

2022-11-26 03:34:13 +0000 Puppet (err): Systemd start for spark-history-server failed!
journalctl log for spark-history-server:
-- Logs begin at Sat 2022-11-26 03:27:57 UTC, end at Sat 2022-11-26 03:34:13 UTC. --
Nov 26 03:34:10 ip-192-168-1-32 systemd[1]: Starting Spark history-server...
Nov 26 03:34:10 ip-192-168-1-32 spark-history-server[1076]: Starting Spark history-server (spark-history-server):[OK]
Nov 26 03:34:10 ip-192-168-1-32 su[1112]: (to spark) root on none
Nov 26 03:34:13 ip-192-168-1-32 systemd[1]: spark-history-server.service: control process exited, code=exited status=1
Nov 26 03:34:13 ip-192-168-1-32 systemd[1]: Failed to start Spark history-server.
Nov 26 03:34:13 ip-192-168-1-32 systemd[1]: Unit spark-history-server.service entered failed state.
Nov 26 03:34:13 ip-192-168-1-32 systemd[1]: spark-history-server.service failed.
2022-11-26 03:34:13 +0000 /Stage[main]/Spark::History_server/Service[spark-history-server]/ensure (err): change from 'stopped' to 'running' failed: Systemd start for spark-history-server failed!
journalctl log for spark-history-server:

要解决此类错误,请执行以下操作:

  • 验证未能启动的服务。检查提供的配置拼写是否正确。
  • 浏览以下路径查看 S3 日志,以调查失败的原因:s3://example-log-location/example-cluster-ID/node/example-primary-node-ID/applications/example-failed-application/example-failed-service.gz
    **注意:**将 example-log-locationexample-cluster-IDexample-primary-node-IDexample-failed-applicationexample-failed-service 替换为系统的命名。

下载或安装应用程序时出现问题

Amazon EMR 可以安装很多应用程序。但是,有时候,会出现无法下载或安装一个应用程序的问题。这可能会导致 EMR 集群失败。发生此故障时,预调配日志无法完成。您必须改为查看 stderr.gz 日志,才能找您到由 yum 安装失败引起的类似消息。

以下是来自 stderr.gz 的示例错误消息:

stderr.gz
Error Summary
-------------
Disk Requirements:
  At least 2176MB more space needed on the / filesystem.
  
2022-11-26 03:18:44,662 ERROR Program: Encountered a problem while provisioning
java.lang.RuntimeException: Amazon-linux-extras topics enabling or yum packages installation failed.

要解决此类错误,请在 EMR 集群启动期间增加 Amazon Elastic Block Store(Amazon EBS)根卷。

S3 日志不可用

Amazon EMR 未能预调配应用程序,并且 Amazon S3 中没有生成任何日志。在这种情况下,很可能是网络错误导致的 S3 日志记录失败。

要解决此类错误,请执行以下操作:

  • 验证 EMR 集群启动期间 Logging(日志记录)选项是否已打开。有关更多信息,请参阅配置集群日志记录和调试
  • 使用自定义 AMI 时,请确认没有防火墙规则干扰所需的 Amazon EMR 网络设置。有关更多信息,请参阅使用 Amazon EMR 管理的安全组
  • 使用自定义 AMI 时,请检查是否有任何主节点出现故障。打开 Amazon EMR 控制台,然后在导航窗格中选择 Hardware(硬件)以确定集群是否无法启动任何主节点。
  • 使用自定义 AMI 时,请确认您遵循的是最佳实践。有关更多信息,请参阅使用自定义 AMI

相关信息

EMR 集群预调配失败

AWS 官方
AWS 官方已更新 1 年前