Мы работаем с искрой (2.3.4) на ЭМИ. Мы могли бы запустить сервер spark thrift и подключиться с помощью драйвера Simba spark jdbc. Мы зарегистрировали встроенные пользовательские функции hive в оболочке куста и могли использовать их в sql-запросах, запускаемых из драйвера Simba к Thrift-серверу Spark.
Однако UDF куста current_user () всегда возвращается пустым при запуске на Thrift-сервере Spark. Тот же UDF работает и возвращает идентификатор пользователя с оболочкой spark-sql.
Может кто-нибудь помочь понять, почему сервер Spark-thrift не дает ожидаемых результатов. Есть ли какие-то настройки, которые нам нужно изучить.
Я зарегистрировал эти два UDF-файла улья и запустил искровой SQL-запрос.
CREATE FUNCTION myconcat AS 'org.apache.hadoop.hive.ql.udf.generic.GenericUDFConcat'
CREATE FUNCTION myuser AS 'org.apache.hadoop.hive.ql.udf.generic.GenericUDFCurrentUser'
select myuser(), myconcat('123','456')
Как мы увидим ниже, текущий пользовательский UDF показываетnull, пока concat UDF работает как положено.
== Parsed Logical Plan ==
'Project [unresolvedalias('myuser(), None), unresolvedalias('myconcat(123, 456), None)]
+- OneRowRelation
== Analyzed Logical Plan ==
default.myuser(): string, default.myconcat(123, 456): string
Project [HiveGenericUDF#org.apache.hadoop.hive.ql.udf.generic.GenericUDFCurrentUser() AS default.myuser()#74, HiveGenericUDF#org.apache.hadoop.hive.ql.udf.generic.GenericUDFConcat(123,456) AS default.myconcat(123, 456)#75]
+- OneRowRelation
== Optimized Logical Plan ==
Project [null AS default.myuser()#74, 123456 AS default.myconcat(123, 456)#75]
+- OneRowRelation
== Physical Plan ==
*(1) Project [null AS default.myuser()#74, 123456 AS default.myconcat(123, 456)#75]
+- Scan OneRowRelation[]