gpt4 book ai didi

apache-spark - 如果一个 Spark 阶段已经完成,计算是否完成?

转载 作者:行者123 更新时间:2023-12-04 05:09:06 26 4
gpt4 key购买 nike

我正在 Spark Application Master 控制台中查看我的工作,我可以实时看到在 Spark 吞噬我的应用程序的 DAG 时完成的各个阶段。一切都进行得相当快。有些阶段用时不到一秒,有些则需要一两分钟。

enter image description here

列表顶部的最后阶段是 rdd.saveAsTextFile(path, classOf[GzipCodec])。这个阶段需要很长时间。

我了解转换执行零次、一次或多次,具体取决于作为操作(如saveAsTextFile)或计数

随着工作的进行,我可以在 App Manager 中看到执行计划。有些阶段不存在。有些出现不止一次。这是意料之中的。我可以实时看到每个阶段的进度(只要我一直按 F5 刷新页面)。执行时间与每个阶段的数据输入大小大致相当。因此,我确信 App Manager 向我展示的是实际转换的进度,而不是 DAG 上的某些元事件。

那么,如果转换在每个阶段都发生,为什么最后阶段(从 EMR 简单地写入 S3)如此缓慢?

如果像我的同事建议的那样,应用程序管理器中显示的转换阶段进行实际计算,那么它们在做什么会消耗如此多的内存、CPU 和时间?

最佳答案

在 Spark 中,惰性求值是一个关键概念,如果您想使用 Spark,最好熟悉这个概念。

您见证过快完成的阶段不会进行任何重要的计算。

If they are not doing actual computation, what are they doing?

他们正在更新 DAG。

当一个 Action 被触发时,Spark 有机会咨询 DAG 来优化计算(如果没有惰性优化,这是不可能的)。

有关更多信息,请阅读 Spark Transformation - Why its lazy and what is the advantage?

另外,我觉得你的同事急着给你答案,还误以为:

transformation are cheap

真相就在ref's RDD operations :

All transformations in Spark are lazy, in that they do not compute their results right away. Instead, they just remember the transformations applied to some base dataset (e.g. a file). The transformations are only computed when an action requires a result to be returned to the driver program.

廉价不是正确的词。

这解释了为什么在一天结束时,与其他任务相比,您的最后阶段(实际上请求数据并触发操作)如此缓慢。

我的意思是您提到的每个阶段似乎都不会触发任何操作。因此,最后阶段必须考虑所有先前阶段,并完成所有需要的工作,但请记住,在优化的 Spark 观点中。

关于apache-spark - 如果一个 Spark 阶段已经完成,计算是否完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50639862/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com