在我们的生产环境中,我们拥有多台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
很棒!
答案 0 :(得分:0)
USE RELOAD FUNCTION;
从HIVE-2573开始,如果在一个Hive CLI会话中创建永久功能是在创建功能之前创建的,则它们可能不会反映在HiveServer2或其他Hive CLI会话中。在HiveServer2或HiveCLI会话中发出RELOAD FUNCTION将使它能够对其他HiveCLI会话可能已完成的对永久功能的任何更改。