3

在著名的 Spark Streaming 字数统计示例中,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 个内核以及什么是饥饿场景吗?

4

1 回答 1

4

文档中:

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

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

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


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

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

于 2017-08-25T03:54:10.853 回答