同时使用hive和impala时表文件夹权限问题

wnrlj8wa  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(437)

我们正在使用最新版本的Hive以及 Impala 。impala正在通过ldap进行身份验证,授权是通过sentry完成的。尚未通过哨兵授权Hive访问。我们正在从impala创建表,而/user/hive/warehouse拥有“hive”组的组级所有权,因此,文件夹权限是impala:hive.

drwxrwx--T   - impala hive          0 2015-08-24 21:16 /user/hive/warehouse/test1.db
drwxrwx--T   - impala   hive          0 2015-08-11 17:12 /user/hive/warehouse/test1.db/events_test_venus

可以看到,上面的文件夹属于impala,组是hive,并且是组可写的。组“hive”还有一个名为“hive”的用户:

[root@server ~]# groups hive
hive : hive impala data

[root@server ~]# grep hive /etc/group
hive:x:486:impala,hive,flasun,testuser,fastlane

但是,当我尝试查询在文件夹上创建的表时,会出现访问错误:

[root@jupiter fastlane]# sudo -u hive hive

hive> select * from test1.events_test limit 1;
FAILED: SemanticException Unable to determine if hdfs://mycluster/user/hive/warehouse/test1.db/events_test_venus is encrypted: org.apache.hadoop.security.AccessControlException: Permission denied: user=hive, access=EXECUTE, inode="/user/hive/warehouse/test1.db":impala:hive:drwxrwx--T
    at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.checkFsPermission(DefaultAuthorizationProvider.java:257)
    at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.check(DefaultAuthorizationProvider.java:238)
    at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.checkTraverse(DefaultAuthorizationProvider.java:180)
    at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.checkPermission(DefaultAuthorizationProvider.java:137)
    at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:138)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:6599)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:6581)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPathAccess(FSNamesystem.java:6506)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getEZForPath(FSNamesystem.java:9141)
    at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getEZForPath(NameNodeRpcServer.java:1582)
    at org.apache.hadoop.hdfs.server.namenode.AuthorizationProviderProxyClientProtocol.getEZForPath(AuthorizationProviderProxyClientProtocol.java:926)
    at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getEZForPath(ClientNamenodeProtocolServerSideTranslatorPB.java:1343)
    at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
    at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:619)
    at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1060)
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2044)
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2040)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1671)
    at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2038)

有什么办法对付它吗??基本上,我们试图利用这样一个事实:通过授予组级别的读写权限,我们应该能够让任何组用户创建和使用由文件夹所有者创建的表,但这似乎是不可能的。是不是因为事实上,impala单独拥有sentry授权,它使用用户模拟,而hive、stand-lone没有?
有人能指导或确认吗?
谢谢

vdzxcuhz

vdzxcuhz1#

您可以将hdfs的umask设置为000并重新启动集群。这将确保在此更改后创建的所有目录或文件都具有777权限。在此之后,对目录和文件夹应用适当的所有权和权限,以确保其他目录的权限未打开。将umask设置为000不会更改现有目录的权限。只有新创建的目录/文件会受到影响。如果您使用的是cloudera管理器,那么进行此更改非常容易。
注意:umask 000将使所有文件/目录具有默认权限777。这将产生开放权限。因此,通过在父目录级别应用权限和acl来处理这个问题。

相关问题