Hive CLI:未使用与数据库相同的用户创建表(权限被拒绝)

时间:2020-04-01 05:46:21

标签: hadoop hive


平台:具有6个节点的HDP3集群
从datanode( non-NameNode

执行

目标:让新用户创建一个数据库,并在其中创建一个表。简单。
这是我遵循的步骤,以及下面的错误:

[root@server:~]useradd lebowski               // create user
[root@server:~]passwd lebowski 
[root@server:~]usermod -a -G hadoop lebowski  // add user to hadoop group
[root@server:~]su lebowski
[lebowski@server:~]$ groups
lebowski hadoop           //All good

[lebowski@server:~]$hive                          //same output & issues w/ beeline as well
0: jdbc:hive2://server.com> CREATE DATABASE dude;
0: jdbc:hive2://server.com> use dude;

0: jdbc:hive2://server.com> CREATE TABLE BIG (//table creation stuff goes here//);

错误:失败:执行错误,从以下代码返回代码1: org.apache.hadoop.hive.ql.exec.DDLTask。 MetaException(message:Got 例外:org.apache.hadoop.security.AccessControlException

权限被拒绝: user = lebowski ,access = EXECUTE, inode =“ / warehouse / tablespace / managed / hive / dude.db”: hive:hadoop:drwxrwx ---

现在您可以看到:hdfs上的 dude.db 文件由 hive 拥有,并归于“ hadoop”组

dude.db:hive:hadoop:drwxrwx---

令人惊讶的事实:
-由于hive.server2.enable.doAs设置为true,因此HiveServer2应该在用户提交查询时执行Hive操作。
-数据库所有者为hive,尽管提交查询的用户为lebowski
-但是,表创建已链接到用户lebowski,该用户在尝试写入先前在hdfs中创建的数据库文件夹时被拒绝。

我尝试过的事情:
我尝试将hadoop.security.group.mapping强制设为ShellBasedUnixGroupsMapping,但这会导致NameNode重新启动失败,因此我将其恢复为默认(Jni)。
我还尝试刷新组映射:hdfs dfsadmin -refreshUserToGroupsMappings

问题:为什么在同一上下文中使用一个技术用户在hdfs(在数据库创建的情况下为 hive )上写数据,而实际用户(lebowski)在在下一条语句中创建表?

另一个令人费解的事情是,我确保用户(lebowski)在“ hadoop”用户组中。
从逻辑上讲,不应引发此错误:用户所在的组对hdfs文件夹具有rwx权限。

一个可能的解释是本文的出发点:“ unix”用户lebowski是从数据节点创建的,因此我不确定它如何传播到整个集群

另一个线索是“ Hive角色管理和授权”,它可以与基于POSIX的权利和许可进行交叉/干扰/覆盖。

可能的解决方法:我可以以hdfs或hive的方式连接,也可以通过chmod强制进入,但是我想一次来完成生产工作友好的方式,从书上讲,而不是破解我的方式。

其他信息:

已安装Ranger,但未激活Hive插件

hive.security.authorization.manager设置为 org.apache.hadoop.hive.ql.security.authorization.plugin.fallback.FallbackHiveAuthorizerFactory

hive.security.authorization.enabled设置为true

欢迎任何开明的想法。

0 个答案:

没有答案