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

时间:2017-06-16 13:18:56

标签: scala apache-spark

所以我在本地模式下运行一个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

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

val conf = new SparkConf().setMaster("local[*]").setAppName("My App")

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

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

1 个答案:

答案 0 :(得分:6)

  

这是默认行为吗?

在本地模式下,正如您所说,您的驱动程序+执行程序是在单个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.

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