在著名的火花流字计数示例中,火花配置对象初始化如下:
/* 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,或者没有设置主程序,我就得不到预期的输出,而且实际上根本不进行单词计数。
评论说:
“主服务器需要两个核心来防止饥饿情况”,这就是为什么他们要执行setMaster("local2")。
有人能解释一下为什么需要两个内核吗?饥饿的情况是什么?
发布于 2017-08-25 03:54:10
来自文档
..。请注意,星火工作者/执行器是一项长期运行的任务,因此它占用了分配给星火流应用程序的核心之一。因此,重要的是要记住,需要分配足够的内核(或线程,如果在本地运行)来处理接收到的数据,以及运行接收器。
换句话说,将使用一个线程来运行接收器,并且至少还需要一个线程来处理接收到的数据。对于集群,所分配的核心数目必须大于接收者的数量,否则系统无法处理数据。
因此,在本地运行时,至少需要2个线程,当使用集群时,至少需要为系统分配两个核心。
饥饿场景指的是这种类型的问题,其中一些线程根本无法执行,而其他线程则取得进展。
有两个经典的饥饿问题是众所周知的:
https://stackoverflow.com/questions/45874103
复制相似问题