本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在正在运行的集群中重新配置实例组
对于 Amazon EMR 5.21.0 和更高版本,您可以重新配置集群应用程序,并为运行的集群中的每个实例组指定额外的配置分类。为此,您可以使用 Amazon EMR 控制台、 Amazon Command Line Interface (Amazon CLI) 或软件开发工具包。 Amazon
当您在新的 Amazon EMR 控制台中更新实例组的应用程序配置时,控制台会尝试将新配置与现有配置合并,从而创建新的活动配置。在 Amazon EMR 无法合并配置的不寻常情况下,控制台会提醒您。
在为实例组提交重新配置请求后,Amazon EMR 为新配置规范分配一个版本号。您可以通过查看 CloudWatch 事件来跟踪配置的版本号或实例组的状态。有关更多信息,请参阅监控 CloudWatch 事件。
注意
您只能覆盖(而不能删除)集群创建过程中指定的集群配置。如果现有配置与您提供的文件之间存在差异,Amazon EMR 会将手动修改的配置(例如您在使用 SSH 连接到集群时修改的配置)重置为指定实例组的集群原定设置。
重新配置实例组时的注意事项
- 重新配置操作
-
当您使用 Amazon EMR 控制台、 Amazon Command Line Interface Amazon CLI() 或 Amazon 软件开发工具包提交重新配置请求时,Amazon EMR 会检查现有的集群配置文件。如果现有配置与您提供的文件之间存在差异,Amazon EMR 会启动重新配置操作,重新启动某些应用程序,并将任何手动修改的配置(例如您在使用 SSH 连接到集群时修改的配置)重置为指定实例组的集群原定设置。
注意
Amazon EMR 会在每个实例组重新配置期间执行一些默认操作。这些默认操作可能与您所做的集群自定义冲突,并导致重新配置失败。如何对重新配置失败问题进行故障排查的相关信息,请参阅对实例组重新配置问题进行故障排查。
Amazon EMR 还会对您在请求中指定的配置分类启动重新配置操作。有关这些操作的完整列表,请参阅您使用的 Amazon EMR 版本的“配置分类”部分。例如,6.2.0 配置分类。
注意
Amazon EMR 版本指南中仅列出从 Amazon EMR 5.32.0 和 6.2.0 版开始的重新配置操作。
- 服务中断
-
Amazon EMR 执行“滚动”过程来重新配置任务和核心实例组中的实例。只能同时修改并重新启动实例组中的 10% 实例。该过程需要更长的时间才能完成,但降低了在运行的集群中发生潜在应用程序故障的可能性。
要在 YARN 重新启动期间运行 YARN 作业,您可以创建一个具有多个主节点的 Amazon EMR 集群,也可以在您的
yarn-site
配置分类中将yarn.resourcemanager.recovery.enabled
设置为true
。有关使用多个主节点的更多信息,请参阅高可用性 YARN ResourceManager。 - 应用程序验证
-
在重新配置重新启动过程后,Amazon EMR 会检查集群上的每个应用程序是否正在运行。如果任何应用程序不可用,则整个重新配置操作失败。如果重新配置失败,则 Amazon EMR 将配置参数恢复为以前正常工作的版本。
注意
为避免重新配置失败,我们建议您仅在计划使用的集群上安装应用程序。我们还建议您在提交重新配置请求之前,先确保所有集群应用程序均正在正常运行。
- 重新配置的类型
-
您可以以两种方式之一重新配置实例组重新配置实例组:
-
覆盖。默认的重新配置方法和 Amazon EMR 5.35.0 和 6.6.0 之前的版本中提供的唯一方法。此重新配置方法不加区分地使用新提交的配置集覆盖任何集群上的文件。该方法会擦除在重新配置 API 之外对配置文件进行的任何更改。
-
合并。重新配置方法支持 Amazon EMR 版本 5.35.0 以及 6.6.0 和更高版本,Amazon EMR 控制台除外,在该控制台中,没有版本支持它。此重新配置方法合并新提交的配置与已经存在于集群中的配置。此选项仅添加或修改您提交的新配置。它会保留现有的配置。
注意
Amazon EMR 继续覆盖它需要的一些基本 Hadoop 配置,以确保该服务正确运行。
-
限制
在重新配置正在运行的集群中的实例组时,请考虑以下限制:
-
尤其是在应用程序未正确配置时,非 YARN 应用程序可能会在重新启动期间失败或导致集群问题。接近最大内存和 CPU 使用率的集群可能会在重新启动过程后遇到问题。对于主实例组而言,情况尤其如此。
-
当实例组调整大小时,您无法提交重新配置请求。如果在调整实例组大小时启动重新配置,在实例组完成大小调整后,才能启动重新配置,反之亦然。
-
在重新配置实例组后,Amazon EMR 将重新启动应用程序,从而使新配置生效。如果在重新配置期间正在使用应用程序,则可能会出现作业失败或其它意外应用程序行为。
-
如果实例组重新配置失败,则 Amazon EMR 将配置参数恢复为以前正常工作的版本。如果恢复过程也失败,您必须提交新的
ModifyInstanceGroup
请求以从SUSPENDED
状态中恢复实例组。 -
仅在 Amazon EMR 5.23.0 和更高版本中支持 Phoenix 配置分类的重新配置请求,在 Amazon EMR 5.21.0 或 5.22.0 版本中不支持该请求。
-
只有亚马逊 EMR 版本 5.30.0 及更高版本支持 HBase 配置分类的重新配置请求,亚马逊 EMR 版本 5.23.0 到 5.29.0 不支持重新配置请求。
-
仅在 Amazon EMR 版本 5.27.0 及更高版本中,Amazon EMR 支持在具有多个主节点的 Amazon EMR 集群上的应用程序重新配置请求。
-
具有多个主节点的 Amazon EMR 集群上不支持重新配置
hdfs-encryption-zones
分类或任何 Hadoop KMS 配置分类。 -
Amazon EMR 目前不支持某些需要重启 YARN 的容量调度器重新配置请求。 ResourceManager例如,您无法完全删除队列。
在控制台中重新配置实例组
注意
Amazon EMR 控制台不支持合并类型重新配置。
-
在集群列表中,在 Name (名称) 下面选择要重新配置的活动集群。
-
打开集群的集群详细信息页面,然后转到 Configurations (配置) 选项卡。
-
在 Filter (筛选条件) 下拉列表中,选择要重新配置的实例组。
-
在 Reconfigure (重新配置) 下拉菜单中,选择 Edit in table (在表中编辑) 或 Edit in JSON file (在 JSON 文件中编辑)。
-
Edit in table (在表中编辑) – 在配置分类表中,编辑现有配置的属性和值,或者选择 Add configuration (添加配置) 来提供额外的配置分类。
-
Edit in JSON file (在 JSON 文件中编辑) – 直接在 JSON 中输入配置,也可以使用简写语法(以阴影文本表示)。否则,请为具有 JSON
Configurations
对象的文件提供一个 Amazon S3 URI。
注意
配置分类表中的 Source (源) 列表示是在您创建集群时提供配置,还是在您为该实例组指定额外的配置时提供配置。您可以编辑来自两个来源的实例组配置。您无法删除初始集群配置,但可以覆盖实例组的这些配置。
您还可以直接在表中添加或编辑嵌套的配置分类。例如,要提供
hadoop-env
的额外export
子分类,请在表中添加一个hadoop.export
配置分类。然后,为该分类提供特定的属性和值。 -
-
(可选)选择 Apply this configuration to all active instance groups (将该配置应用于所有活动实例组)。
-
保存更改。
使用 CLI 重新配置实例组
使用 modify-instance-groups 命令为运行的集群中的一个实例组指定新配置。
注意
在以下示例中,<j-2AL4XXXXXX5T9>
替换为您的集群 ID,然后<ig-1xxxxxxx9>
替换为您的实例组 ID。
例 – 替换实例组的配置
以下示例引用了一个名instanceGroups.json
为的配置 JSON 文件,该文件用于编辑实例组的 YARN NodeManager 磁盘运行状况检查器的属性。
-
准备配置分类,并在运行命令的相同目录中将其保存为
instanceGroups.json
。[ { "InstanceGroupId":"
<ig-1xxxxxxx9>
", "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" }, "Configurations":[] } ] } ] -
运行以下命令。
aws emr modify-instance-groups --cluster-id
<j-2AL4XXXXXX5T9>
\ --instance-groups file://instanceGroups.json
例 – 为实例组添加配置
如果要为实例组添加配置,还必须在新的 ModifyInstanceGroup
请求中包含以前为实例组指定的配置。否则,将删除以前指定的配置。
以下示例为 YARN NodeManager 虚拟内存检查器添加了一个属性。该配置还包括之前为 YARN NodeManager 磁盘运行状况检查器指定的值,因此这些值不会被覆盖。
-
准备
instanceGroups.json
文件中具有的以下内容,并将其保存到您将在其中运行该命令的同一目录中。[ { "InstanceGroupId":"
<ig-1xxxxxxx9>
", "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" }, "Configurations":[] } ] } ] -
运行以下命令。
aws emr modify-instance-groups --cluster-id
<j-2AL4XXXXXX5T9>
\ --instance-groups file://instanceGroups.json
例 – 使用 Merge(合并)类型重新配置将配置添加到实例组中
当您想要使用默认的覆盖重新配置方法添加配置时,您必须在新 ModifyInstanceGroup
请求中包括该实例组的所有以前指定的配置。否则,覆盖会删除您以前指定的配置。您不需要使用合并重新配置执行此操作。相反,您必须确保您的请求仅包括新配置。
以下示例为 YARN NodeManager 虚拟内存检查器添加了一个属性。由于这是 Merge 类型的重新配置,因此它不会覆盖之前为 YARN NodeManager 磁盘运行状况检查器指定的值。
-
准备
instanceGroups.json
文件中具有的以下内容,并将其保存到您将在其中运行该命令的同一目录中。[ {"InstanceGroupId":"
<ig-1xxxxxxx9>
", "ReconfigurationType" :"MERGE", "Configurations":[ {"Classification":"yarn-site", "Properties":{ "yarn.nodemanager.vmem-check-enabled":"true", "yarn.nodemanager.vmem-pmem-ratio":"3.0" }, "Configurations":[] } ] } ] -
运行以下命令。
aws emr modify-instance-groups --cluster-id
<j-2AL4XXXXXX5T9>
\ --instance-groups file://instanceGroups.json
例 – 删除实例组的配置
要删除实例组的配置,请提交新的重新配置请求以排除以前的配置。
注意
您只能覆盖初始集群配置。您无法删除该配置。
例如,要从上一个示例中删除 YARN NodeManager 磁盘运行状况检查器的配置,请提交instanceGroups.json
包含以下内容的新配置。
[ { "InstanceGroupId":"
<ig-1xxxxxxx9>
", "Configurations":[ { "Classification":"yarn-site", "Properties":{ "yarn.nodemanager.vmem-check-enabled":"true", "yarn.nodemanager.vmem-pmem-ratio":"3.0" }, "Configurations":[] } ] } ]
注意
要删除上一重新配置请求中的所有配置,请提交包含一组空配置的重新配置请求。例如:
[ { "InstanceGroupId":"
<ig-1xxxxxxx9>
", "Configurations":[] } ]
例 – 在一个请求中重新配置实例组并调整其大小
以下示例 JSON 说明了如何在同一请求中重新配置实例组并调整其大小。
[ { "InstanceGroupId":"
<ig-1xxxxxxx9>
", "InstanceCount":5, "EC2InstanceIdsToTerminate":["i-123"], "ForceShutdown":true, "ShrinkPolicy":{ "DecommissionTimeout":10, "InstanceResizePolicy":{ "InstancesToTerminate":["i-123"], "InstancesToProtect":["i-345"], "InstanceTerminationTimeout":20 } }, "Configurations":[ { "Classification":"yarn-site", "Configurations":[], "Properties":{ "yarn.nodemanager.disk-health-checker.enable":"true", "yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage":"100.0" } } ] } ]
使用 Java SDK 重新配置实例组
注意
在以下示例中,<j-2AL4XXXXXX5T9>
替换为您的集群 ID,然后<ig-1xxxxxxx9>
替换为您的实例组 ID。
以下代码段使用 适用于 Java 的 Amazon SDK为实例组提供新配置。
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 configuration = new Configuration() .withClassification("hive-site") .withProperties(hiveProperties); InstanceGroupModifyConfig igConfig = new InstanceGroupModifyConfig() .withInstanceGroupId("
<ig-1xxxxxxx9>
") .withReconfigurationType("MERGE"); .withConfigurations(configuration); ModifyInstanceGroupsRequest migRequest = new ModifyInstanceGroupsRequest() .withClusterId("<j-2AL4XXXXXX5T9>") .withInstanceGroups(igConfig); emr.modifyInstanceGroups(migRequest);
以下代码段通过提供一组空配置来删除以前为实例组指定的配置。
List<Configuration> configurations = new ArrayList<Configuration>(); InstanceGroupModifyConfig igConfig = new InstanceGroupModifyConfig() .withInstanceGroupId("
<ig-1xxxxxxx9>
") .withConfigurations(configurations); ModifyInstanceGroupsRequest migRequest = new ModifyInstanceGroupsRequest() .withClusterId("<j-2AL4XXXXXX5T9>
") .withInstanceGroups(igConfig); emr.modifyInstanceGroups(migRequest);
对实例组重新配置问题进行故障排查
如果实例组的重新配置过程失败,Amazon EMR 会恢复重新配置并使用 Amazon 事件记录失败消息。 CloudWatch 此事件能够提供该重新配置失败的简短摘要。其会列出重新配置失败的实例以及相应的失败消息。下面是一个失败消息示例。
The reconfiguration operation for instance group
ig-1xxxxxxx9
in Amazon EMR clusterj-2AL4XXXXXX5T9
(ExampleClusterName) failed at 2021-01-01 00:00 UTC and took 2 minutes to fail. Failed configuration version isexample12345
. Failure message: Instancei-xxxxxxx1
,i-xxxxxxx2
,i-xxxxxxx3
failed with message "This is an example failure message".
要收集有关重新配置失败的更多数据,您可以检查节点预配置日志。对于收到类似以下消息时,这样做尤其有用。
i-xxxxxxx1
failed with message “Unable to complete transaction and some changes were applied.”
每个日志文件都包含关联重新配置的详细预配置报告。要查找错误消息信息,您可以搜索报告的 err
日志级别。报告格式取决于集群上的 Amazon EMR 版本。
以下示例显示了早于 Amazon EMR 5.32.0 和 6.2.0 发行版的错误信息。
- !ruby/object:Puppet::Util::Log
level: !ruby/sym err
tags:
- err
message: "Example detailed error message."
source: Puppet
time: 2021-01-01 00:00:00.000000 +00:00
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: