Multithreading 为火花过程计时,如果太慢则将其杀死

Multithreading 为火花过程计时,如果太慢则将其杀死,multithreading,performance,scala,apache-spark,Multithreading,Performance,Scala,Apache Spark,我正在构建一个使用Scala Spark/SQL启动用户构建查询(业务规则)的流程。其中一个要求是,如果SQLs的执行速度比预期的慢(每个规则都有一个预期的性能(以秒为单位的时间)属性),我需要将它们标记为这样,以备将来参考,并终止长时间运行(缓慢)的进程/作业 到目前为止,我正在考虑以下方法: 开始计时 在scala未来线程中启动作业 等待工作的时间 如果线程未在预期时间内完成,请终止作业并将其报告为一个缓慢的进程 我担心我在摆弄工作的分布式性质。另一个问题是,对于我的“任务”(运行该查询的任

我正在构建一个使用Scala Spark/SQL启动用户构建查询(业务规则)的流程。其中一个要求是,如果SQLs的执行速度比预期的慢(每个规则都有一个预期的性能(以秒为单位的时间)属性),我需要将它们标记为这样,以备将来参考,并终止长时间运行(缓慢)的进程/作业

到目前为止,我正在考虑以下方法:

  • 开始计时
  • 在scala未来线程中启动作业
  • 等待工作的时间
  • 如果线程未在预期时间内完成,请终止作业并将其报告为一个缓慢的进程
  • 我担心我在摆弄工作的分布式性质。另一个问题是,对于我的“任务”(运行该查询的任务),spark内部将跨节点启动未知数量的任务,计时过程如何工作,应向我的程序报告何种实际性能


    建议请..

    我建议不同的方法:构建
    流式/计划批处理应用程序
    ,在新输入数据到达时将状态更新为
    DB
    ,然后提供
    rest api
    ,根据客户端要求的查询范围访问该状态。根据我的经验,允许客户端启动一系列
    spark作业
    将使您在管理其性能和容量->集群资源效果的同时面临巨大的运营开销。优化、监控和生产查询更加容易:分区、核心/执行器编号、优化集群资源和管理查询rest api。在这种情况下,这不适合您:通过允许用户在每个查询中启动自己的
    spark-job
    来构建RESTAPI,例如:,,然后构建监控
    spark ui
    和kills->重新启动的应用程序如果太长,您可以使用该脚本作为示例。您计划的方法可能很难执行,因为spark会启动多个
    future
    作业本身,其中许多作业都是延迟执行的,而且执行的每个阶段都很难计时,也许您可以使用
    future
    客户端查询启动
    spark作业
    ,并监视其长度?我希望这有助于

    理解这个想法,但是,我的案例确实需要我在spark流程中启动这些规则。用户没有启动,它是正在处理的流的一部分。。