Spark 任务中的 OOM(Out Of Memory)通常分为两大类:Driver 端 OOM 和 Executor 端 OOM。这两者的产生原因和解决思路截然不同。 以下是详细的分类解析及常见原因: --- 一、 Driver 端 OOM Driver 端负责应用程序的调度、DAG 构建、Task 分发以及接收 的结果。Driver OOM 通常是因为 Driver 承载了过多的数据或元数据。 1. 操作拉取数据过大 原因:这是最常见的原因。当用户代码执行 或 时,所有 Executor 上的计算结果都会被发送回 Driver。如果结果集超过了 Driver 的堆内存(),就会爆 OOM。 解决: 避免在全量数据上使用 。 使用 查看部分数据。 如果需要保存结果,使用 、 等写入 HDFS/S3,而不是拉回 Driver。 增大 。 2. 广播变量(Broadcast Variables)过大 原因:Driver 需要将广播变量序列化并发送给所有 Executor。如果广播的 Map 或数组非常大(接近或超过 Driver 内存),在序列化或传输过程中会导致 OOM。 解决...