写点什么

通过 Amazon EMR 重新配置动态修改集群

  • 2019-09-19
  • 本文字数:4269 字

    阅读完需:约 14 分钟

通过 Amazon EMR 重新配置动态修改集群

如果您是使用长期运行的 Amazon EMR 集群的开发人员或数据科学家,您将面临快速变化的工作负载。这些变化通常需要不同的应用程序配置才能在集群上以最佳方式运行。


通过重新配置功能,现在可以更改正在运行的 EMR 集群上的配置。从 EMR 版本 emr-5.21.0 开始,该功能允许您在不创建新集群或通过 SSH 手动连接到每个节点的情况下修改配置。在这篇文章中,我将讨论以下主题:


使用重新配置


实例组状态、配置版本和事件


重新配置示例用例


  • 重新配置的优点

使用重新配置

EMR 版本 emr-5.21.0 中更新了下列任务:


  • 提交重新配置

  • 修改配置

  • 定义配置级别

  • ###提交重新配置

  • 您可以通过 EMR 控制台、SDK 或 AWS CLI 提交重新配置。有关更多信息,请参见提交重新配置和其他信息。

修改配置

提交重新配置时,必须包含要应用于集群的所有配置。更新仅应用这些项目,删除所有其他项目。在修改配置时,EMR 控制台还将为您跟踪以前的集群配置。

定义配置级别

为应用程序定义集群级别和实例组级别配置。在创建集群时提供集群级别配置。然后,这些配置将自动应用于所有实例组,甚至是在集群启动并运行后添加的实例组。配置启动后,将无法修改集群级别配置。但您可以通过重新配置请求在实例组级别补充或覆盖这些配置。每当提交实例组的重新配置请求时,这些新的实例组级别配置将优先于继承的集群级别配置。


要更好地了解集群级别和实例组级别配置如何在实例组上协同工作,请查看 EMR 控制台中的简单演示:


在配置选项卡下,从筛选器下拉列表中选择一个实例组。导航到所需实例组的配置表。配置表的源列指示了配置的级别。


此集群以集群级别配置集开头:


[ { "Classification": "core-site", "Properties": { "Key-A": "Value-1", "Key-B": "Value-2" } } ]
复制代码


正如您在控制台中看到的,实例组 ig-Y4E3MN8C4YBP 自动继承了集群级别配置集。现在,重新配置实例组,如下所示:


[ { "Classification": "core-site", "Properties": { "Key-A": "Value-a", "Key-C": "Value-3" } } ]
复制代码


一旦请求通过,配置“Key-A”的值将被实例组级别配置覆盖,从“Value-1”变为“Value-a”。 相反,配置“Key-B”的值保持不变。同时,您的请求引入了新的补充配置“Key-C”。 控制台中的配置表将始终显示这些细微的变化。


有关如何自定义群集级别和实例组级别配置的详细信息,请参阅创建群集时提供配置。

实例组状态、配置版本和事件

重新配置请求的状态显示在实例组状态转换、配置版本增加和 CloudWatch 事件中。了解它们如何防止丢失任何重新配置请求:


  • 实例组状态:实例组收到重新配置请求后,它将从 RUNNING 状态转换为 RECONFIGURING 状态。RECONFIGURING 状态指示重新配置过程开始。该过程完成且新配置生效后,实例组将返回 RUNNING 状态。然后,您可以通过应用程序的 Web UI 或特定于应用程序的命令验证配置。

  • 配置版本:您提交的每个重新配置请求都会创建新的配置集,并以新版本号进行区分。配置版本从 0 开始,您提交的每个新配置集分别加 1。每个实例组都保留其各自的配置版本号。版本号会随着您重新配置不同实例组的次数而增加。

  • 事件:EMR 将每个重新配置请求的状态作为 Amazon CloudWatch 事件发布。这些事件列出了何时提交请求、重新配置操作何时启动以及何时完成的确切时间。为便于跟踪,每个请求与其关联的配置版本一起发布。 例如,以下事件流显示了 EMR 如何执行实例组中的典型重新配置请求:



