在Apache Spark中,任务随着时间的推移变得更加耗时。

14 浏览
0 Comments

在Apache Spark中,任务随着时间的推移变得更加耗时。

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

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

我使用了10台机器,每台机器有122GB内存和16个CPU核心,并将所有资源分配给每个工作节点。我考虑增加机器的数量,但还有其他可能的问题吗?

我尝试了数据集的一小部分(30GB),看起来工作正常。

0
0 Comments

在Apache Spark中,任务随着时间的推移变得更加耗时的原因可能是因为某些节点上的阶段比其他节点更快地完成。根据这一观察,下面是我会尝试的解决方法:

1. 将处理的RDD进行缓存。在不再需要时,不要忘记取消缓存。

了解在Spark中的缓存和持久化

2. 检查分区是否均衡,这似乎并不是这种情况(这可以解释为什么某些本地阶段比其他阶段更早完成)。在中,拥有均衡的分区是至关重要的。

如何在分区中平衡我的数据?

3. 减少通信成本,即使用较少的工作节点,然后观察结果。当然,这在很大程度上取决于您的应用程序。您可以看到,有时通信成本变得非常高,以至于它们主导了任务的执行时间,因此使用较少的机器可以加快作业的速度。然而,只有在步骤1和步骤2无法解决问题时,我才会尝试这一方法。

这是关键:检查分区是否均衡。谢谢!

0
0 Comments

通过检查Spark UI,您应该能够确定计算过程中数据溢出到磁盘的原因。

0