Amazon EMR
Amazon EMR 版本指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

为运行的集群中的实例组提供配置

对于 Amazon EMR 5.21.0 和更高版本,您可以覆盖集群配置,并为运行的集群中的每个实例组指定额外的配置分类。您可以使用 Amazon EMR 控制台、AWS Command Line Interface (AWS CLI) 或 AWS 开发工具包执行该操作。

注意

您无法删除在创建集群时指定的初始集群配置。您只能覆盖这些配置。相反,您可以删除为每个实例组指定的配置。每次更新每个实例组的配置时,新版本的配置将与继承的集群配置合并在一起,并成为每个实例组的活动配置。

在控制台中为实例组提供配置

  1. 打开 https://console.amazonaws.cn/elasticmapreduce/ 中的 Amazon EMR 控制台。

  2. 在集群列表中,在 Name (名称) 下面选择要重新配置的活动集群。

  3. 打开集群的集群详细信息页面,然后转到 Configurations (配置) 选项卡。

  4. Filter (筛选条件) 下拉列表中,选择要重新配置的实例组。

  5. Reconfigure (重新配置) 下拉菜单中,选择 Edit in table (在表中编辑)Edit in JSON file (在 JSON 文件中编辑)

    • Edit in table (在表中编辑) - 在配置分类表中,编辑现有配置的属性和值,或者选择添加配置以提供额外的配置分类的属性和值。

    • Edit in JSON file (在 JSON 文件中编辑) - 您可以直接在 JSON 中输入配置,也可以使用以阴影文本表示的简写语法。否则,请为具有 JSON Configurations 对象的文件提供一个 Amazon S3 URI。

    注意

    配置分类表中的 Source (源) 列显示是在创建集群时提供配置,还是在为该实例组指定额外的配置时提供配置。您可以编辑来自两个来源的实例组配置。您无法删除初始集群配置,但可以覆盖实例组的这些配置。

    您还可以直接在表中添加或编辑嵌套的配置分类。例如,要提供 hadoop-env 的额外 export 子分类,请在表中添加一个 hadoop.export 配置分类。然后,为该分类提供特定的属性和值。

  6. (可选)选择 Apply this configuration to all active instance groups (将该配置应用于所有活动实例组)

  7. 保存更改。

使用 CLI 为实例组提供配置

您可以在 AWS CLI 中使用 modify-instance-groups 命令为运行的集群中的每个实例组指定配置。

注意

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

例 – 为实例组提供配置

以下示例说明了如何引用 JSON 文件中的配置对象,以编辑实例组的 YARN NodeManager 磁盘运行状况检查程序的属性。

  1. 在 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":[] } ] } ]
  2. 运行以下命令:

    aws emr modify-instance-groups --cluster-id j-2AL4XXXXXX5T9 \ --instance-groups file://instanceGroups.json

例 – 为实例组提供额外的配置

如果要为实例组提供额外的配置,还必须在新的 ModifyInstanceGroup 请求中包含以前为实例组指定的配置。否则,将删除以前为实例组指定的配置。

以下示例说明了如何编辑 YARN NodeManager 虚拟内存检查程序的属性,以及以前为 YARN NodeManager 磁盘运行状况检查程序指定的配置。

  1. 在 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":[] } ] } ]
  2. 运行以下命令:

    aws emr modify-instance-groups --cluster-id j-2AL4XXXXXX5T9 \ --instance-groups file://instanceGroups.json

例 – 删除实例组的配置

要删除以前为实例组指定的配置,请提交新的重新配置请求以排除以前的配置。

注意

您只能覆盖初始集群配置。您无法删除该配置。

例如,您可以提交包含以下内容的新 instanceGroups.json,以删除在上一示例中指定的 YARN NodeManager 磁盘运行状况检查程序配置。

[ { "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 开发工具包为实例组提供配置

注意

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

以下程序摘录说明了如何使用 AWS 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") .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 EMR 执行“滚动”过程以重新配置任务和核心实例组中的实例。只能同时修改并重新启动实例组中的 10% 实例。该过程需要更长的时间才能完成,但降低了在运行的集群中发生潜在应用程序故障的可能性。

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

  • 在为实例组提交重新配置请求后,Amazon EMR 为新配置规范分配一个版本号。您可以查看 CloudWatch 事件以跟踪实例组配置版本号或状态。有关更多信息,请参阅监控 CloudWatch 事件

  • 如果实例组重新配置失败,则 Amazon EMR 将配置参数恢复为以前正常工作的版本。如果恢复过程也失败,您必须提交新的 ModifyInstanceGroup 请求以从 ARRESTED 状态中恢复实例组。

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

  • Amazon EMR 当前不支持需要重新启动资源管理器的容量计划程序的某些重新配置请求,例如,完全删除队列。