Apache Spark 中的任务随着时间的推移花费更长的时间

Tasks taking longer over time in Apache Spark

我有一个大型数据集,我正在尝试 运行 使用 Apache Spark(大约 5TB)。我注意到当作业开始时,它检索数据的速度非常快,并且作业的第一阶段(map 转换)完成得非常快。

但是,在处理了大约 500GB 的数据后,map 转换开始变慢,一些任务需要几分钟甚至几小时才能完成。

我正在使用 10 台具有 122 GB 和 16 个 CPU 的机器,并且我正在将所有资源分配给每个工作节点。我考虑过增加机器数量,但还有什么我可能会遗漏的吗?

我尝试使用我的一小部分数据集 (30 GB),它似乎工作正常。

如果没有更多信息,您的数据似乎会在计算的某个时刻溢出到磁盘,因为内存中没有更多 space。 这只是一个猜测,你应该检查你的 Spark UI.

该阶段似乎在某些节点中比在其他节点中更快地在本地完成。基于这一观察,我将尝试以下做法:

  1. 缓存你处理的RDD。不要忘记取消坚持,当你不再需要它时。 .
  2. 检查分区是否平衡,这似乎不是 这种情况(这可以解释为什么一些地方阶段完成了很多 比别人早)。拥有平衡的分区是圣杯 在 ,不是吗? :)
  3. 降低通信成本,即使用的工人比你少 使用,看看会发生什么。当然这在很大程度上取决于你 应用。你看,有时沟通成本变得如此之大, 它们占主导地位,因此使用更少的机器可以加快 工作。但是,只有在第 1 步和第 2 步不够时,我才会这样做。