我可以使用CREATE TEMPORARY FUNCTION创建UDF并将其配置为当前配置单元会话。有没有办法做到这一点,并为所有用户的所有未来会议提供此功能?如何为所有会话创建配置单元UDF
回答
对于使用UDF,你需要两个步骤:
- 使可用于集群中的所有节点的UDF罐子。这通常是通过像
ADD JAR my_jar.jar
- 这样的命令将其添加到群集的分布式缓存中完成的。注册UDF以使其可以被Hive识别。这基本上将UDF的名称(例如from_unixtime)与UDF的类(org.apache.hadoop.hive.ql.udf.FromUnixTime)相关联。这通常通过如下命令完成:
CREATE TEMPORARY FUNCTION from_unixtime AS 'org.apache.hadoop.hive.ql.udf.FromUnixTime';
因此,为了让您为所有用户提供UDF,您必须执行上述2个步骤。对于#1,你可以在hive-env.sh中使用类似export HIVE_AUX_JARS_PATH = <path to the folder>
的东西来使得罐子可用。
获得#2很棘手,最好的方法是在Hive Metastore中支持UDF名称和类名之间的链接。但是,目前情况并非如此。所以,这样做没有真正的好方法。
我会推荐的是使用.hiverc文件,它同时执行#1和#2。将其放置在您的主目录或hive bin目录中(尽管补丁程序也正在从hive conf目录中进行拾取)。唯一的问题是它只有在用户通过CLI访问配置单元时才有效。如果您使用JDBC,则必须在Hive会话开始时手动输入该文件。
您可以在以下位置找到.hiverc文件:$ HIVE_HOME/bin/.hiverc和$ HOME/.hiverc?如果你找到一个然后打开文件,只需在那里添加你的CREATE TEMPORARY FUNCTION命令。然后,每次你开始配置时,这个.hiverc文件将被加载,所以你的UDF将被注册为所有HIVE会话。
Achyut
以上答案展开:为了真正使UDF的面世,要求所有用户/会话:
- 添加UDF蜂巢库/目录和/或HIVE_AUX_JARS_PATH
- 将函数添加到FunctionRegistry类并重新编译配置单元。是。不是那么好玩;)
从蜂巢圣经(编程蜂巢):
Here is an example change to FunctionRegistry where the new nvl() function is added
to Hive’s list of built-in functions:
...
registerUDF("parse_url", UDFParseUrl.class, false);
一个在how to add a permanent function in hive?指出,问题的答案,因为蜂房13有一个CREATE FUNCTION功能可永久功能描述于https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-PermanentFunctions。
从蜂巢0.13起的UDF可以存储在metastore并且可以在查询中引用....
CREATE FUNCTION [DB_NAME。] function_name AS class_name [使用JAR | FILE | ARCHIVE'file_uri'[,JAR | FILE | ARCHIVE'file_uri']];
实施例:
CREATE FUNCTION WOY AS 'com.udf.hive.WOYUDF' USING JAR 'HDFS:///user/root/udfhive-1.0-SNAPSHOT.jar';
- 1. 创建配置单元UDF
- 2. 如何编写配置单元UDF
- 3. 实现配置单元UDF
- 4. 如何为所有使用Tiles的JSP禁用会话创建?
- 5. Tomcat:如何阻止Tomcat为所有请求创建会话?
- 6. 创建会话与所有子
- 7. 如何在配置单元的python UDF中使用外部库?
- 8. 如何将外部属性传递到配置单元udf
- 9. Hive UDF运行:在配置单元中创建临时函数时出错
- 10. 如何配置会话cookie为仅HTTP
- 11. 如何配置Rails仅在需要时创建会话cookie?
- 12. 如何创建会话并在会话中设置UserBean
- 13. 会话创建期间如何设置会话属性?
- 14. 如何为访客创建会话?
- 15. 创建时可以在所有模板上设置会话吗?
- 16. 配置JBoss为每个http会话创建一个进程?
- 17. 指示StructureMap创建一个新的会话(配置只有当)
- 18. 在配置单元中创建模式
- 19. 无法创建配置单元表
- 20. Apache配置单元创建表
- 21. 如何创建会话(iPhone)?
- 22. 如何创建会话express.js
- 23. 是为所有访问自动创建的PHP会话
- 24. 只为python中的所有对象创建一个会话
- 25. 如何列出到目前为止正在使用或创建的所有配置单元数据库?
- 26. 如何在配置单元脚本中创建注释块
- 27. 如何在配置单元中创建表格的空副本
- 28. 配置单元 - 创建数据集,它将替换所有最常用的值
- 29. PHP没有创建会话
- 30. 如何创建没有任何中间文件的配置单元表?