【问题标题】:Tasks taking longer over time in Apache Spark在 Apache Spark 中随着时间的推移花费更长的时间的任务
【发布时间】:2015-11-21 22:31:04
【问题描述】:

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

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

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

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

【问题讨论】:

  • 只是一个猜测,但你可以尝试使用mapPartitions(如果有一些地图阶段的准备,它应该更快)。

标签: performance apache-spark bigdata cluster-computing distributed-computing


【解决方案1】:

似乎在某些节点中本地完成阶段的速度比在其他节点中更快。受此观察的驱使,我将尝试以下方法:

  1. 缓存您处理的 RDD。当您不再需要它时,不要忘记取消它。 Understanding caching, persisting in Spark
  2. 检查分区是否平衡,这似乎不是 案例(这可以解释为什么一些局部阶段完成了很多 比别人早)。拥有平衡的分区是圣杯 在,不是吗? :) How to balance my data across the partitions?
  3. 降低通信成本,即使用 比您更少的工人 使用,看看会发生什么。当然,这在很大程度上取决于您的 应用。你看,有时沟通成本变得如此之大, 它们占主导地位,因此使用更少的机器,例如,加速 工作。但是,我会这样做,前提是第 1 步和第 2 步不够用。

【讨论】:

  • 这是关键:检查分区是否平衡。谢谢!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    • 2012-02-26
    • 1970-01-01
    • 2022-11-02
    • 2013-08-10
    • 2019-11-22
    相关资源
    最近更新 更多