【发布时间】:2018-06-01 09:07:55
【问题描述】:
我正在 Spark Application Master 控制台中查看我的工作,我可以实时看到各个阶段完成,因为 Spark 在我的应用程序的 DAG 中运行。这一切都进行得相当快。有些阶段不到一秒钟,有些则需要一两分钟。
列表顶部的最后阶段是rdd.saveAsTextFile(path, classOf[GzipCodec])。这个阶段需要很长时间。
我了解转换会执行零次、一次或多次,具体取决于由saveAsTextFile 或count 等操作 创建的执行计划。
随着工作的进行,我可以在 App Manager 中看到执行计划。有些阶段不存在。有些人不止一次出现。这是意料之中的。我可以实时看到每个阶段的进度(只要我一直按 F5 刷新页面)。执行时间与每个阶段的数据输入大小大致相当。因此,我确信 App Manager 向我展示的是实际转换的进度,而不是 DAG 上的某些元活动。
那么,如果转换发生在每个阶段,为什么最后阶段(从 EMR 向 S3 的简单写入)如此缓慢?
如果像我的同事建议的那样,应用管理器中显示的转换阶段没有进行实际计算,那么它们在做什么会消耗如此多的内存、CPU 和时间?
【问题讨论】:
标签: apache-spark distributed-computing