2

我最近一直在阅读 hive 源代码,但我对此感到困惑interrupt()。我想知道它是如何中断当前 hive 命令的。这个函数的位置在CliDriver.processLine().

4

1 回答 1

0

在 HiveInterruptUtils http://people.apache.org/~hashutosh/hive-clover/common/org/apache/hadoop/hive/common/HiveInterruptUtils.html的实现中,找到这个:

public static void interrupt() {
    synchronized (interruptCallbacks) {
          for (HiveInterruptCallback resource : 
                       new ArrayList<HiveInterruptCallback>(interruptCallbacks)) {
            resource.interrupt();
          }
    }
}

这可能会中断之前添加到 HiveInterruptCallback 列表中的所有资源。

还有 HiveInterruptCallback,http ://people.apache.org/~hashutosh/hive-clover/common/org/apache/hadoop/hive/common/HiveInterruptCallback.html#HiveInterruptCallback 是一个接口。

public interface HiveInterruptCallback {
  /**
  * Request interrupting of the processing
  */
  void interrupt();
}

之前注册的资源实现了HiveInterruptCallback的interrupt()方法,所以HiveInterruptUtils.interrupt()的行为取决于具体的资源实现。

于 2013-08-04T11:43:19.533 回答