如何在 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 脚本以跨越多个订阅?

如何在多个子网上运行 AWS EMR 集群?

如何在 yammer 中的特定组上发布时解决 REST Api 中的跨域错误

部署代码后如何在另一个 Auto Scaling 组上重启 Varnish 服务

如何使 Pyspark 脚本在 Amazon EMR 上运行以识别 boto3 模块?它说找不到模块

在 emr 上运行 mrjob 脚本的 ssh 密钥无效