Multithreading 为火花过程计时,如果太慢则将其杀死
我正在构建一个使用Scala Spark/SQL启动用户构建查询(业务规则)的流程。其中一个要求是,如果SQLs的执行速度比预期的慢(每个规则都有一个预期的性能(以秒为单位的时间)属性),我需要将它们标记为这样,以备将来参考,并终止长时间运行(缓慢)的进程/作业 到目前为止,我正在考虑以下方法:Multithreading 为火花过程计时,如果太慢则将其杀死,multithreading,performance,scala,apache-spark,Multithreading,Performance,Scala,Apache Spark,我正在构建一个使用Scala Spark/SQL启动用户构建查询(业务规则)的流程。其中一个要求是,如果SQLs的执行速度比预期的慢(每个规则都有一个预期的性能(以秒为单位的时间)属性),我需要将它们标记为这样,以备将来参考,并终止长时间运行(缓慢)的进程/作业 到目前为止,我正在考虑以下方法: 开始计时 在scala未来线程中启动作业 等待工作的时间 如果线程未在预期时间内完成,请终止作业并将其报告为一个缓慢的进程 我担心我在摆弄工作的分布式性质。另一个问题是,对于我的“任务”(运行该查询的任
建议请..我建议不同的方法:构建
流式/计划批处理应用程序
,在新输入数据到达时将状态更新为DB
,然后提供rest api
,根据客户端要求的查询范围访问该状态。根据我的经验,允许客户端启动一系列spark作业
将使您在管理其性能和容量->集群资源效果的同时面临巨大的运营开销。优化、监控和生产查询更加容易:分区、核心/执行器编号、优化集群资源和管理查询rest api。在这种情况下,这不适合您:通过允许用户在每个查询中启动自己的spark-job
来构建RESTAPI,例如:,,然后构建监控spark ui
和kills->重新启动的应用程序如果太长,您可以使用该脚本作为示例。您计划的方法可能很难执行,因为spark会启动多个future
作业本身,其中许多作业都是延迟执行的,而且执行的每个阶段都很难计时,也许您可以使用future
按客户端查询启动spark作业
,并监视其长度?我希望这有助于理解这个想法,但是,我的案例确实需要我在spark流程中启动这些规则。用户没有启动,它是正在处理的流的一部分。。