2017-06-16 15 views
3

所以我在本地模式下运行一个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内存的机器上运行此。当创建的conf我在本地模式现在使用下面的代码

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

现在我,星火运行的单个JVM中的一切,但这是否意味着它推出只有一个司机,并用它作为执行者为好。在我的时间线上显示一个执行者驱动程序添加。 当我去的执行人页面,只有一个执行者具有32个内核分配给它 One Executor Added in Time Line

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

回答

2

这是默认行为吗?

在本地模式下,您的驱动器+执行者,如你所说,一个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实例执行人处理所有任务。

相关问题