什么是Spark流媒体中的Starvation场景?

时间:2017-08-25 03:40:16

标签: scala apache-spark parallel-processing spark-streaming starvation

在火花流的着名单词计数示例中,spark配置对象初始化如下:

/* Create a local StreamingContext with two working thread and batch interval of 1 second.
The master requires 2 cores to prevent from a starvation scenario. */

val sparkConf = new SparkConf().
setMaster("local[2]").setAppName("WordCount")

如果我将主设备从local[2]更改为local或未设置主设备,我无法获得预期的输出,实际上字数统计根本不会发生。

评论说:

  

“主人需要2个核心以防止饥饿情况”这就是他们完成setMaster(“local [2]”)的原因。

有人可以解释一下为什么它需要2个内核以及什么是饥饿场景?

1 个答案:

答案 0 :(得分:4)

来自documentation

  

[...]请注意,Spark worker / executor是一个长时间运行的任务,因此它占用了分配给Spark Streaming应用程序的其中一个核心。因此,重要的是要记住,Spark Streaming应用程序需要分配足够的内核(或线程,如果在本地运行)来处理接收的数据,以及运行接收器。

换句话说,一个线程将用于运行接收器,并且至少还需要一个线程来处理接收的数据。对于集群,分配的核心数必须大于接收者数量,否则系统无法处理数据。

因此,在本地运行时,您至少需要2个线程,并且在使用集群时,至少需要为您的系统分配2个核心。

饥饿场景是指这种类型的问题,其中一些线程根本无法执行,而其他线程则取得进展。

饥饿众所周知有两个经典问题: