PySpark本地运行报BlockManager连接拒绝错误,需调整哪些配置?
报错核心原因
该报错本质是Spark shuffle通信阶段,Driver进程无法连接到Executor进程开放的块传输端口,导致连接被拒绝。即使使用local本地模式,Spark处理数据触发shuffle操作时,也会启动独立的执行线程并绑定本地端口做数据交换,常见触发原因:
- 内存配置不足,Executor线程因OOM被系统强制回收,端口随之关闭
- Spark默认绑定了物理网卡IP(你报错中的192.168.1.105),被本地防火墙拦截
- 单核心处理速度不足,shuffle超时导致进程崩溃
- 待比对文件量级过大,默认shuffle分区数过高导致任务超时
修复方案
1. 优先调整spark-submit提交参数
将原提交命令替换为以下配置,可覆盖90%以上本地模式的同类问题:
spark-submit --master local[*] --driver-memory 10g --executor-memory 10g \ --conf spark.driver.host=localhost \ --conf spark.driver.bindAddress=127.0.0.1 \ --conf spark.network.timeout=600s \ --conf spark.sql.shuffle.partitions=20 \ --conf spark.sql.parquet.int96RebaseModeInRead=CORRECTED \ --conf spark.sql.parquet.int96RebaseModeInWrite=CORRECTED \ --conf spark.sql.parquet.datetimeRebaseModeInRead=CORRECTED \ <你的脚本文件名>.py
参数说明:
local[*]:调用本地所有CPU核心执行任务,避免单核心算力不足导致超时崩溃- 内存配置可根据本地设备总内存调整,建议至少设置为待比对两个文件总大小的1.5倍
- 强制绑定localhost/127.0.0.1回环地址,避免物理网卡IP被防火墙拦截
- 延长网络超时阈值到600秒,适配大文件shuffle的耗时需求
- 调低shuffle分区数到20(默认200),降低本地shuffle的调度压力
2. 额外排查项
- 检查本地hosts配置,确认127.0.0.1与localhost的绑定关系无异常
- 临时关闭本地防火墙后重新运行任务,确认是否为端口拦截导致的问题
- 检查脚本比对逻辑,避免出现笛卡尔积、大表误广播等会导致内存激增的不合理逻辑
3. 大文件场景适配
如果待比对文件总大小超过本地内存的70%,追加以下配置避免堆外内存溢出导致进程被回收:
--conf spark.executor.memoryOverhead=4096 --conf spark.driver.memoryOverhead=4096
内容的提问来源于stack exchange,提问作者pass_the_kavasier
相关产品推荐
相关产品推荐

