在Multi hiveserver中共享UDF

时间:2018-11-29 06:57:42

标签: hive user-defined-functions

在我们的生产环境中,我们拥有多台hiveserver2以实现高可用性。用户可以通过运行来创建永久的UDF

beeline -u "jdbc:hive2//hs1.name.com"    
add jar <hdfs://ns:8020/path/udf.jar>
create  function myfunc as 'com.test.udf.UDF_CLASS' using jar 'hdfs://ns:8020/path/udf.jar'

用户连接到hs1.name.com可以,但是使用beeline连接到另一个hiveserver2来调用UDF时,用户找不到功能错误

beeline -u "jdbc:hive2//hs2.name.com"
select myfunc(id) from table1  

错误消息是

  

错误:编译语句时出错:失败:SemanticException [错误10011]:行1:7无效的函数“ myfunc”(状态= 42000,代码= 10011)`

在hs2.name.com上重新启动hiveserver2之后,用户可以正确调用UDF。
  是否有某种方式不重新启动hiveserver2,而是告诉hiveserver2从metastore重新加载UDF信息?

感谢@Kishore,reload function很棒!

1 个答案:

答案 0 :(得分:0)

USE RELOAD FUNCTION;

从HIVE-2573开始,如果在一个Hive CLI会话中创建永久功能是在创建功能之前创建的,则它们可能不会反映在HiveServer2或其他Hive CLI会话中。在HiveServer2或HiveCLI会话中发出RELOAD FUNCTION将使它能够对其他HiveCLI会话可能已完成的对永久功能的任何更改。

ref-https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-Create/Drop/ReloadFunction