Spark本地模式下的执行程序数

Has*_*lil 8 scala apache-spark

所以我在本地模式下运行一个火花工作.我使用以下命令来运行该作业

spark-submit --master local[*] --driver-memory 256g --class main.scala.mainClass target/scala-2.10/spark_proj-assembly-1.0.jar 0 large.csv 100 outputFolder2 10
Run Code Online (Sandbox Code Playgroud)

我在一台32核和256GB RAM的机器上运行它.创建conf时,请使用以下代码

val conf = new SparkConf().setMaster("local[*]").setAppName("My App")
Run Code Online (Sandbox Code Playgroud)

现在我现在处于本地模式,Spark在一个JVM中运行所有内容,但这是否意味着它只启动一个驱动程序并将其用作执行程序.在我的时间线中,它显示了一个执行器驱动程序.当我进入Executors页面时,只有一个执行程序,其中分配了32个核心 时间线中添加了一个执行程序

一个执行者有32个核心 这是默认行为吗?我期待spark会为每个核心启动一个执行程序,而不是只有一个执行者可以获得所有核心.如果有人可以解释这种行为,那就太好了

Yuv*_*kov 7

这是默认行为吗?

在本地模式下,正如您所说,您的驱动程序+执行程序是在单个JVM进程中创建的.你所看到的不是执行者,而是你的工作在一次性使用的核心数量.通常在本地模式下运行时,您应该只在执行程序视图中看到驱动程序.

如果您查看代码LocalSchedulerBackend,您将看到以下注释:

/**
 * Used when running a local version of Spark where the executor, backend, and master all run in
 * the same JVM. It sits behind a [[TaskSchedulerImpl]] and handles launching tasks on a single
 * Executor (created by the [[LocalSchedulerBackend]]) running locally.
Run Code Online (Sandbox Code Playgroud)

我们在同一个JVM实例中有一个处理所有任务的执行器.