【问题标题】:Invisible Delays between Spark JobsSpark 作业之间的隐形延迟
【发布时间】:2021-07-20 11:42:42
【问题描述】:

关于应用程序有 4 个主要操作(jdbc 写入),计数很少,总共需要大约 4-5 分钟才能完成。 但应用程序的总正常运行时间约为 12-13 分钟。

我看到某些作业在 ThreadPoolExecutor.java : 1149 上运行。就在此作业反映在 Spark UI 上之前,会发生不可见的长时间延迟。

我想知道这些延迟的可能原因是什么。 我的应用程序正在从表中读取 8-10 个 CSV 文件和 5-6 个视图。联接数约为 59,其中有 agg(sum) 的 groupBy 很少,并且有 3 个联合。

我无法在 DEV/UAT 环境中重现该问题,因为数据不多。 它在我获得应用程序的生产环境中。由我的经理执行。

如果有人在工作中遇到此类延误,请分享您的经验,这可能是导致这种情况的潜在原因,目前我正在围绕工会工作,即缓存相关的数据帧并调用计数,以便从中受益在即将到来的联合中缓存(尚未测试,如果联合是延迟的原因)

同样,我尝试使用缓存和计数来打破长链转换以打破长沿袭。 时间从最初的 18 分钟减少到 12 分钟,但隐形延迟的问题仍然存在。

提前致谢

【问题讨论】:

  • 如果您的 spark 作业调用之间没有任何 CPU 或 IO 密集型代码。然后是 Spark Query 规划的时候了。

标签: apache-spark apache-spark-sql delay jobs uptime


【解决方案1】:

我假设您的 spark 作业之间没有 CPU 或 IO 繁重的代码。 所以它真的很火花,99% 是 QueryPlaning 延迟。 您可以使用 spark.listenerManager.register(QueryExecutionListener) 检查查询计划性能的不同指标。

【讨论】:

  • 您能否详细说明如何使用 QueryExecutionListener 检查延迟。
  • 他的一些方法返回QueryExecution 这个对象的字段之一是tracker:QueryPlanningTracker。它有很多关于查询计划的指标。
猜你喜欢
  • 2016-07-31
  • 1970-01-01
  • 2017-02-23
  • 2016-03-29
  • 2022-08-13
  • 1970-01-01
  • 2022-11-11
  • 2012-08-16
  • 2011-12-14
相关资源
最近更新 更多