gpt4 book ai didi

scala - 限制 yarn 容器一次只能执行一个任务

转载 作者:可可西里 更新时间:2023-11-01 15:11:17 25 4
gpt4 key购买 nike

我正在使用 hadoop 集群运行 Spark 程序,它使用 yarn 调度程序来运行任务。但是,我注意到一个奇怪的行为。 yarn 有时会杀死提示内存不足错误的任务,而如果我轮流执行任务,即执行与容器/执行程序相同数量的任务,让它们完成,然后执行下一组任务,它运行良好,这意味着任务使用的内存不会超过容器中允许的内存。所以,我怀疑 yarn 试图在容器中并行运行多个任务,这就是容器内存不足的原因。有没有办法限制这种行为并告诉 yarn 在容器中一次只运行一个任务。

最佳答案

一般来说,Spark 请求的每个 YARN 容器直接对应一个“执行器”,即使 YARN 可能报告每个容器分配 1 个 CPU,在引擎盖下 Spark 使用 spark.executor.cores 设置来确定打包到单个执行程序/容器进程中的并发任务数。

因此只需设置 spark.executor.cores=1,每个 YARN 容器将一次只处理一个任务。这可以作为 spark-submit 配置来完成,比如 --conf spark.executor.cores=1 或者你可以把它放在 conf/spark-defaults .conf(在大多数标准的 hadoop 安装中,这将位于 /etc/spark/conf/spark-defaults.conf 中)。

请注意,每台机器可能仍然有多个 YARN 容器;如果您想进一步限制每台机器一次只能执行一项任务,您还需要将 spark.executor.memory 扩展为每台机器上可用的内存量(分配给在该机器上运行的 YARN NodeManager;YARN 将拒绝打包任何大于您告诉 NodeManager 允许使用的容器,即使物理内存更大)。或者您可能会发现您只需要将您的机器分割成稍大的 block ,这样您就可以使用该内存设置来找到合适的内存大小,而不会牺牲太多的并行性。

关于scala - 限制 yarn 容器一次只能执行一个任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37998152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com