Hive 权限控制
hive 权限控制主要是底层 HDFS 和 hive 自身对表的授权管理。
1.多用户启动 hive
1.1 非管理员身份
如以当前登录的用户进入 hive cli,报错了,提示没有权限
$ hive
Exception in thread "main" java.lang.RuntimeException: java.io.IOException: Permission denied
解决办法,这个主要是由于 hive 配置文件中配置的一些临时或存放中间结果的目录权限设置问题,导致当前登陆 hive 的用户没权限访
主要涉及如下两个参数:
<property>
<name>hive.exec.scratchdir</name>
<value>hdfs://hadoop-master:9000/opt/tmp/hive</value>
<description>HDFS root scratch dir for Hive jobs which gets created with write all (733) permission. For each connecting user, an HDFS scratch dir: ${hive
.exec.scratchdir};username is created, with ${hive.scratch.dir.permission}</description>
</property>
<property>
<name>hive.exec.local.scratchdir</name>
<value>/opt/tmp/hive_scratchdir</value>
<description>Local scratch space for Hive jobs</description>
</property>
需要修改对应的 hdfs 和本地两个目录的权限
# hdfs
hdfs dfs -ls /opt/tmp/hive
drwx------ - hadoop supergroup 0 2018-10-13 23:23 /opt/tmp/hive/hadoop
drwx------ - hue supergroup 0 2017-12-08 20:47 /opt/tmp/hive/hue
drwx------ - root supergroup 0 2018-09-19 16:50 /opt/tmp/hive/root
# 本地
ll /opt/tmp/hive_scratchdir
total 16
drwx------ 2 hadoop hadoop 4096 Nov 15 2017 164dc4ef-1442-4c67-b1e4-6c4f48f93fa8
drwx------ 2 hadoop hadoop 4096 Oct 13 20:47 42d5af9a-ecb1-4708-92fa-176ba0ca8b30
drwx------ 2 hadoop hadoop 4096 Oct 13 23:24 b54b7bc2-2156-4afa-833a-ee0b69e5c687
-rw-rw-r-- 1 hadoop hadoop 0 Oct 13 23:23 b54b7bc2-2156-4afa-833a-ee0b69e5c6875489728272456121679.pipeout
...
修改为 666 即可,注意路径上的所有父目录路径也要有相应的访问权限!!!
hdfs dfs -chmod -R 755 /opt
hdfs dfs -chmod -R 777 /tmp/hadoop-yarn/
chmod -R 777 /opt/tmp
同理参考: Hadoop 2.7.x Permission denied: user=dr.who, access=READ_EXECUTE, inode="/tmp"问题解决
以管理员身份启动 hive:
hive -hiveconf hive.root.logger=INFO,console
2.Hive 用户对底层文件的权限
hive 用户对底层文件的访问权限,主要通过设置 3 个参数完成:
<property>
<name>hive.files.umask.values</name>
<value>0022</value>
<description>当 hive 在 hdfs 上创建文件时,对应的默认掩码。此处的 0022,第一个 0 表示八进制;剩下的 022 用二进制表示即 000010010,然后取反得 111101101,即 rwxr-xr-x,这样其他用户登录 hive 或 hdfs 时候,就没权限删除该文件</description>
</property>
<property>
<name>hive.metastore.authorization.storage.checks</name>
<value>true</value>
<description>就是配合 hive.files.umask.values 参数做权限控制.</description>
</property>
<property>
<name>hive.metastore.execute.setugi</name>
<value>true</value>
<description>简单说就是,hadoop 在非安全模式(未使用 kerborers 认证)时,使用 hive 客户端进程对应的用户和组权限操作 hdfs</description>
</property>
已经在阿里 EMR Hive 配置上添加了该参数(需要重启 hive),通过以上配置,进入 hive 的用户就不能随意对底层文件随意操作了,必须具有相应权限。接下来可以进行 hive 自身类似 mysql 一样的权限授权管理了。
3. Hive 自身权限
开启权限
<property>
<name>hive.security.authorization.enabled</name>
<value>true</value>
<description>开启权限验证</description>
</property>
<property>
<name>hive.security.authorization.createtable.owner.grants</name>
<value>ALL</value>
<description>表的创建者对表拥有所有权限</description>
</property>
hive 授权核心:
- 用户
- 组
- 角色
举例:
用户 | 组 | 描述 |
---|---|---|
张三 | G_db1 | 可访问 db1 |
李四 | G_db2 | 可访问 db2 |
王五 | G_bothdb | 可访问 db1、db2 |
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: Hive 解析 JSON 数据
下一篇: 彻底找到 Tomcat 启动速度慢的元凶
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论