在 EMR 集群中,我有 1 个 MASTER、1 个 CORE 和 4 个 TASK 节点。看来 YARN 不仅在 TASK 节点上而且还在 CORE 节点上创建 CPU 绑定的 SPARK 执行器。是否有任何选项可以阻止它(例如“yarn.app.mapreduce.am.labels”指示 YARN 仅在 MASTER 或 CORE 上创建 APP MANAGER)。
AM 在容器内运行。您最多可以指定在哪个节点上运行 AM。
这些参考资料应该对您有帮助:
您可以使用下面提到的这两种方法来阻止在核心节点上启动执行程序容器:
在 EMR 核心节点中,纱线节点标签“CORE”作为非独占分区。因为核心节点是非独占分区,所以可以在那里启动另一个容器。为了防止在核心节点上启动执行程序容器,您可以将其设置为“独占”分区。
节点分区有两种:
Exclusive:容器将被分配到与节点分区完全匹配的节点。 (例如请求partition=“x”将分配给partition=“x”的节点,请求DEFAULT分区将分配给DEFAULT分区节点)。
非独占:如果分区是非独占的,它会将空闲资源共享给请求 DEFAULT 分区的容器。
来源:https://hadoop.apache.org/docs/r2.7.3/hadoop-yarn/hadoop-yarn-site/NodeLabel.html
您还可以在此处了解如何添加或修改节点标签。
处理它的另一种方法是将纱线节点标签分配给所有任务节点作为“TASK”,并在spark Submit命令中使用以下配置。
spark.yarn.am.nodeLabelExpression='CORE'
spark.yarn.executor.nodeLabelExpression='TASK'