首页 文章

Spark:驱动程序/工作程序配置 . 驱动程序是否在主节点上运行?

提问于
浏览
6

我在AWS上启动了一个Spark集群,其中包含一个主集群和60个核心:

enter image description here

这是启动命令,每个核心基本上有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

但是,在求职者中,只有119个执行者:

enter image description here

我以为应该有1名司机120名 Worker 执行人员 . 但是,我看到的是119个遗嘱执行人,其中包括1个司机118个工作执行人 .

这是否意味着我的主节点没有被使用?驱动程序是在主节点还是核心节点上运行?我可以让驱动程序在主节点上运行,让60个核心托管120个工作执行程序吗?

谢谢!

3 回答

  • 1

    在纱线群集模式下,驱动程序在Application Master中运行 . 这意味着同一进程负责驱动应用程序和从YARN请求资源,并且此进程在YARN容器内运行 . 启动应用程序的客户端不需要在其整个生命周期内坚持使用 .

    enter image description here

    yarn-client 模式下,Spark驱动程序在启动Spark应用程序的客户端进程内运行 .

    enter image description here

    有关详细信息,请查看cloudera博客 .

  • 4

    当您运行纱线群集模式时,应用程序的驱动程序在群集中运行,而不是在您运行spark提交的计算机上运行 . 这意味着它将占用集群上的驱动程序核心数,从而产生您看到的119个执行程序 .

    如果要在群集外运行驱动程序,请尝试使用yarn-client模式 .

    有关在YARN上运行的更多详细信息,请访问:http://spark.apache.org/docs/latest/running-on-yarn.html

  • 1

    通过使用 cluster-mode ,资源分配具有下图所示的结构 .

    enter image description here

    我将尝试提供YARN对资源分配计算的说明 . 首先,每个核心节点的规格如下(您可以确认here):

    • 内存:244 GB

    • 核心/ vCPU:32

    这意味着您可以最多运行:

    • 2 executors per core node ,根据请求的内存和内核计算得出 . 具体来说, available_cores / requested_cores = 32 / 13 = 2.46 -> 2available_mem / requested_mem = 244 / 90 = 2.71 = 2 .

    • a single driver, without any more executors in a single core node . 这是因为当驱动程序在核心节点中运行时,它会留下244-180 = 64 GB的内存,32和32-26 = 6个核心/ vCPUS,这些不足以运行单独的执行程序 .

    因此,从现有的60个核心节点池中,1个节点用于驱动程序,剩下59个核心节点,运行59 * 2 = 118个执行程序 .

    这是否意味着我的主节点未被使用?

    如果您的意思是是否使用主节点来执行驱动程序,那么答案是 no . 但是,请注意,master可能同时运行了许多其他应用程序,这些应用程序在本讨论的上下文中是超出范围的(例如,YARN资源管理器,HDFS名称节点等) .

    驱动程序是在主节点还是核心节点上运行?

    后者, the driver is running on the core node (因为您使用了 --deploy-mode cluster 参数) .

    我可以让驱动程序在主节点上运行,让60个核心托管120个工作执行程序吗?

    是!这样做的方法是 execute the same command but with --deploy-mode client (或者保留该参数未指定,因为在撰写本文时,它被Spark用作默认值) in the master node .

    通过这样做,资源分配将具有下图所示的结构 .

    enter image description here

    请注意,Application Master仍然会从群集中消耗一些资源(“从执行程序中窃取一些资源) . 但是,默认情况下,AM资源是最小的,可以看作herespark.yarn.am.memoryspark.yarn.am.cores 选项),所以它不应该有影响很大 .

相关问题