问题描述
我只想在我的 AWS EMR 集群中的任务节点上运行我的 spark 执行程序,纱线标签是实现这一目标的方法之一。我可以在 spark-submit 期间指定标签。我想实现以下目标
我想这样做是为了通过确保所有执行程序都在现场实例上运行来降低集群的成本。
解决方法
我们通过以下过程实现了它。
- 在 Maser 节点启动期间,我们运行我们的自定义脚本,并在其中创建新的 TASK 标签。 EMR 会自动创建核心级别。
- 在核心和任务节点启动期间,我们从元数据 API 确定什么是节点类型,并根据实例类型将适当的标签附加到机器上。如果是按需实例,则附加 CORE,否则将 TASK 标签添加到节点。
- 当我们提交我们的 Spark 作业时,我们将执行器节点标签表达式称为 TASK,这确保仅对 TASK 节点上的所有执行器。