重新配置 Amazon EMR 集群的实例集 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

重新配置 Amazon EMR 集群的实例集

对于 Amazon EMR 5.21.0 和更高版本,您可以重新配置集群应用程序,并为运行的集群中的每个实例集指定额外的配置分类。为此,您可以使用 Amazon 命令行界面 (Amazon CLI) 或 Amazon SDK。

您可以通过查看 CloudWatch 事件来跟踪实例集的状态。有关更多信息,请参阅实例集重新配置事件

注意

您只能覆盖在集群创建期间指定的集群 Configurations 对象。有关 Configurations 对象的更多信息,请参阅 RunJobFlow 请求语法。如果现有配置与您提供的文件之间存在差异,Amazon EMR 会将手动修改的配置(例如您在使用 SSH 连接到集群时修改的配置)重置为指定实例集的集群默认设置。

当您使用 Amazon EMR 控制台、Amazon 命令行界面 (Amazon CLI) 或 Amazon SDK 提交重新配置请求时,Amazon EMR 会检查现有集群上的配置文件。如果现有配置与您提供的文件之间存在差异,Amazon EMR 会启动重新配置操作,重新启动某些应用程序,并将任何手动修改的配置(例如您在使用 SSH 连接到集群时修改的配置)重置为指定实例集的集群默认设置。

重新配置行为

重新配置会使用新提交的配置集来覆盖集群上的配置,并且可以覆盖在重新配置 API 之外进行的配置更改。

Amazon EMR 执行滚动过程来重新配置任务和核心实例集中的实例。每次只会修改和重启特定实例类型的一部分实例。如果您的实例集有多种不同的实例类型配置,它们将并行重新配置。

重新配置是在 InstanceTypeConfig 级别声明的。有关视觉示例,请参阅重新配置实例集。您可以在单个请求中提交包含一个或多个实例类型的更新配置设置的重新配置请求。您必须在修改请求中包括您的实例集中的所有实例类型;但是,配置字段已填充的实例类型将进行重新配置,而实例集中的其他 InstanceTypeConfig 实例保持不变。只有当指定实例类型的所有实例都完成重新配置时,重新配置才被视为成功。如果任何实例重新配置失败,则整个实例集将自动恢复到其上次已知的稳定配置。

限制

在重新配置正在运行的集群中的实例集时,请考虑以下限制:

  • 尤其是在应用程序未正确配置时,非 YARN 应用程序可能会在重新启动期间失败或导致集群问题。接近最大内存和 CPU 使用率的集群可能会在重新启动过程后遇到问题。对于主实例集而言,情况尤其如此。请参阅排查实例集重新配置问题部分。

  • 调整大小和重新配置操作不会并行进行。重新配置请求将等待正在进行的调整大小,反之亦然。

  • 调整大小和重新配置操作不会并行进行。重新配置请求将等待正在进行的调整大小,反之亦然。

  • 在重新配置实例集后,Amazon EMR 将重新启动应用程序,从而使新配置生效。如果在重新配置期间正在使用应用程序,则可能会出现作业失败或其它意外应用程序行为。

  • 如果某实例集下任何实例类型配置的重新配置失败,Amazon EMR 会将整个实例集的配置参数恢复为以前的有效版本,同时发出事件并更新状态详细信息。如果恢复过程也失败,您必须提交新的 ModifyInstanceFleet 请求以从 ARRESTED 状态恢复实例集。恢复失败会导致实例集重新配置事件和状态更改。

  • 仅在 Amazon EMR 5.23.0 和更高版本中支持 Phoenix 配置分类的重新配置请求,在 Amazon EMR 5.21.0 或 5.22.0 版本中不支持该请求。

  • 仅在 Amazon EMR 5.30.0 和更高版本中支持 HBase 配置分类的重新配置请求,在 Amazon EMR 5.23.0 到 5.29.0 版本中不支持该请求。

  • 具有多个主节点的 Amazon EMR 集群不支持重新配置 hdfs-encryption-zones 分类或任何 Hadoop KMS 配置分类。

  • Amazon EMR 当前不支持需要重启 YARN ResourceManager 的 YARN 容量计划程序的某些重新配置请求。例如,您无法完全删除队列。

  • 当 YARN 需要重启时,所有正在运行的 YARN 作业通常会终止并丢失。这可能会导致数据处理延迟。要在 YARN 重启期间运行 YARN 作业,您可以创建一个具有多个主节点的 Amazon EMR 集群,或者在 yarn-site 配置分类中将 yarn.resourcemanager.recovery.enabled 设置为 true。有关使用多个主节点的详细信息,请参阅 YARN ResourceManager 高可用性