有关重新配置操作的 EMR 事件和实例组状态转换的完整列表,请参阅 EMR 管理指南。

重新配置示例用例

以下是重新配置操作的一些用例示例:


  • 重新配置 HDFS 块大小

  • 配置容量调度程序队列

重新配置 HDFS 块大小

您可能要应对不断变化的工作负载。这些更改可在集群的整个生命周期内调用新的应用程序配置。


例如,假设您最近看到长时间运行的集群的工作负载和文件大小增加。您希望在不替换当前集群的情况下考虑增加。


要增加 HDFS 块大小以提高性能,请利用新的重新配置功能。HDFS NameNode 会跟踪集群中的每个数据块。增加此数据块的大小可通过减少 NameNode 监视的数据块数来提高 HDFS 性能。此外,该功能还可通过减少所需映射器的数量来提高作业性能。


要将 HDFS 块大小从默认的 128 GB 增加到 256 GB,请向主实例组提交重新配置请求,该实例组运行相同的节点:


$ aws emr modify-instance-groups --cli-input-json file://reconfiguration.json
复制代码


以下是 reconfiguration.json 文件示例。


reconfiguration.json: { "ClusterId": "j-MyClusterID", "InstanceGroups": [ { "InstanceGroupId": "ig-MyMasterId", "Configurations": [ { "Classification": "hdfs-site", "Properties": { "dfs.blocksize": "256m" }, "Configurations": [] }] }] }
复制代码


然后,EMR 重新配置过程将“dfs.blocksize”参数修改为 hdfs-size.xml 文件中提供的值“256 m”。该重新配置过程还将自动重启 NameNode 以获取新配置。添加到集群的任何新数据块都将自动使用新的默认块大小 256 MB。如果您希望任何现有数据块获取此默认值,请按照下列步骤操作:


  1. 将数据块复制到新的位置。

  2. 删除原数据块。

  3. 将数据块复制回原始位置。

  4. 恢复的数据块将获取新的默认块大小。NameNode 在短暂的重启期间处于非活动状态。

配置容量调度程序队列

是否要更改不同 Hadoop 作业之间的集群资源共享策略? 修改正在运行的集群上的 YARN CapacityScheduler 配置? 在您与其他组织共同管理的大型共享集群上添加新队列? 更改不同队列之间的容量分配以满足不断变化的工作负载?


使用 EMR 重新配置功能,您可以通过向主节点提交重新配置请求来进行更改。新配置会在几分钟内在您的队列上生效。这省去了登录到主节点、直接更新配置文件或手动刷新队列的麻烦。


默认情况下,EMR 集群含有单个队列。 要创建两个额外的队列 alpha 和 beta,并将集群总资源容量的 30% 分配给每个队列。以下是提交重新配置请求以完成所需更改的样本命令:


$ aws emr modify-instance-groups --cli-input-json file://reconfiguration.json
复制代码


以下是 reconfiguration.json 文件示例。


reconfiguration.json: { "ClusterId":"j-MyClusterID", "InstanceGroups":[ { "InstanceGroupId":"ig-MyMasterId", "Configurations":[ { "Classification":"capacity-scheduler", "Properties":{ "yarn.scheduler.capacity.root.queues":"default,alpha,beta", "yarn.scheduler.capacity.root.default.capacity":"40", "yarn.scheduler.capacity.root.default.accessible-node-labels.CORE.capacity":"40", "yarn.scheduler.capacity.root.alpha.capacity":"30", "yarn.scheduler.capacity.root.alpha.accessible-node-labels":"*", "yarn.scheduler.capacity.root.alpha.accessible-node-labels.CORE.capacity":"30", "yarn.scheduler.capacity.root.beta.capacity":"30", "yarn.scheduler.capacity.root.beta.accessible-node-labels":"*", "yarn.scheduler.capacity.root.beta.accessible-node-labels.CORE.capacity":"30" }, "Configurations":[] } ] } ] }
复制代码


