Presto 如何杀死正在运行的查询?



我正在学习Presto,并试图弄清楚Presto如何杀死正在运行的查询。但我对实际过程感到困惑。

我知道当 Presto 收到一个 kill 请求,或者它决定杀死一个消耗太多内存的查询时,它会调用 SqlQueryExecution.fail,但这种方法似乎只是改变了 QueryStateMachine,那么如何停止正在运行的线程呢?

@Override
public void fail(Throwable cause)
{
    requireNonNull(cause, "cause is null");
    stateMachine.transitionToFailed(cause);
}

我想知道它在哪一步中止正在运行的线程

Presto 执行在Driver实例中进行管理。 Driver当前可能正在执行或等待线程。 如果Driver正在等待线程,则会关闭该线程。 在其他情况下,它会被中断并关闭。

Driver靠工人生活。工作人员从协调器处获取应完成的信息。这发生在被终止的查询上,也适用于具有LIMIT的查询,其中只需要读取部分数据。

相关内容

  • 没有找到相关文章