在有Sentry控制下的CDH中部署Hive的UDF

問(wèn)題

在CDH5.13.x啟用Sentry后,HiveServer2的Client(Beeline、Thrift)中不能使用add jar語(yǔ)句(hive cli方式還是可以的,不過(guò)這樣無(wú)法控制權(quán)限Sentry就沒(méi)意義了)
https://community.cloudera.com/t5/Hadoop-101-Training-Quickstart/ADD-JAR-command-from-beeline-nsufficient-privileges-to/td-p/39085
這種情況下,還有兩種方式部署udf:

永久函數(shù)

// 上傳udf的jar包
hdfs dfs -put xxx.jar hdfs://cluster-name/user/hive/warehouse/udf/xxx.jar
create function <db>.<function_name> as 'ClassName' using jar 'hdfs://cluster-name/user/hive/warehouse/udf/xxx.jar';

注意:如果要?jiǎng)h除改函數(shù),務(wù)必先刪除函數(shù),后刪除jar包,否則會(huì)報(bào)這個(gè)錯(cuò)誤

INFO  : Added [/tmp/b0eb87ea-9ae0-4a4c-a30f-256587f57fc5_resources/xxx.jar] to class path
INFO  : Added resources: [hdfs://cluster-name/user/hive/warehouse/udf/xxx.jar]
ERROR : Failed to register default.<function_name> using class ClassName
ERROR : FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.FunctionTask
INFO  : Completed executing command(queryId=hive_20190725202828_b7798b25-74dd-4113-a802-96c402b60cfe); Time taken: 0.336 seconds
Error: Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.FunctionTask (state=08S01,code=1)

出現(xiàn)錯(cuò)誤后想恢復(fù),需要上傳與該函數(shù)創(chuàng)建時(shí)一致的jar包和路徑,然后創(chuàng)建函數(shù)/刪除函數(shù)

臨時(shí)函數(shù)

https://www.cloudera.com/documentation/enterprise/5-13-x/topics/cm_mc_hive_udf.html

  1. 在HiveServer2所在的機(jī)器中添加一個(gè)存放udf的jar包的文件夾,比如/usr/lib/hive/lib/(注意,如果HMS不和Server在一臺(tái)機(jī)器上,需要保證這個(gè)路徑也存在)。
  2. 將這個(gè)路徑在CDH控制臺(tái)CM的hive中設(shè)置到hive.reloadable.aux.jars.path中。
  3. 放置jar包
  4. 重啟機(jī)器
  5. Sentry中授權(quán)
    GRANT ALL ON URI 'file:///usr/lib/hive/lib/<my.jar>' TO ROLE <example_role>;
  6. 使用時(shí)基于上傳的jar包建立臨時(shí)函數(shù)
create temporary function xxx as 'com.name.hive.udf.XXX'; --udf類在包中路徑
select xxx('hello world');
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容