对两个队列都提供了对“*”标签的访问权限,以便每个队列都可以访问标注的核心节点。此外,所有队列的容量总和必须等于 100。默认队列的容量减少到 40%。


最后,每个队列对核心标签的访问容量与队列本身的容量相匹配。这意味着核心分区以与集群其余部分相同的比率在队列之间拆分。


完成此步骤后,转到 YARN ResourceManager Web UI 以验证修改是否生效。

EMR 重新配置的优点

以下是 EMR 重新配置的优点:


  • 重新配置是个滚动过程

  • 重新配置故障和恢复

重新配置滚动过程

EMR 重新配置的一个主要优点是滚动重新配置过程。摘自文档:


“Amazon EMR 遵循’滚动’流程来重新配置 Task 和 Core 实例组中的实例。实例组中只有 10% 的实例是一次性修改和重启的。该过程需要更长时间才能完成,但会降低正在运行的集群中发生应用程序故障的可能性。”


滚动重新配置允许 90% 的核心节点在重新配置期间保持运行,从而防止任何 HDFS 停机。YARN on EMR 还启用了 NodeManager 恢复。NodeManager 将恢复重新配置重启后运行的容器。


由于容器始终处于活动状态,因此某些 MapReduce 作业可以在重新配置过程中继续成功运行。但并非所有应用程序都可以在重启后恢复。例如,Spark on YARN(EMR 默认值)可能会在 NodeManager 重启后遇到执行程序问题和作业故障。


在生产环境中重新配置之前,使用您计划在安全环境中执行的重新配置类型来测试应用程序。


最后,滚动重新配置过程可能导致实例组的配置状态暂时不匹配。虽然不匹配,但某些实例仍可能含有旧配置,而其他实例可能具有新请求的配置。重新配置集群时,请考虑此情况可能产生的任何副作用。

重新配置故障和恢复

EMR 还可以从重新配置故障中恢复您的实例组。


为使新配置生效,EMR 会重启重新配置的应用程序,并确保它们在声明重新配置操作完成之前正在运行。


但如果任何应用程序无法在任何节点上成功重启,重新配置操作将会失败,而实例组仍将处于 RECONFIGURING 状态。这类故障可能是由于有问题的配置值造成的。例如,无效的地址“yarn.resourcemanager.scheduler.address”可能导致 YARN ResourceManager 无法重启。


在此种情况下,EMR 会自动触发配置恢复。恢复将重新应用实例组上先前的工作配置集。恢复完成后,实例组状态将恢复为 RUNNING 状态。因此,实例组将返回运行状态,并保持应用程序在集群上的可用性。滚动重新配置持续整个过程。


如果在重新应用先前的工作配置后应用程序仍无法启动,则 EMR 会将实例组置于 te ARRESTED 状态,而不是进一步尝试重新配置。要从 ARRESTED 状态释放实例组,请提交新的重新配置请求。

小结

在这篇文章中,我为大家讲解了如何使用新的 EMR 集群重新配置功能在运行的集群上配置实例组的基础知识。我还详细介绍了提交重新配置请求的额外语义、重要的配置级别概念以及重新配置跟踪方法的方式。我列举了几个真实的重新配置示例,并介绍了两个有用的重新配置功能。


试用新的集群重新配置功能,并在下面的评论中与我们分享您的体验!


作者介绍:


Brandon Scheller 是 Amazon EMR 的一名软件开发工程师。他热衷于开发和推进 Hadoop 生态系统的应用程序以及与开源社区的合作。闲暇时,他喜欢在喀斯喀特山脉登山。


Junyang Li 是 Amazon EMR 的一名软件开发工程师。 她致力于开发 EMR 的前沿功能,并参与开源项目。工作之余,她还喜欢艺术和手工艺品、健身和旅行。


