如何在 EMR 中的特定实例组上运行脚本
Posted
技术标签:
【中文标题】如何在 EMR 中的特定实例组上运行脚本【英文标题】:How to run script on specific instance group in EMR 【发布时间】:2016-08-05 08:48:55 【问题描述】:我被一个任务困住了,我必须只在任务实例组实例上运行 1 个脚本。
我目前的做法-
为此,我在集群启动时将脚本作为引导操作传递,但它在所有机器上运行脚本。 (主、核心、任务实例组)。
您能帮我只在特定(任务)实例组上运行该脚本吗?
实际任务是在任务实例组实例上运行终止通知轮询脚本。 - https://blog.fugue.co/2015-01-06-spot-termination-notices.html
【问题讨论】:
您必须在启动时运行该脚本还是可以随时运行? @error2007s 我的用例是,每当任何现场实例(在任务实例组下)出现故障时,只需用新实例替换即可。因此,根据我的理解,如果我将此作为引导操作传递,那么它将始终在所有任务实例上运行,即使我们也启动了新实例。纠正我,如果我错了。 【参考方案1】:您可以查看文件 /mnt/var/lib/info/extraInstanceData.json,其中包含键 instanceRole 值,它可以是 master、core 或 task。 例如,将此添加到您的脚本中:
INSTANCE_ROLE=$(jq .instanceRole /mnt/var/lib/info/extraInstanceData.json)
或者,您可以使用集群中任何节点上存在的这个文件/mnt/var/lib/info/instance.json,它看起来像这样:
"instanceGroupId": "ig-XXXXXXXXXX",
"isMaster": false
您可以将 ig-XXXXXXXXXX 与集群的 TASK 组 ID 匹配。
【讨论】:
以上是关于如何在 EMR 中的特定实例组上运行脚本的主要内容,如果未能解决你的问题,请参考以下文章
如何在整个 Azure 管理组上运行 powershell 脚本以跨越多个订阅?
如何在 yammer 中的特定组上发布时解决 REST Api 中的跨域错误
部署代码后如何在另一个 Auto Scaling 组上重启 Varnish 服务