Eda*_*ame 6 java scala amazon-web-services apache-spark
我在AWS上启动了一个Spark集群,其中包含一个主集群和60个核心:
这是启动命令,每个核心基本上有2个执行程序,共有120个执行程序:
spark-submit --deploy-mode cluster --master yarn-cluster --driver-memory 180g --driver-cores 26 --executor-memory 90g --executor-cores 13 --num-executors 120
Run Code Online (Sandbox Code Playgroud)
但是,在求职者中,只有119个执行者:
我以为应该有1个驱动程序+ 120个执行程序.但是,我看到的是119个执行者,其中包括1个驱动程序+ 118个工作执行程序.
这是否意味着我的主节点没有被使用?驱动程序是在主节点还是核心节点上运行?我可以让驱动程序在主节点上运行,让60个核心托管120个工作执行程序吗?
谢谢!
通过使用cluster-mode,资源分配具有下图所示的结构。
我将尝试举例说明 YARN 对资源分配的计算。首先,每个核心节点的规格如下(您可以在这里确认):
这意味着您最多可以运行:
available_cores / requested_cores = 32 / 13 = 2.46 -> 2& available_mem / requested_mem = 244 / 90 = 2.71 = 2。因此,在现有的 60 个核心节点池中,1 个节点用于驱动程序,剩下 59 个核心节点,它们正在运行 59*2 = 118 个执行程序。
这是否意味着我的主节点没有被使用?
如果您的意思是是否使用主节点来执行驱动程序,那么答案是否定的。但是,请注意,在此期间,master 可能正在运行许多其他应用程序,这些应用程序超出了本讨论的范围(例如 YARN 资源管理器、HDFS namenode 等)。
驱动是在Master节点还是Core节点上运行?
后者,驱动程序在核心节点上运行(因为您使用了--deploy-mode cluster参数)。
我可以让驱动程序在主节点上运行,让 60 个内核托管 120 个工作执行器吗?
是的!这样做的方法是执行相同的命令,但--deploy-mode client在主节点中使用(或不指定该参数,因为在撰写本文时,Spark 将其用作默认值)。
通过这样做,资源分配将具有下图所示的结构。
请注意,Application Master 仍然会从集群中消耗一些资源(“从执行器那里窃取一些资源)。但是,AM 资源默认是最小的,正如可以在这里看到的(spark.yarn.am.memory和spark.yarn.am.cores选项),所以它不应该有很大的影响。
当您运行yarn-cluster模式时,应用程序的驱动程序在集群中运行,而不是在您运行spark Submit的机器上运行。这意味着它将占用集群上的驱动程序核心数量,导致您看到的有 119 个执行程序。
如果您想在集群外部运行驱动程序,请尝试yarn-client模式。
有关在 YARN 上运行的更多详细信息,请访问: http: //spark.apache.org/docs/latest/running-on-yarn.html
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           4604 次  |  
        
|   最近记录:  |