1

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

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

每件事都运作良好。但是,在我更新了 UDF 中的一小部分之后,我又重复了前面的步骤,因此 Hive 显然仍然使用旧版本的 UDF。

如何刷新 UDF 的更新版本?

我试图删除jarhdfs 中的旧文件,并使用以下命令删除 udf 函数:

DROP TEMPORARY FUNCTION IF EXISTS isstopword;

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

4

2 回答 2

1

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

一般有以下步骤:

  1. 在 hive-site.xml 中添加了一个配置,然后重新启动 hive 服务器。
<property>
    <name>hive.reloadable.aux.jars.path</name>
    <value>/user/hive/udf</value>
</property>
  1. 删除HDFS中的旧jar文件,并上传新的jar文件。

  2. DROP TEMPORARY FUNCTION IF EXISTS isstopword;

  3. 在 hive 控制台中,运行list jar;以检查本地 jar 文件,它会打印如下内容:

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

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

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

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

于 2019-12-02T10:48:22.040 回答
0

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

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

于 2019-12-02T10:43:15.960 回答