Azure Databricks作业写入Azure DataLake时出现超时错误求助
Azure Databricks作业写入ADLS超时(Executor心跳超时)解决方案
问题描述
每日运行的Databricks作业,逻辑为读取path1新数据→对比获取更新内容→与历史数据合并得到时效性数据→按处理日期分区写入Azure DataLake。写入阶段触发超时错误,核心报错如下:
Py4JJavaError: An error occurred while calling o3507.parquet. : org.apache.spark.SparkException: Job aborted. ...(省略中间栈信息) Caused by: org.apache.spark.SparkException: Job aborted due to stage failure: Task 13 in stage 228.0 failed 4 times, most recent failure: Lost task 13.3 in stage 228.0 (TID 9103, 10.139.64.9, executor 14): ExecutorLostFailure (executor 14 exited caused by one of the running tasks) Reason: Executor heartbeat timed out after 157722 ms
核心原因
Executor与Driver的心跳超时,通常由Executor资源不足、数据处理负载过高、存储/网络性能瓶颈或Spark心跳配置过严导致。
解决方法
1. 优化Executor资源配置
- 增大Executor内存与CPU:如果任务处理的数据量较大,Executor内存不足会引发频繁GC,阻塞心跳上报。调整集群配置,提升Executor内存(例如从8G调整至16G),同时匹配合适的CPU核数(建议内存:CPU=4:1或8:1)。
- 增加Executor数量:分散任务负载,减少单个Executor需要处理的任务数,降低单节点压力。
2. 调整数据写入逻辑
- 控制写入分区大小:通过
df.repartition(n)或df.coalesce(n)调整DataFrame分区数,确保每个分区数据量在128MB-256MB之间,避免单个任务处理过大或过小的数据集。 - 减少写入数据量:如果是增量场景,优先使用Delta Lake的
merge操作替代全量覆盖写入;如果是普通Parquet,确保仅写入新增/更新的数据,而非全量历史数据。
3. 排查存储与网络瓶颈
- 检查ADLS吞吐量配额:登录Azure门户查看ADLS的「写入吞吐量」监控指标,确认是否达到服务配额上限,若达到则提交配额提升申请。
- 确保同区域部署:Databricks集群与ADLS需处于同一Azure区域,避免跨区域传输带来的高延迟与带宽限制。
4. 调整Spark心跳配置
在集群的Spark配置中添加以下参数,延长心跳检测阈值:
spark.executor.heartbeatInterval=60s spark.network.timeout=300s
该配置可降低因临时GC、网络波动导致的心跳超时误判。
内容的提问来源于stack exchange,提问作者vll1990
相关产品推荐
相关产品推荐

