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

重要说明: 最好看下面官网这里更详细

Managing Apache Hive User-Defined Functions | 6.3.x | Cloudera Documentation

问题

在CDH5.13.x启用Sentry后,HiveServer2的Client(Beeline、Thrift)中不能使用add jar语句(hive cli方式还是可以的,不过这样无法控制权限Sentry就没意义了)
https://community.cloudera.com/t5/Hadoop-101-Training-Quickstart/ADD-JAR-command-from-beeline-nsufficient-privileges-to/td-p/39085
这种情况下,还有两种方式部署udf:

永久函数

// 上传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';

注意:如果要删除改函数,务必先删除函数,后删除jar包,否则会报这个错误

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)

出现错误后想恢复,需要上传与该函数创建时一致的jar包和路径,然后创建函数/删除函数

临时函数

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

  1. 在HiveServer2所在的机器中添加一个存放udf的jar包的文件夹,比如/usr/lib/hive/lib/(注意,如果HMS不和Server在一台机器上,需要保证这个路径也存在)。
  2. 将这个路径在CDH控制台CM的hive中设置到hive.reloadable.aux.jars.path中。
  3. 放置jar包
  4. 重启机器
  5. Sentry中授权
    GRANT ALL ON URI 'file:///usr/lib/hive/lib/<my.jar>' TO ROLE <example_role>;
  6. 使用时基于上传的jar包建立临时函数
create temporary function xxx as 'com.name.hive.udf.XXX'; --udf类在包中路径
select xxx('hello world');
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值