如何为 Hive 自定义 UDF 添加 JAR,使其在 HDInsight 群集上永久可用?

Posted

技术标签:

【中文标题】如何为 Hive 自定义 UDF 添加 JAR,使其在 HDInsight 群集上永久可用?【英文标题】:How to add JAR for Hive custom UDF so it is available permanently on the HDInsight cluster? 【发布时间】:2016-07-22 01:06:45 【问题描述】:

我在 Hive 中创建了一个自定义 UDF,它在 Hive 命令行中进行了测试并且工作正常。所以现在我有了 UDF 的 jar 文件,我需要做什么才能让用户能够创建指向它的临时函数?理想情况下,从 Hive 的命令提示符我会这样做:-

hive> add jar myudf.jar;
Added [myudf.jar] to class path
Added resources: [myudf.jar]
hive> create temporary function foo as 'mypackage.CustomUDF';

在此之后,我能够正确使用该功能。

但我不想在每次要执行该功能时都添加 jar。我应该能够在以下情况下运行此功能:-

    从 Visual Studio 对 HDInsight 群集执行 Hive 查询 通过 SSH(Linux) 从命令行执行 Hive 查询或 RDP/cmd(Windows) 从 Ambari (Linux) Hive 视图执行 Hive 查询 从 HDinsight 查询控制台 Hive 执行 Hive 查询 编辑器(Windows 集群)

因此,无论我如何执行查询,JAR 都应该已经可用并添加到路径中。对于 Linux 和 Windows 集群,确保这一点的流程是什么?

【问题讨论】:

检查这个.. issues.apache.org/jira/browse/HIVE-6047 issues.apache.org/jira/secure/attachment/12626615/… 这不是我的意思。我不介意使用 add jar 命令重新注册。问题是关于将 JAR 添加到路径而不是永久 UDF。我想了解这些步骤(在哪里复制 JAR 等),以便无论该集群如何访问 Hive,它都可以通过 Hive 使用。到目前为止,我可以使用 SSH 连接到集群(headnode)并将 JAR 复制到我的 headnode 主目录并发出 add jar 命令。但是,如果我通过 Web UI(HDInsight Hive 编辑器)或 Ambari Hive View 或使用 Visual Studio 发出命令使用 Hive。 为了进一步澄清,我使用 RDP 连接到 HDInsight Hadoop(Windows) 集群的头节点。将 JAR 文件复制到已经在系统路径中的文件夹之一(在 windows 的 PATH 变量中显示为文件夹之一)。仍然当我从 Hive 提示符发出 add jar 命令时,它说它没有找到 jar 文件。这是我想要避免的。看起来 Hive 有自己的路径变量。 【参考方案1】:

也许你可以在 hive etc/conf 目录中的 hiverc 文件中添加 jar。每次 hive 启动时都会加载此文件。因此,从下次开始,您无需为该会话单独添加 jar。

【讨论】:

它在根目录下吗?我没有找到 /etc/conf 目录。你是说只在头节点上复制就足够了吗? 您可以查看 $HIVE_HOME/bin/.hiverc 文件。如果文件不存在,您可以创建此文件。 或者你可以选择另一种选择。在 hive-site.xml 中,有一个名为 的属性。将其值作为 jar 文件的位置。 要在头节点上进行更改? 更改 hive 配置文件,您安装 hive 的位置

以上是关于如何为 Hive 自定义 UDF 添加 JAR,使其在 HDInsight 群集上永久可用?的主要内容,如果未能解决你的问题,请参考以下文章

HIVE 编写自定义函数UDF

Hive自定义函数UDF和UDTF

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

hive添加hdf等第三方jar

如何为所有会话创建配置单元 UDF

自定义UDF函数,从hive保存到mongodb