重新配置实例集

Using the Amazon CLI

使用 modify-instance-fleet 命令为正在运行的集群中的一个实例集指定新配置。

注意

在以下示例中,将 j-2AL4XXXXXX5T9 替换为您的集群 ID,并将 if-1xxxxxxx9 替换为您的实例集 ID。

示例 – 替换实例集的配置

警告

指定您在启动时使用的所有 InstanceTypeConfig 字段。不包括字段可能会导致覆盖您在启动时声明的规范。有关列表,请参阅 InstanceTypeConfig

以下示例引用了名为 instanceFleet.json 的配置 JSON 文件来编辑实例集的 YARN NodeManager 磁盘运行状况检查程序的属性。

实例集修改 JSON

  1. 准备配置分类,并在运行命令的相同目录中将其保存为 instanceFleet.json。

    { "InstanceFleetId":"if-1xxxxxxx9", "InstanceTypeConfigs": [ { "InstanceType": "m5.xlarge", other InstanceTypeConfig fields "Configurations": [ { "Classification": "yarn-site", "Properties": { "yarn.nodemanager.disk-health-checker.enable":"true", "yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage":"100.0" } } ] }, { "InstanceType": "r5.xlarge", other InstanceTypeConfig fields "Configurations": [ { "Classification": "yarn-site", "Properties": { "yarn.nodemanager.disk-health-checker.enable":"false", "yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage":"70.0" } } ] } ]
  2. 运行以下命令。

    aws emr modify-instance-fleet \ --cluster-id j-2AL4XXXXXX5T9 \ --region us-west-2 \ --instance-fleet instanceFleet.json

示例 – 向实例集添加配置

如果要向实例类型添加配置,还必须在新的 ModifyInstanceFleet 请求中包含以前为实例集指定的配置。否则,将删除以前指定的配置。

以下示例中,为 YARN NodeManager 虚拟内存检查程序添加了一个属性。此配置还包括 YARN NodeManager 磁盘运行状况检查程序以前指定的值,不会覆盖这些值。

  1. 在 instanceFleet.json 中准备以下内容,并将其保存在您将运行命令的同一目录中。

    { "InstanceFleetId":"if-1xxxxxxx9", "InstanceTypeConfigs": [ { "InstanceType": "m5.xlarge", other InstanceTypeConfig fields "Configurations": [ { "Classification": "yarn-site", "Properties": { "yarn.nodemanager.disk-health-checker.enable":"true", "yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage":"100.0", "yarn.nodemanager.vmem-check-enabled":"true", "yarn.nodemanager.vmem-pmem-ratio":"3.0" } } ] }, { "InstanceType": "r5.xlarge", other InstanceTypeConfig fields "Configurations": [ { "Classification": "yarn-site", "Properties": { "yarn.nodemanager.disk-health-checker.enable":"false", "yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage":"70.0" } } ] } ] }
  2. 运行以下命令。

    aws emr modify-instance-fleet \ --cluster-id j-2AL4XXXXXX5T9 \ --region us-west-2 \ --instance-fleet instanceFleet.json
using the Java SDK
注意

在以下示例中,将 j-2AL4XXXXXX5T9 替换为您的集群 ID,并将 if-1xxxxxxx9 替换为您的实例集 ID。

以下代码片段使用 Amazon SDK for Java 为实例集提供新配置。

AWSCredentials credentials = new BasicAWSCredentials("access-key", "secret-key"); AmazonElasticMapReduce emr = new AmazonElasticMapReduceClient(credentials); Map<String,String> hiveProperties = new HashMap<String,String>(); hiveProperties.put("hive.join.emit.interval","1000"); hiveProperties.put("hive.merge.mapfiles","true"); Configuration newConfiguration = new Configuration() .withClassification("hive-site") .withProperties(hiveProperties); List<InstanceTypeConfig> instanceTypeConfigList = new ArrayList<>(); for (InstanceTypeConfig instanceTypeConfig : currentInstanceTypeConfigList) { instanceTypeConfigList.add(new InstanceTypeConfig() .withInstanceType(instanceTypeConfig.getInstanceType()) .withBidPrice(instanceTypeConfig.getBidPrice()) .withWeightedCapacity(instanceTypeConfig.getWeightedCapacity()) .withConfigurations(newConfiguration) ); } InstanceFleetModifyConfig instanceFleetModifyConfig = new InstanceFleetModifyConfig() .withInstanceFleetId("if-1xxxxxxx9") .withInstanceTypeConfigs(instanceTypeConfigList); ModifyInstanceFleetRequest modifyInstanceFleetRequest = new ModifyInstanceFleetRequest() .withInstanceFleet(instanceFleetModifyConfig) .withClusterId("j-2AL4XXXXXX5T9"); emrClient.modifyInstanceFleet(modifyInstanceFleetRequest);

排查实例集重新配置问题

如果实例集中任何实例类型的重新配置过程失败,Amazon EMR 会撤销正在进行的重新配置,并使用 Amazon CloudWatch Events 事件记录失败消息。此事件能够提供该重新配置失败的简短摘要。其会列出重新配置失败的实例以及相应的失败消息。下面是一个失败消息示例。

Amazon EMR couldn't revert the instance fleet if-1xxxxxxx9 in the Amazon EMR cluster j-2AL4XXXXXX5T9 (ExampleClusterName) to the previously successful configuration at 2021-01-01 00:00 UTC. The reconfiguration reversion failed because of Instance i-xxxxxxx1, i-xxxxxxx2, i-xxxxxxx3 failed with message "This is an example failure message"...

访问节点预置日志

使用 SSH 连接到重新配置失败的节点。有关说明,请参阅 Amazon Elastic Compute Cloud 中的连接到您的 Linux 实例

Accessing logs by connecting to a node
  1. 导航到以下包含节点预置日志文件的目录。

    /mnt/var/log/provision-node/
  2. 打开报告子目录并搜索节点预置报告,从而进行重新配置。报告目录根据重新配置版本号、通用唯一标识符 (UUID)、Amazon EC2 实例 IP 地址和时间戳来组织日志。每个报告都是一个压缩的 YAML 文件,其中包含有关重新配置过程的详细信息。以下为报告文件名和路径的示例。

    /reports/2/ca598xxx-cxxx-4xxx-bxxx-6dbxxxxxxxxx/ip-10-73-xxx-xxx.ec2.internal/202104061715.yaml.gz
  3. 您可以使用文件查看器(如以下示例中的 zless)来查看报告。

    zless 202104061715.yaml.gz
Accessing logs using Amazon S3

登录到 Amazon Web Services 管理控制台,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/。打开您在配置集群时指定的 Amazon S3 存储桶,以便将日志文件存档。

  1. 导航到以下包含节点预配置日志文件的文件夹:

    amzn-s3-demo-bucket/elasticmapreduce/cluster id/node/instance id/provision-node/
  2. 打开报告文件夹并搜索节点预置报告,从而进行重新配置。报告文件夹根据重新配置版本号、通用唯一标识符 (UUID)、Amazon EC2 实例 IP 地址和时间戳来组织日志。每个报告都是一个压缩的 YAML 文件,其中包含有关重新配置过程的详细信息。以下为报告文件名和路径的示例。

    /reports/2/ca598xxx-cxxx-4xxx-bxxx-6dbxxxxxxxxx/ip-10-73-xxx-xxx.ec2.internal/202104061715.yaml.gz

要查看日志文件,您可以将其作为文本文件从 Amazon S3 下载到本地计算机。有关说明,请参阅下载对象

每个日志文件都包含关联重新配置的详细预配置报告。要查找错误消息信息,您可以搜索报告的 err 日志级别。报告格式取决于集群上的 Amazon EMR 版本。以下示例显示了 Amazon EMR 5.32.0 和 6.2.0 及更高版本使用以下格式的错误消息:

- level: err message: 'Example detailed error message.' source: Puppet tags: - err time: '2021-01-01 00:00:00.000000 +00:00' file: line: