h0m*_*mer 9 amazon-web-services amazon-emr amazon-cloudwatch
我目前手头有一项任务,要在一段时间后终止长期运行的 EMR 集群(基于某些指标)。Google Dataproc 在此处列出的称为“集群计划删除”中具有此功能:https ://cloud.google.com/dataproc/docs/concepts/configuring-clusters/scheduled-deletion
这在 EMR 上是可能的吗?也许使用 Cloudwatch 指标?或者我可以编写一个长时间运行的 jar,它会位于 EMR 主节点上,只轮询纱线以获得一些空闲时间指标,然后在一段时间后关闭集群?
编辑:更多说明。我想要一些功能,其中集群基于空闲时间终止一些 x 时间。例如,如果集群已经运行了一段时间,但没有作业已经运行了 1 小时,并且集群只是坐在那里什么也不做,那么我希望能够终止集群。
最简单的方法将用于 Amazon CloudWatch 的 Amazon EMR 指标和维度。有一个isIdle布尔值“表示集群不再执行工作”。
您可以创建一个 CloudWatch 警报,如果它在x分钟内为 True ,则触发警报。这会向 Amazon SNS 发送一条消息,该消息可以触发 Lambda 函数关闭集群。
成分:
更新:这显然不合适(见下面的评论)。
另一种方法是:
请记住您在问题中提供的说明,可能有3 种可能的方法来做到这一点。
1)使用EMR 集群的AWS CloudWatch 指标 isIdle。此指标跟踪集群是否处于活动状态,但当前未运行任务。您可以将警报设置为在集群空闲一段时间(例如 30 分钟)时触发。参考:https : //docs.aws.amazon.com/emr/latest/ManagementGuide/UsingEMR_ViewingMetrics.html
2)使用AWS CloudWatch 事件/规则和 AWS Lambda 函数检查空闲 EMR 集群。您可以在 AWS 控制台级别实现可见性,并且可以轻松启用和禁用它。受到推崇的
3)其他一些基于 Shell 的自定义解决方案,它针对EMR 集群主节点上的CRON 作业运行,但您将失去其在 AWS 控制台级别的可见性,并且您可能还需要 SSH 访问权限。
使用第二种方法的解决方案:推荐
考虑到这一点,我开发了一个小框架来使用上面提到的第二个解决方案来实现这一点。该框架是一个基于 AWS 的解决方案,它使用 AWS CloudWatch 和 AWS Lambda使用 Python 脚本,该脚本使用 Boto3来终止闲置了指定时间段的 AWS EMR 集群。
您指定最大空闲时间阈值,AWS CloudWatch 事件/规则触发一个 AWS Lambda 函数,该函数查询处于 WAITING 状态的所有 AWS EMR 集群,并且对于每个集群,将当前时间与 AWS EMR 集群的就绪时间进行比较,以防到目前为止没有添加 EMR 步骤或将当前时间与 AWS EMR 集群的最后一步的结束时间进行比较。如果阈值已被破坏,AWS EMR 将在取消终止保护(如果启用)后终止。如果没有,它将跳过该 AWS EMR 集群。
AWS CloudWatch的事件/规则将决定AWS lambda函数多久应检查怠速AWS EMR集群。
您可以禁用的AWS CloudWatch的事件/规则随时禁用这个框架在一个单一的点击,而不删除其AWS CloudFormation堆栈。
AWS Lambda 函数使用Python 3.7作为其运行时环境。
您可以在此处从GitHub获取代码并使用它:https : //github.com/abdullahkhawer/auto-terminate-idle-emr
对此解决方案的任何贡献、改进和建议都将受到高度赞赏。:)
| 归档时间: |
|
| 查看次数: |
7733 次 |
| 最近记录: |