前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >0897-7.1.7-CDP中如何通过Ranger为UDF授权

0897-7.1.7-CDP中如何通过Ranger为UDF授权

作者头像
Fayson
发布2022-10-10 14:41:43
1.2K0
发布2022-10-10 14:41:43
举报
文章被收录于专栏:Hadoop实操Hadoop实操

1.文档编写目的

本片文档主要讲述了在Ranger中对Hive的UDF函数进行授权的方式。分别测试了对HDFS上和本地的UDF的授权。

  • 测试环境
    • CDP7.1.7,集群启用了Kerberos
    • 使用一个普通用户liuyq测试,该用户有udf_test库的权限

2.HDFS上的UDF JAR授权

2.1.准备工作

1.将UDF的 jar包上传至HDFS的/user/hive/udf目录下,用于测试HDFS上的UDF授权

代码语言:javascript
复制
hdfs dfs -mkdir /user/hive/udfhdfs dfs -put hiveudf.jar /user/hive/udfhdfs dfs -ls /user/hive/udf/

2.准备一张表udf_test.students用于测试UDF是否可用

2.2.永久UDF授权

1.在Ranger中进行授权

在cm_hdfs里授权用户有UDF路径/user/hive/udf/hiveudf.jar的RWX权限,cm_hive里授权udf_test库所有udf 的CREATE、SELECT、DROP权限

2.在Hive中注册UDF函数

代码语言:javascript
复制
USE udf_test;
create function TypeOf as "com.mycompany.hiveudf.TypeOf" USING JAR 'hdfs:///user/hive/udf/hiveudf.jar';

3.在Hive中使用UDF

代码语言:javascript
复制
SELECT students.name, typeof(students.name) AS type FROM students WHERE age=35;

2.3.临时UDF授权

1.在Ranger中进行授权

在cm_hdfs里授权用户有UDF路径/user/hive/udf/hiveudf.jar的RWX权限,同时在cm_hive的all-global策略中设置用户具有“Temporary UDF Admin”权限

2.在Hue中注册临时UDF

代码语言:javascript
复制
USE udf_test;create temporary function TypeOf as "com.mycompany.hiveudf.TypeOf" USING JAR 'hdfs:///user/hive/udf/hiveudf.jar';

3.在Hive中使用UDF

代码语言:javascript
复制
SELECT students.name, typeof(students.name) AS type FROM students WHERE age=35;

3.本地的UDF JAR授权

3.1.准备工作

1.在所有HMS、HS2节点创建/opt/udf目录,将UDF的jar包放置到该目录下,用于测试本地的UDF 授权

2.在Hive和Hive on Tez服务中的配置中将“Hive Auxiliary JARs Directory”配置为“/opt/udf”

3.重启Hive、Hive on Tez服务及相关依赖服务

3.2.永久UDF授权

1.在Ranger中进行授权

在cm_hive中授权用户有udf_test库所有udf 的CREATE、SELECT、DROP权限

2.在Hive中注册UDF函数

代码语言:javascript
复制
USE udf_test;create function TypeOf as "com.mycompany.hiveudf.TypeOf";

3.在Hive中使用UDF函数

代码语言:javascript
复制
SELECT students.name, typeof(students.name) AS type FROM students WHERE age=35;

3.3.临时UDF授权

1.在Ranger中进行授权

在cm_hive的all-global策略授权用户有“Temporary UDF Admin”权限

2.在Hive中注册临时UDF函数

代码语言:javascript
复制
USE udf_test;create temporary function TypeOf as "com.mycompany.hiveudf.TypeOf";

3.在Hive中使用UDF

代码语言:javascript
复制
SELECT students.name, typeof(students.name) AS type FROM students WHERE age=35;

4.授权中的常见问题分析

1.注册永久函数时

若报错

代码语言:javascript
复制
Error while compiling statement: FAILED: HiveAccessControlException Permission denied: user [liuyq] does not have [CREATE] privilege on [udf_test/typeof]

则说明用户缺少Hive库的UDF CREATE权限,需要在cm_hive中授权用户有对应Hive库的UDF CREATE权限

若报错

代码语言:javascript
复制
Error while compiling statement: FAILED: HiveAccessControlException Permission denied: user [liuyq] does not have [ALL] privilege on [hdfs://nameservice1/user/hive/udf/hiveudf.jar]

则说明用户缺少HDFS JAR包路径的权限,需要在cm_hdfs中授权用户有对应HDFS JAR包路径的ALL权限

2.注册临时函数

若报错

代码语言:javascript
复制
Error while compiling statement: FAILED: HiveAccessControlException Permission denied: user [liuyq] does not have [TEMPUDFADMIN] privilege on [typeof]

则需要在cm_hive中的all-global策略中添加用户有“Temporary UDF Admin”权限

3.使用UDF函数时

如报错

代码语言:javascript
复制
Error while compiling statement: FAILED: HiveAccessControlException Permission denied: user [liuyq] does not have [SELECT] privilege on [udf_test/typeof]

则需要在cm_hive中授权用户有对应Hive库的UDF SELECT权限。

5.总结

1.执行CREATE FUNCTION动作时,对于HDFS上的UDF JAR包,用户需要有相应HDFS JAR路径的ALL权限和Hive库的UDF CREATE权限;对于本地的UDF JAR包,需要授权用户有Hive库的UDF CREATE权限;如果要使用UDF 函数,则要有Hive库的UDF SELECT 权限。

2.执行CREATE TEMPORARY FUNCTION创建临时函数时,对于HDFS上的UDF JAR包,用户需要有相应HDFS JAR路径的ALL权限,还需要在cm_hive中的“all-global”策略中设置用户有“Temporary UDF Admin”权限;对于本地的UDF JAR包,只需在cm_hive中的“all-global”策略中设置用户有“Temporary UDF Admin”权限

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-10-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档