我的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 :
------------------ PIC-2 :
答案 0 :(得分:2)
你说你正在运行两个接收器,它们是什么类型的接收器(Kafka,Hdfs,Twitter ??)
你使用哪种火花版?
根据我的经验,如果您使用除文件接收器之外的任何接收器,那么它将永久占用1个核心。 因此,当你说你有2个接收器时,那么将永久使用2个核心来接收数据,所以你只剩下1个正在进行工作的核心。
请发布Spark master hompage截图。和Job的流媒体页面截图。
答案 1 :(得分:1)
在火花流中,仅启动1个接收器,以便将数据从输入源传输到RDD。
第一次转换后重新分区数据可以提高并行性。