为什么 Spark 不将作业分配给所有执行者,而是只分配给一个执行者?

why Spark is not distributing jobs to all executors, but to only one executer?

我的Spark集群有1个master和3个worker(分别在4台机器上,每台机器1核),其他设置如下图,其中spark.cores.max设置为3spark.executor.cores也设置为3(在pic-1)

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

既然我把最大核心设置为3,难道所有的executor都不应该用来做这个工作吗?

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

非常感谢。

-----------------图1:

-----------------图2:

在 spark streaming 中只启动了 1 个接收器,从输入源获取数据到 RDD。

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

你说你是运行两个Receiver,他们是什么Receiver(Kafka, Hdfs, Twitter ??)

您使用的是哪个 spark 版本?

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

请post Spark 大师主页截图。以及 Job 的 Streaming 页面截图。