Dataproc应该适合每个工作者(或一个节点NodeManager)的两个执行器,每个执行器获得一半内核和一半内存。 它确实有效。
但是,如果我们覆盖设置,请说spark.yarn.executor.memoryOverhead = 4096
然后它只为每个工人创建一个Executor。没有利用集群的一半核心和内存。无论我们如何使用spark.executor.memory或spark.executor.cores,它仍然没有启动足够的执行程序来利用所有集群资源。
如何让dataproc仍为每个工人创建2个执行程序?纱线开销是从执行者记忆中扣除的,所以它应该仍然能够适合2个遗嘱执行人,不应该吗?
答案 0 :(得分:2)
在YARN中执行时,Spark将请求内存大小为spark.executor.memory + spark.yarn.executor.memoryOverhead的容器。如果您要添加到memoryOverhead,则需要从spark.executor.memory中减去相等的数量,以保留相同的容器包装特征。