Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅
中国的 Amazon Web Services 服务入门
(PDF)。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为您的 Amazon EMR 集群重新配置实例队列
在 Amazon EMR 5.21.0 及更高版本中,您可以重新配置集群应用程序,并为正在运行的集群中的每个实例队列指定其他配置分类。为此,您可以使用 Amazon 命令行界面 (Amazon CLI) 或 Amazon SDK。
您可以通过查看 CloudWatch 事件来跟踪实例队列的状态。有关更多信息,请参阅实例队列重新配置事件。
您只能覆盖在创建集群时指定的集群配置对象。有关配置对象的更多信息,请参阅RunJobFlow 请求语法。如果现有配置与您提供的文件之间存在差异,Amazon EMR 会将手动修改的配置(例如您在使用 SSH 连接到集群时修改的配置)重置为指定实例队列的集群默认值。
当您使用 Amazon EMR 控制台、 Amazon 命令行界面Amazon CLI() 或 Amazon 软件开发工具包提交重新配置请求时,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 版本中不支持该请求。
只有亚马逊 EMR 版本 5.30.0 及更高版本支持 HBase 配置分类的重新配置请求,亚马逊 EMR 版本 5.23.0 到 5.29.0 不支持重新配置请求。
具有多个主节点的 Amazon EMR 集群上不支持重新配置 hdfs-encryption-zones 分类或任何 Hadoop KMS 配置分类。
Amazon EMR 目前不支持某些需要重新启动 YARN 的 YARN 容量调度程序的重新配置请求。 ResourceManager例如,您无法完全删除队列。
当 YARN 需要重新启动时,所有正在运行的 YARN 作业通常会终止并丢失。这可能会导致数据处理延迟。要在 YARN 重启期间运行 YARN 作业,您可以创建具有多个主节点的 Amazon EMR 集群,也可以在纱线站点配置分类中将 yarn.resourcemanager.recovery.enabled 设置为。true
有关使用多个主节点的更多信息,请参阅高可用性 YARN ResourceManager。
重新配置实例队列
- Using the Amazon CLI
-
使用modify-instance-fleet
命令为正在运行的集群中的实例队列指定新配置。
在以下示例中,将 j-2 AL4 XXXXXX5 T9 替换为您的集群 ID,将 i f-1xxxxxxx 9 替换为您的实例队列 ID。
示例-替换实例队列的配置
以下示例引用了一个名为 instanceFleet.json 的配置 JSON 文件,用于编辑实例队列的 YARN NodeManager 磁盘运行状况检查器的属性。
实例队列修改 JSON
准备好您的配置分类,并将其作为 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"
}
}
]
}
]
运行以下命令。
aws emr modify-instance-fleet \
--cluster-id j-2AL4XXXXXX5T9
\
--region us-west-2 \
--instance-fleet instanceFleet.json
示例-向实例队列添加配置
如果要向实例类型添加配置,则必须在新ModifyInstanceFleet
请求中包含该实例类型的所有先前指定的配置。否则,将删除以前指定的配置。
以下示例为 YARN NodeManager 虚拟内存检查器添加了一个属性。该配置还包括之前为 YARN NodeManager 磁盘运行状况检查器指定的值,因此这些值不会被覆盖。
在 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"
}
}
]
}
]
}
运行以下命令。
aws emr modify-instance-fleet \
--cluster-id j-2AL4XXXXXX5T9
\
--region us-west-2 \
--instance-fleet instanceFleet.json
- using the Java SDK
-
在以下示例中,将 j-2 AL4 XXXXXX5 T9 替换为您的集群 ID,将 i f-1xxxxxxx 9 替换为您的实例队列 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 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 会恢复正在进行的重新配置,并使用事件事件记录失败消息。 AAmazon CloudWatch 此事件能够提供该重新配置失败的简短摘要。其会列出重新配置失败的实例以及相应的失败消息。下面是一个失败消息示例。
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 连接到重新配置失败的节点。有关说明,请参阅在亚马逊弹性计算云中连接到您的 Linux 实例。
- Accessing logs by connecting to a node
-
导航到以下包含节点预置日志文件的目录。
/mnt/var/log/provision-node/
打开 reports 子目录并搜索节点配置报告以进行重新配置。报告目录按重新配置版本号、通用唯一标识符 (UUID)、Amazon EC2 实例 IP 地址和时间戳来组织日志。每个报告都是一个压缩的 YAML 文件,其中包含有关重新配置过程的详细信息。以下为报告文件名和路径的示例。
/reports/2/ca598xxx-cxxx-4xxx-bxxx-6dbxxxxxxxxx/ip-10-73-xxx-xxx.ec2.internal/202104061715.yaml.gz
您可以使用像 zless 这样的文件查看器来检查报告,如下例所示。
zless 202104061715.yaml.gz
- Accessing logs using Amazon S3
-
登录 Amazon Web Services Management Console 并打开 Amazon S3 控制台,网址为https://console.aws.amazon.com/s3/。打开您在配置集群时指定的 Amazon S3 存储桶,以便将日志文件存档。
导航到以下包含节点预配置日志文件的文件夹:
amzn-s3-demo-bucket/elasticmapreduce/cluster id
/node/instance id
/provision-node/
打开 reports 文件夹,搜索用于重新配置的节点配置报告。报告文件夹按重新配置版本号、通用唯一标识符 (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: