Поделиться UDFs в Multi Hiveserver - PullRequest
0 голосов
/ 29 ноября 2018

В нашей производственной среде у нас есть несколько 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'

Пользователь подключается к 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) `

После перезапуска hiveserver2 на hs2.name.com пользователь может правильно вызывать UDF.
Есть ли какой-то способ не перезапускать hiveserver2, но сказал hiveserver2 перезагрузить информацию UDF из metastore?

Спасибо @Kishore, reload function отлично!

1 Ответ

0 голосов
/ 29 ноября 2018
USE RELOAD FUNCTION;

Начиная с HIVE-2573, создание постоянных функций в одном сеансе Hive CLI может не отражаться в HiveServer2 или других сеансах Hive CLI, если они были запущены до создания функции.Выполнение функции RELOAD в сеансе HiveServer2 или HiveCLI позволит ему получить любые изменения в постоянных функциях, которые могли быть выполнены другим сеансом HiveCLI.

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

...