在我们的生产环境中,我们有多个hiveserver2以获得高可用性
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'
user connect to hs1.name.com是可以的,但是当使用beeline connect另一个hiveserver2调用udf时,user get function not found出错,如
beeline -u "jdbc:hive2//hs2.name.com"
select myfunc(id) from table1
错误消息是
错误:编译语句时出错:失败:semanticexception[error 10011]:行1:7无效函数“myfunc”(state=42000,code=10011)在hs2.name.com上重启hiveserver2后,用户可以正确调用udf。 有没有办法不重新启动hiveserver2,而是让hiveserver2从metastore重新加载udfs信息? 谢谢@kishore,
reload function` 太好了!
1条答案
按热度按时间jv4diomz1#
从hive-2573开始,在一个hive cli会话中创建永久函数可能不会反映在hiveserver2或其他hive cli会话中,如果这些会话是在创建函数之前启动的。在hiveserver2或hivecli会话中发出reload函数将允许它获取可能由其他hivecli会话对永久函数所做的任何更改。
参考-https://cwiki.apache.org/confluence/display/hive/languagemanual+ddl#languagemanualddl-创建/删除/重新加载函数