【问题标题】:How does Presto kill a running query?Presto 如何杀死正在运行的查询?
【发布时间】:2019-12-14 02:39:22
【问题描述】:

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

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

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

    stateMachine.transitionToFailed(cause);
}

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

【问题讨论】:

  • 状态机的监听器启动下面描述的进程 Piotr。

标签: presto


【解决方案1】:

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

Drivers 以工人为生。 Worker 从协调者那里获得应该完成的信息。这发生在被终止的查询中,但也适用于带有 LIMIT 的查询,其中只需要读取部分数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-10
    • 2012-03-21
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    相关资源
    最近更新 更多