Spark应用程序不能仅使用一个核心

时间:2017-03-06 17:30:32

标签: apache-spark spark-streaming

我目前正在部署两个spark应用程序,我想限制每个应用程序的内核和执行程序。我的配置如下:

spark.executor.cores=1
spark.driver.cores=1
spark.cores.max=1
spark.executor.instances=1

现在的问题是,通过这种精确配置,一个流应用程序可以正常工作,而另一个则不然。无效的应用程序保持状态:RUNNING并在日志中连续打印以下消息:

17/03/06 10:31:50 INFO JobScheduler: Added jobs for time 1488814310000 ms
17/03/06 10:31:55 INFO JobScheduler: Added jobs for time 1488814315000 ms

令人惊讶的是,如果我将配置更改为以下内容,那么现在无法正常工作的相同应用程序将继续运行。

spark.executor.cores=3
spark.driver.cores=1
spark.cores.max=3
spark.executor.instances=3

注意:该应用程序不适用于值2.这就是我使用至少3的原因。

因此,某些流应用程序似乎需要更多内核。我的问题是什么决定了应用程序需要多少资源?为什么一个应用程序无法运行一次单核,而它可以运行3个核心?

1 个答案:

答案 0 :(得分:1)

您使用了多少接收器?您必须确保有足够的内核来运行接收器和Spark作业:

  

DStream与单个接收器关联。为了获得读并行性,需要创建多个接收器,即多个DStream。接收器在执行器内运行。它占据一个核心。确保在预订接收器插槽后有足够的内核进行处理,即spark.cores.max应考虑接收器插槽。接收者以循环方式分配给执行者。

http://spark.apache.org/docs/latest/streaming-programming-guide.html#important-points-to-remember