1

我正在编写一些 Hive UDF,使用 JNI 与本机 C 库对话。C 库需要一些昂贵的初始化,并通过句柄维护其内部状态。为了避免在每一行重新初始化,我在第一行初始化库,然后将句柄作为静态变量存储在 Java 世界中并为后续行获取它。这一切都很好。

困难的部分是该库还要求您进行清理以释放该内部状态。作为 Java,当然没有析构函数。而且我不能依赖“最终确定”。所以我不知道在哪里清理这个库。

Hive + UDF 世界中是否有任何东西会在查询完成时告诉我的 Java 代码,以便我可以清理该库?或者,我可以使用任何 Java 机制来执行此操作吗?

我使用的是“UDF”类而不是“GenericUDF”,但我认为这并不重要。我没有看到任何看起来像清理的东西(GenericUDF 的“关闭”永远不会被调用,AFAICT)。

4

0 回答 0