因此,我们正在运行spark工作,提取数据并进行一些扩展的数据转换并写入几个不同的文件.一切都运行良好但我在资源密集型工作完成和下一个工作开始之间的随机扩张延迟.
在下图中,我们可以看到计划在17:22:02完成的工作需要15分钟才能完成,这意味着我预计下一份工作将在17:37:02左右安排.然而,下一份工作安排在22:05:59,这是工作成功后的+4小时.
当我深入研究下一个作业的火花UI时,它会显示<1秒的调度程序延迟.所以我很困惑这4小时的延迟来自哪里.
(带有Hadoop 2的Spark 1.6.1)
更新:
我可以确认David的回答是关于如何在Spark中处理IO操作有点出乎意料.(考虑到排序和/或其他操作,在写入之前,写入文件基本上会在幕后"收集"是有道理的.)但是,由于I/O时间不包含在作业执行时间中,我感到有些不安.我想你可以在spark UI的"SQL"选项卡中看到它,因为即使所有工作都成功但查询仍在运行,但你根本无法深入研究它.
我确信还有更多方法可以改进,但是下面两种方法对我来说已经足够了:
parquet.enable.summary-metadatafalse