为什么Spark不向所有执行者分配工作,而只向一个执行者分配工作?

时间:2015-05-14 20:41:40

标签: performance configuration apache-spark distributed-computing spark-streaming

我的Spark群集有1个主人和3个工作人员(在4台独立的机器上,每台机器有1个核心),其他设置如下图所示,其中设置了 spark.cores.max 3 spark.executor.cores 3 pic-1

但是当我将我的工作提交给Spark集群时,从Spark web-UI我可以看到只使用了一个执行器(根据已用内存 RDD块 pic-2 ),但不是所有的执行者。在这种情况下,处理速度比我预期的要慢得多。

由于我已将max cores设置为3,所以不应该将所有执行程序都用于此作业吗?

如何配置Spark以将当前作业分配给所有执行程序,而不是只运行当前作业的一个执行程序?

非常感谢。

------------------ PIC-1 spark settings

------------------ PIC-2 enter image description here

2 个答案:

答案 0 :(得分:2)

你说你正在运行两个接收器,它们是什么类型的接收器(Kafka,Hdfs,Twitter ??)

你使用哪种火花版?

根据我的经验,如果您使用除文件接收器之外的任何接收器,那么它将永久占用1个核心。 因此,当你说你有2个接收器时,那么将永久使用2个核心来接收数据,所以你只剩下1个正在进行工作的核心。

请发布Spark master hompage截图。和Job的流媒体页面截图。

答案 1 :(得分:1)

在火花流中,仅启动1个接收器,以便将数据从输入源传输到RDD。

第一次转换后重新分区数据可以提高并行性。