Databricks中Spark任务挂起并报HangingTaskDetector警告问题咨询
分区数据倾斜
虽然已将数据集重分区为64个,但Grouped Map Pandas UDF是按业务分组(如门店、区域)执行计算的。如果部分分组的时间序列数据量远大于其他分组(比如某核心区域的销售数据量是普通区域的数十倍),对应任务的计算量会远超其他任务,导致看起来处于“挂起”状态,实际是在处理超大数据集。Prophet计算开销的差异化
不同分组的时间序列特征差异会导致Prophet的计算耗时差距极大:比如包含大量异常值、复杂节假日效应或频繁波动的序列,Prophet拟合时需要更多迭代次数、更复杂的参数调整,计算时间会远高于特征简单的序列,进而表现为少数任务迟迟无法完成。Executor资源竞争
每个4核Executor对应8个任务,若同一Executor上的部分任务占用了过多CPU或内存资源,会导致剩余任务得不到足够资源支持。比如某任务在处理时触发频繁的垃圾回收(GC),或者占用了大部分内存,拖慢了该Executor上其他任务的执行速度。Spark调度延迟
当绝大多数任务完成后,剩余的少数任务可能需要等待调度资源分配。如果集群同时运行其他作业,或者采用FIFO调度策略时存在优先级更高的作业,这些剩余任务会暂时处于闲置状态,直到获得足够的调度资源。Pandas UDF内存管理问题
Prophet处理时间序列时会占用较多内存,若某个分组的数据量过大,导致Pandas DataFrame超出Executor的8GB内存上限,会引发频繁GC甚至隐性内存不足(未触发OOM但计算效率骤降),表现为任务长时间无进展。Databricks Runtime/Spark版本特定问题
Spark 3.2.1搭配Databricks Runtime 10.4 LTS可能存在Grouped Map Pandas UDF的已知兼容性问题,比如任务序列化/反序列化延迟、Executor与Driver的通信阻塞,导致少数任务出现挂起现象。
内容的提问来源于stack exchange,提问作者Philippe Alain Sigue

