hive 设置hive.allow.udf.load.on.demand=true 使 HiveServer 动态从 Metastore 查找函数

当 hive.allow.udf.load.on.demand=false 时

我们连接一台 HiveServer,创建一个persistent function。

hadoop fs -put hive-util-0.1.0.jar /user/hive/hive-util-0.1.0.jar;

hive 执行

create function add_int as 'com.baidu.hive.func.AddInt' using jar 'hdfs://bmr-master-8905dd3:8020//user/hive/hive-util-0.1.0.jar';
desc function extended add_int;
OK
There is no documentation for function 'add_int'
Function class:com.baidu.hive.func.AddInt
Function type:PERSISTENT
Resource:hdfs://bmr-master-8905dd3:8020//user/hive/hive-util-0.1.0.jar
Time taken: 0.27 seconds, Fetched: 4 row(s)
select add_int(1);
2

现在我们重新启动 beeline 连接另一台 HiveServer,执行 select add_int(1);会发现函数不存在。

0: jdbc:hive2://bmr-master-8905dd3:2181/defau> select add_int(1);
Error: Error while compiling statement: FAILED: SemanticException [Error 10011]: Invalid function add_int (state=42000,code=10011)

解决办法就是重启 HiveServer2。但是我们经常创建 persistent function 就比较麻烦。设置 hive.allow.udf.load.on.demand=true 也可以解决。

当 hive.allow.udf.load.on.demand=true 时

如果 HiveServer 发现没有此函数,则从 Metastore 查找函数信息。如果找到,则返回用户,避免了创建函数和使用函数连接的不同的 HiveServer 的问题。

你可能感兴趣的:(hive,hive)