如何在 Hive 中重新加载更新的自定义 UDF 函数?

Posted

技术标签:

【中文标题】如何在 Hive 中重新加载更新的自定义 UDF 函数?【英文标题】:How to reload the updated custom UDF function in Hive? 【发布时间】:2019-12-02 09:05:26 【问题描述】:

我用 java 编写了一个自定义 UDF,并打包在一个 jar 文件中。然后,我将其添加到 Hive 中:

create temporary function isstopword as 'org.dennis.udf.IsStopWord';

一切正常。但是,在我更新了 UDF 中的一小部分之后,我又重复了前面的步骤,因此 Hive 显然仍然使用旧版本的 UDF。

如何刷新 UDF 的更新版本?

我试图删除 hdfs 中的旧 jar 文件,并删除 udf 函数:

DROP TEMPORARY FUNCTION IF EXISTS isstopword;

然后重新创建一个同名的新函数,它仍然使用旧版本的UDF。

【问题讨论】:

请提及您正在使用的 ADD jar 语句 我使用 Cloudera 管理。所以我用 Hue GUI 上传了 jar。 【参考方案1】:

我按照这个文档解决了这个问题:http://bdlabs.edureka.co/static/help/topics/cm_mc_hive_udf.html#concept_zb2_rxr_lw_unique_1

一般有以下步骤:

    在 hive-site.xml 中添加配置,然后重启 hive 服务器。
<property>
    <name>hive.reloadable.aux.jars.path</name>
    <value>/user/hive/udf</value>
</property>

    在HDFS中删除了旧的jar文件,并上传了新的jar文件。

    DROP TEMPORARY FUNCTION IF EXISTS isstopword;

    在hive控制台中,运行list jar;查看本地jar文件, 它会打印出这样的内容:

/tmp/83ce8586-7311-4e97-813f-f2fbcec63a55_resources/isstopwordudf.jar

然后在您的服务器文件系统中删除它们。

    再次创建临时函数。
create temporary function isstopword as 'org.dennis.udf.IsStopWord';

通过上述步骤,它对我有用!

【讨论】:

【参考方案2】:

您添加的所有 jar 和您创建的临时函数仅特定于该特定 hive 会话。一旦您退出该会话,所有临时功能都将永远丢失。

您是否尝试关闭会话并再次重复这些步骤。

【讨论】:

我保持相同的会话。好的,我试试看。

以上是关于如何在 Hive 中重新加载更新的自定义 UDF 函数?的主要内容,如果未能解决你的问题,请参考以下文章

Hive中如何添加自定义UDF函数以及oozie中使用hive的自定义函数

0011-如何在Hive & Impala中使用UDF

我们可以从 Hive 中的自定义 UDF 运行查询吗?

如何写hive的udf函数

Python中的自定义数组值Hive UDF?

Hive如何在源码中添加自定义UDF?