Spark阶段完成后计算是否结束?EMR写入S3过慢及阶段计算疑问
Spark任务最后写入S3阶段异常缓慢的疑问
我在Spark Application Master控制台实时查看任务时,能看到Spark遍历应用DAG过程中各阶段的完成情况——多数阶段执行都挺快,耗时从不到1秒到一两分钟不等。
(截图显示Spark各阶段执行列表,顶部的最终阶段为rdd.saveAsTextFile(path, classOf[GzipCodec]))
最终阶段是列表顶部的rdd.saveAsTextFile(path, classOf[GzipCodec]),这个阶段耗时特别长,和前面的阶段形成了鲜明对比。
我清楚Spark中的transformations会根据saveAsTextFile或者count这类actions生成的执行计划,执行0次、1次或者多次。任务推进过程中,我在应用管理器里看到的执行计划符合预期:部分阶段未出现,部分阶段重复出现。而且通过刷新页面能实时查看各阶段进度,各阶段的执行时间与输入数据规模大致匹配,因此我确定应用管理器展示的是实际transformations的执行进度,而非DAG的元活动。
现在我有两个核心疑问:
- 既然各阶段都在执行实际的transformations,为什么最后这个从EMR写入S3的简单阶段会如此缓慢?
- 若如同事所说,应用管理器展示的transformations阶段并未进行实际计算,那这些阶段消耗大量内存、CPU和时间的原因是什么?另外,Spark某一阶段显示已完成,是否代表对应的计算已全部完成?
内容的提问来源于stack exchange,提问作者Synesso
相关产品推荐
相关产品推荐

