Hive建表指定LOCATION时报HiveAccessControlException权限不足问题求助
问题原因
该报错是Hive的服务运行用户hive没有你指定的HDFS路径/user/maria_dev/practice的全部操作权限,触发了Hive访问控制异常。
解决方案
以下方案均适配HDP沙箱测试环境,可根据需求选择:
方案1:修改目标HDFS路径权限(最快捷)
登录沙箱命令行,执行以下操作:
- 切换到HDFS超级用户:
su - hdfs - 执行递归赋权,开放所有用户对该路径的读写执行权限(沙箱测试无安全风险):
hdfs dfs -chmod -R 777 /user/maria_dev/practice - 也可以选择仅把路径所有者改为hive用户,不影响其他用户读取:
hdfs dfs -chown -R hive:hive /user/maria_dev/practice
修改完成后重新执行建表语句即可。
方案2:更换Hive默认有权限的存储路径
如果不想修改原路径权限,可将CSV文件移动到Hive默认的仓库目录下操作:
- 先在Hive仓库目录下建对应表的存储目录:
hdfs dfs -mkdir -p /user/hive/warehouse/sales_transactions - 将原路径下的CSV文件移动到新目录:
hdfs dfs -mv /user/maria_dev/practice/*.csv /user/hive/warehouse/sales_transactions - 修改建表语句的LOCATION参数为新路径,再执行即可:
LOCATION 'hdfs://sandbox-hdp.hortonworks.com:8020/user/hive/warehouse/sales_transactions';
方案3:临时关闭Hive权限校验(仅测试环境使用,禁止生产环境操作)
在执行建表语句前先执行以下配置,临时关闭当前会话的权限校验:
set hive.security.authorization.enabled=false;
再执行建表语句即可。
注意事项
建议在建表语句开头加
EXTERNAL关键字创建外部表,避免后续误删表时同时删除LOCATION下的原始CSV数据,修改后的建表开头为CREATE EXTERNAL TABLE Sales_transactions(。
内容的提问来源于stack exchange,提问作者Sai Krishna
相关产品推荐
相关产品推荐

