PySpark应用为何忽略集群中的其中一个Executor?
Spark应用仅使用单个Executor的排查原因
资源配置限制
- 核心数不足:默认情况下Spark应用可能仅请求1个核心,若每个Executor核数为1,应用只会占用一个Executor。可添加
spark.executor.cores配置指定单Executor核数,或通过spark.cores.max设置应用可使用的总核心数(如两个Executor各1核时设为2)。 - 内存不匹配:虽配置了
spark.executor.memory=512m,被忽略的Executor所在节点可能实际内存不足,导致无法分配任务。查看该Executor日志,确认是否有内存启动报错。
- 核心数不足:默认情况下Spark应用可能仅请求1个核心,若每个Executor核数为1,应用只会占用一个Executor。可添加
节点属性/标签限制
若两个Executor节点被设置了不同的节点标签,而应用未配置允许使用所有标签节点,会仅调度到符合标签的节点。检查Master界面节点属性,确认标签差异,可在应用配置中添加.config("spark.node.label", "*")允许使用所有节点。任务并行度不足
若应用数据量小、任务分区数少于Executor数量,Spark仅启动对应分区数的任务,不会用到所有Executor。对RDD/DataFrame执行repartition增加分区数,或针对SQL任务设置spark.sql.shuffle.partitions为Executor总核数级别的数值。Executor通信异常
Master显示Executor存活,但Driver与该Executor可能存在网络连通问题,比如连接超时、心跳失败。查看Driver日志和被忽略的Executor日志,排查通信错误信息。Master地址配置错误
代码中master("spark://localhost:master-ip")写法错误,localhost与master-ip冲突,需替换为实际Master节点的IP或主机名(如spark://192.168.1.100:7077)。地址错误可能导致Driver仅能连接到部分Executor。
内容的提问来源于stack exchange,提问作者Sara Munafò
相关产品推荐
相关产品推荐

