我的 Spark 集群有 1 个 master 和 3 个 worker(在 4 台独立的机器上,每台机器有 1 个核心),其他设置如下图,其中 spark.cores.max 设置为 3 , 和 spark.executor.cores 还有 3 (在 pic-1 中)
但是当我将我的工作提交给 Spark 集群时,从 Spark web-UI 我可以看到只使用了一个执行程序(根据 使用的内存 和 RDD 块 in pic- 2 ),但不是所有的执行者。在这种情况下,处理速度比我预期的要慢得多。
既然我已经把最大核心数设置为 3,那么所有的执行者不应该都习惯这个工作吗?
如何配置 Spark 将当前作业分发给所有执行程序,而不是只有一个执行程序运行当前作业?
非常感谢。
------------------图片1 :
------------------图片2 :
最佳答案
你说你正在运行两个接收器,它们是什么类型的接收器(Kafka、Hdfs、Twitter ??)
您使用的是哪个 Spark 版本?
根据我的经验,如果您使用文件接收器以外的任何接收器,那么它将永久占用 1 个核心。
因此,当您说您有 2 个接收器时,那么 2 个内核将永久用于接收数据,因此您只剩下 1 个正在执行工作的内核。
请同时发布 Spark master 主页屏幕截图。和 Job 的 Streaming 页面截图。
关于performance - 为什么 Spark 不将作业分配给所有执行程序,而是仅分配给一个执行程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30246963/