本文转载自 AWS 博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/modifying-your-cluster-on-the-fly-with-amazon-emr-reconfigurationmodifying-your-cluster-on-the-fly-with-amazon-emr-reconfiguration/


2019-09-19 16:481107
用户头像

发布了 1925 篇内容, 共 153.9 次阅读, 收获喜欢 81 次。

关注

评论

发布
暂无评论
发现更多内容

所谓测试报告

FunTester

当姿态估计算法遇上《本草纲目》,看“刘畊宏男孩”如何驱动虚拟人

阿里云CloudImagine

计算机视觉 虚拟人 人体姿态

跨平台应用开发进阶(七) :uni-app 自定义 showToast

No Silver Bullet

uni-app 5月月更 吐司弹窗 跨终端

跨平台应用开发进阶(八) :uni-app 实现Android原生APP-云打包集成极光推送(JG-JPUSH)详细教程

No Silver Bullet

uni-app 极光推送 5月月更 云打包

观测云产品更新|优化观测云商业版注册流程;新增场景仪表板用户视图模版库;新增场景自定义查看器日志来源及筛选联动等

观测云

可观测性 可观测

如何在30分钟完成表格增删改查的前后端框架搭建

葡萄城技术团队

前端 前后端 系统搭建 表格系统

音视频开发进阶课程|第一期:音频要素

ZEGO即构

RTC 音视频开发 音视频课程 音视频基础入门

谈谈10年编程经历

非凸科技

程序员 编程语言 招聘 工程师 代码

墨菲安全受邀与腾讯安全共话软件供应链安全治理

墨菲安全

程序员 腾讯安全 墨菲安全 软件供应链

先是IPV6,再是WI-FI7你都清楚这是什么吗?

郑州埃文科技

ipv6 IP地址

FlyFish|前端数据可视化开发避坑指南(一)

云智慧AIOps社区

JavaScript 前端 node,js 数据可视化工具

Tech Talk 活动预告丨云原生 DevOps 的 Kubernetes 技巧

亚马逊云科技 (Amazon Web Services)

云原生

郑重声明

Authing

身份云 Idaas

AgentTesla病毒解析:利用钓鱼邮件窃取终端隐私数据

火绒安全

数据 终端安全 病毒 隐私安全

不会这3个ChartBuilder使用技巧,怎么开发优秀的数字孪生可视化项目?

ThingJS数字孪生引擎

森园区Web版大更新,多端同步互通,效果模版更新

ThingJS数字孪生引擎

大数据培训在 Presto 中使用哈希改善动态集群缓存命中率

@零度

Authing 渠道合作伙伴火热招募中!

Authing

网络效应 Idaas 合作网络

520特别企划 | Z世代进入婚恋市场,婚恋交友行业会有什么变化?​

易观分析

Z世代

七、云原生日志审计

穿过生命散发芬芳

日志 5月月更

科创人·智慧芽技术副总裁屠昶旸:技术之路是挑战之路,不愿在大厂空耗岁月

科创人

java培训Redis缓存设计

@零度

redis JAVA开发

netty系列之:kequeue传输协议详解

程序那些事

Java Netty 程序那些事 5月月更

kafka集群搭建

阿呆

Kafk

关于 WordPress 你了解多少?

海拥(haiyong.site)

WordPress 5月月更

英特尔庄秉翰:推动5G释放数字经济潜能,拥抱“银发时代”美好生活

科技之家

解读分布式调度平台Airflow在华为云MRS中的实践

华为云开发者联盟

Python spark airflow 华为云MRS 大数据集群

MySQL缓存策略分析

C++后台开发

MySQL 数据库 后端开发 Linux服务器开发 C++后台开发

web前端培训学习中常见问题:竞态条件

@零度

前端开发

技术人的推荐书单

Authing

身份云 科技书单

Istio + SkyWalking + Spring Boot 实战 -Zadig 自测模式搞定开发者子环境

Zadig

DevOps 云原生 自动化测试 CI/CD

通过 Amazon EMR 重新配置动态修改集群_软件工程_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章