扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这篇文章主要介绍了开启Sentry后LOAD DATA异常怎么办,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
创新互联长期为1000多家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为彝良企业提供专业的做网站、网站建设,彝良网站改版等技术服务。拥有十余年丰富建站经验和众多成功案例,为您定制开发。
问题描述
在开启了Sentry的CDH集群中,Hive或Impala的操作会受Sentry的管理,不同的操作需要不同的权限。例如,要在Hive中执行ALTER DATABASE命令,用户需要拥有SERVER或DATABASE的ALL权限。本文是描述关于LOAD DATA的异常,我们先来看看Cloudera官网对于这一块的描述:
具体请参考:
https://www.cloudera.com/documentation/enterprise/5/latest/topics/cm_sg_sentry_service.html#sentry_service
可以看出如果需要LOAD DATA操作,则需要具有ALL或者INSERT权限。本文Fayson描述虽然对于Database赋予了ALL权限,但依旧会报错没有load data 权限异常。
测试环境
1.CM和CDH版本为5.15.1
2.操作系统版本为RedHat7.2
3.集群已启用Kerberos
4.已启用Sentry
以下具体描述该问题,使用以下命令load data到Hive表中,提示user test_sjz does not have privileges for LOAD
use test_sjz;
#加载HDFS中数据到hive表
load data inpath ‘/user/test_sjz/super_store.csv’ into table super_store;
#加载本地数据到hive表
load data local inpath ‘/user/test_sjz/super_store.csv’ into table super_store;
查看test_sjz 用户组的权限,发现是具有test_sjz 库的all 权限的,即表示test_sjz 能使用load data 命令
show grant role test_sjz;
看到提示另一个异常,提示:this required privileges:Server=server1 ….
,于是尝试给HDFS非/user/
发现依旧不能load data。
2
问题解决
原因在于Sentry将检查 LOAD DATA 语句源文件和目标表。需要目标表上的INSERT和源文件上的URI权限.
即需要将Sentry中的URI权限授予用户主目录(/ user /
GRANT ALL ON URI “hdfs://namenode:8020/user/ /” TO ROLE ;
注:如果你启用的NameNode的HA,建议使用Nademode 的Nameservice 来代替主机名和端口号,这可确保即使NameNode更改,URI也将保持不变。如下图红线圈出的部分所示:
登录hive用户,给/user/test_sjz 目录授权后尝试
GRANT ALL ON URI “hdfs://namenode:8020/user/ /” TO ROLE ;
然后load data 成功
use test_sjz;
#加载HDFS中数据到hive表
load data impath ‘/user/test_sjz/super_store.csv’ into table super_store;
#加载本地数据到hive表
load data local impath ‘/user/test_sjz/super_store.csv’ into table super_store;
感谢你能够认真阅读完这篇文章,希望小编分享的“开启Sentry后LOAD DATA异常怎么办”这篇文章对大家有帮助,同时也希望大家多多支持创新互联,关注创新互联行业资讯频道,更多相关知识等着你来学习!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流