本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在正在运行的集群中重新配置实例组
在 Amazon 5.21.0 及更高EMR版本中,您可以重新配置集群应用程序,并为正在运行的集群中的每个实例组指定其他配置分类。为此,您可以使用 Amazon EMR 控制台、 Amazon Command Line Interface (Amazon CLI) 或 Amazon SDK。
当您在新 Amazon EMR 控制台中更新实例组的应用程序配置时,控制台会尝试将新配置与现有配置合并,以创建新的活动配置。在 Amazon EMR 无法合并配置的不寻常情况下,控制台会提醒您。
在您提交实例组的重新配置请求后,Amazon 会为新的配置规范EMR分配一个版本号。您可以通过查看 CloudWatch 事件来跟踪配置的版本号或实例组的状态。有关更多信息,请参阅监控 CloudWatch 事件。
注意
您只能覆盖(而不能删除)集群创建过程中指定的集群配置。如果现有配置与您提供的文件之间存在差异,Amazon 会EMR将手动修改的配置(例如您在使用SSH连接到集群时修改的配置)重置为指定实例组的集群默认值。
重新配置实例组时的注意事项
- 重新配置操作
-
当您使用亚马逊EMR控制台、 Amazon Command Line Interface (Amazon CLI) 或提交重新配置请求时 Amazon SDK,Amazon EMR 会检查现有的集群配置文件。如果现有配置与您提供的文件之间存在差异,Amazon EMR 会启动重新配置操作,重新启动某些应用程序,并将任何手动修改的配置(例如您在使用SSH连接到集群时修改的配置)重置为指定实例组的集群默认值。
注意
每次实例组重新配置期间,Amazon 都会EMR执行一些默认操作。这些默认操作可能与您所做的集群自定义冲突,并导致重新配置失败。如何对重新配置失败问题进行故障排查的相关信息,请参阅对实例组重新配置问题进行故障排查。
Amazon EMR 还会针对您在请求中指定的配置分类启动重新配置操作。有关这些操作的完整列表,请参阅您使用的Amazon EMR 版本的配置分类部分。例如,6.2.0 配置分类。
注意
《亚马逊EMR发行指南》仅列出了从亚马逊EMR版本 5.32.0 和 6.2.0 开始的重新配置操作。
- 服务中断
-
Amazon EMR 遵循滚动流程来重新配置任务和核心实例组中的实例。只能同时修改并重新启动实例组中的 10% 实例。该过程需要更长的时间才能完成,但降低了在运行的集群中发生潜在应用程序故障的可能性。
要在YARN重启期间运行YARN作业,您可以创建具有多个主节点的 Amazon EMR 集群,也可以在
yarn-site
配置分类true
中设置为yarn.resourcemanager.recovery.enabled
。有关使用多个主节点的更多信息,请参阅高可用性YARN ResourceManager。 - 应用程序验证
-
重新配置重启过程完成后,Amazon 会EMR检查集群上的每个应用程序是否都在运行。如果任何应用程序不可用,则整个重新配置操作失败。如果重新配置操作失败,Amazon EMR 会将配置参数恢复为先前的工作版本。
注意
为避免重新配置失败,我们建议您仅在计划使用的集群上安装应用程序。我们还建议您在提交重新配置请求之前,先确保所有集群应用程序均正在正常运行。
- 重新配置的类型
-
您可以以两种方式之一重新配置实例组重新配置实例组:
-
覆盖。默认重新配置方法,也是亚马逊5.35.0和6.6.0之前EMR版本中唯一可用的方法。此重新配置方法不加区分地使用新提交的配置集覆盖任何集群上的文件。该方法会清除在重新API配置之外对配置文件所做的任何更改。
-
合并。亚马逊EMR版本 5.35.0 和 6.6.0 及更高版本支持重新配置方法,但亚马逊EMR控制台除外,没有版本支持。此重新配置方法合并新提交的配置与已经存在于集群中的配置。此选项仅添加或修改您提交的新配置。它会保留现有的配置。
注意
亚马逊EMR继续覆盖一些必不可少的 Hadoop 配置,这些配置是确保服务正常运行所必需的。
-
限制
在重新配置正在运行的集群中的实例组时,请考虑以下限制:
-
非YARN应用程序可能会在重启期间失败或导致群集问题,尤其是在应用程序配置不正确的情况下。在重新启动过程之后,接近最大CPU内存和使用量的集群可能会遇到问题。对于主实例组而言,情况尤其如此。
-
当实例组调整大小时,您无法提交重新配置请求。如果在调整实例组大小时启动重新配置,在实例组完成大小调整后,才能启动重新配置,反之亦然。
-
重新配置实例组后,Amazon EMR 会重新启动应用程序以使新配置生效。如果在重新配置期间正在使用应用程序,则可能会出现作业失败或其它意外应用程序行为。
-
如果实例组的重新配置失败,Amazon EMR 会将配置参数恢复到之前的工作版本。如果恢复过程也失败,您必须提交新的
ModifyInstanceGroup
请求以从SUSPENDED
状态中恢复实例组。 -
Phoenix 配置分类的重新配置请求仅在亚马逊EMR版本 5.23.0 及更高版本中受支持,亚马逊EMR版本 5.21.0 或 5.22.0 不支持。
-
只有亚马逊版本 5.30.0 及更高版本支持HBase配置分类的重新配置请求,亚马逊EMR版本 5.23.0 到 5.29.0 不支持重新配置请求。EMR
-
只有在 Amazon 5.27.0 及更高EMR版本中,Amazon 才EMR支持在具有多个主节点的 Amazon EMR 集群上请求应用程序重新配置。
-
具有多个主节点的 Amazon EMR 集群不支持重新KMS配置
hdfs-encryption-zones
分类或任何 Hadoop 配置分类。 -
Amazon EMR 目前不支持某些需要重新启动的容量计划程序的重新配置请求。YARN ResourceManager例如,您无法完全删除队列。
在控制台中重新配置实例组
注意
Amazon EMR 控制台不支持合并类型重新配置。
-
打开亚马逊EMR控制台,网址为 https://console.aws.amazon.com/emr
-
在集群列表中,在 Name (名称) 下面选择要重新配置的活动集群。
-
打开集群的集群详细信息页面,然后转到 Configurations (配置) 选项卡。
-
在 Filter (筛选条件) 下拉列表中,选择要重新配置的实例组。
-
在重新配置下拉菜单中,选择在表格中编辑或在JSON文件中编辑。
-
Edit in table (在表中编辑) – 在配置分类表中,编辑现有配置的属性和值,或者选择 Add configuration (添加配置) 来提供额外的配置分类。
-
在JSON文件中编辑-直接在中输入配置JSON,或使用速记语法(以阴影文本演示)。否则,请URI为带有JSON
Configurations
对象的文件提供 Amazon S3。
注意
配置分类表中的 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文件,该文件用于编辑实例组的YARNNodeManager 磁盘运行状况检查器的属性。
-
准备配置分类,并在运行命令的相同目录中将其保存为
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 虚拟内存检查器添加了一个属性。由于这是合并类型的重新配置,因此它不会覆盖先前为YARNNodeManager 磁盘运行状况检查器指定的值。
-
准备
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。
以下代码段使用 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 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
日志级别。报告格式取决于您的集群上的 Amaz EMR on 版本。
以下示例显示了 5.32.0 和 6.2.0 之前的亚马逊EMR发行版本的错误信息。
- !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
亚马逊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: