我有一个包含12个节点的r5.8xlarge AWS集群,因此有6144个内核(12个节点 * 32 vCPU * 16个内核),我设置了--executor-cores=5,并使用下面的spark-submit命令启用了动态执行,即使设置了spark.dynamicAllocation.initialExecutors=150 --conf spark.dynamicAllocation.minExecutors=150
,我在spark-UI应用程序中也只能看到70个执行器,我做错了什么?
r5.8x大型群集每个节点有256 GB,因此为3072 GB(256 GB * 12个节点)
仅供参考-我没有将驱动程序节点包括在此计算中。
--driver-memory 200G --deploy-mode client --executor-memory 37G --executor-cores 7 --conf spark.dynamicAllocation.enabled=true --conf spark.shuffle.service.enabled=true --conf spark.driver.maxResultSize=0 --conf spark.sql.shuffle.partitions=2000 --conf spark.dynamicAllocation.initialExecutors=150 --conf spark.dynamicAllocation.minExecutors=150
1条答案
按热度按时间xcitsw881#
每个节点有256 GB,每个执行器有37 G,一个执行器只能位于一个节点中(执行器不能在多个节点之间共享),因此每个节点最多有6个执行器(256 / 37 = 6),因为你有12个节点,所以执行器的最大数量是6 * 12 = 72执行器,这解释了为什么你在spark用户界面中只看到70执行器(2个执行器的差异是由分配给驱动程序的内存引起的,或者可能是由于某些节点中的内存分配问题)。
如果需要更多执行器,则必须减少执行器的内存,同时要充分利用群集,请确保节点内存除以执行器内存后的余数尽可能接近零,例如:
如果你想要至少150个执行器,那么执行器内存最多应该是19 G