Apache spark ApacheSpark:设置执行器实例不会更改执行器
我有一个apachespark应用程序在集群模式下的纱线集群上运行(Spark在这个集群上有3个节点) 当应用程序运行时,Spark UI显示2个执行器(每个执行器在不同的节点上运行)和驱动程序在第三个节点上运行。 我希望应用程序使用更多的执行器,所以我尝试添加参数--num executors to Spark submit并将其设置为6Apache spark ApacheSpark:设置执行器实例不会更改执行器,apache-spark,yarn,Apache Spark,Yarn,我有一个apachespark应用程序在集群模式下的纱线集群上运行(Spark在这个集群上有3个节点) 当应用程序运行时,Spark UI显示2个执行器(每个执行器在不同的节点上运行)和驱动程序在第三个节点上运行。 我希望应用程序使用更多的执行器,所以我尝试添加参数--num executors to Spark submit并将其设置为6 spark submit--driver memory 3G--num executors 6--class main.Application--execu
spark submit--driver memory 3G--num executors 6--class main.Application--executor memory 11G--master warn cluster myJar.jar…
然而,执行人的人数仍然是2人
在spark UI上,我可以看到参数spark.executor.instances是6,正如我预期的那样,但不知何故,仍然只有2个执行器
我甚至试着从代码中设置这个参数
sparkConf.set("spark.executor.instances", "6")
同样,我可以看到参数设置为6,但仍然只有2个执行器
有人知道我为什么不能增加遗嘱执行人的人数吗
纱线.nodemanager.resource.memory-mb在纱线站点.xml中为12g增加
纱线.nodemanager.resource.memory mb在纱线站点.xml中为
每个节点12g只能启动驱动程序(3g)和2个执行器(11g)
节点1-驱动程序3g(+7%开销)
节点2-执行器1 11g(+7%开销)
节点3-执行器2 11g(+7%开销)
现在您正在请求11g的Executor 3,并且没有节点具有11g内存可用
有关7%的开销,请参阅中的spark.Thread.executor.memoryOverhead和spark.Thread.driver.memoryOverhead。群集中只有3个节点,其中一个将用作驱动程序,您只剩下2个节点,如何创建6个执行器
我认为您将--num executors
与--executor cores
混淆了
要提高并发性,您需要更多的内核,您需要利用集群中的所有CPU。要充分利用spark集群的容量,您需要根据集群设置--num executors
、--executor cores
和--executor memory
的值:
--num executors
命令行标志或spark.executor.instances
配置属性控制请求的执行器数量李>
——executor cores
命令行标志或spark.executor.cores
配置属性控制执行器可以运行的并发任务数李>
--executor memory
命令行标志或spark.executor.memory
配置属性控制堆大小
请注意,warn.nodemanager.resource.memory mb
是单个节点管理员可以跨一个节点上的所有容器分配的总内存
在您的情况下,由于warn.nodemanager.resource.memory-mb=12G
,如果您将分配给任何单个节点上的所有warn容器的内存相加,它不能超过12G
您已为每个Spark executor容器请求了11G(-executor memory 11G
)。虽然11G小于12G,但这仍然不起作用。为什么?
- 因为您必须考虑
spark.Thread.executor.memoryOverhead
,它是min(executorMemory*0.10384)
(默认情况下,除非您覆盖它)
因此,以下数学必须成立:
spark.executor.memory
+spark.warn.executor.memoryOverhead
纱线站点.xml中的warn.nodemanager.resource.memory-mb的值是多少?warn.nodemanager.resource.memory-mb是12gib,因此每个节点只能有一个执行器?不,每个节点有12g内存,一个执行器占用11g,所以不能在同一节点上启动第二个执行器。您可以增加Thread.nodemanager.resource.memory-mb或减少--executor memory以在同一个节点上启动多个执行器我无法增加此参数,因为我没有足够的RAM,但我在另一个spark应用程序上尝试了它,该应用程序不需要那么多执行器内存,而且运行正常,thanksI已经为类似的问题苦恼了几天。谢谢你的回答,工作得很有魅力!7%是固定的吗?我们可以调整7%的管理费用吗?我可以看到设置,但它没有告诉您%的值,而是384?@JoyGeorgeKunjikkuru是的,您可以更改它,spark 2.3以后这些属性称为spark.executor.memoryOverhead spark.driver.memoryOverhead,默认值为10%,您可以设置绝对值来更改它们。请参阅:@banjara,我没有设置执行器内存(默认为1GB),使用spark submit不支持传递num executors。我有70GB的内存