我们正在使用最新版本的Hive以及Impala。 Impala正在使用LDAP进行身份验证,并且正在通过Sentry完成授权。 Hive访问尚未通过Sentry授权。我们从Impala创建表,而/ user/hive/warehouse通过“配置单元”组拥有组级别所有权,因此,文件夹权限为impala:配置单元。使用Hive和Impala时表格文件夹权限问题
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,并且可以分组写入。该集团“蜂巢”拥有一个名为“蜂巢”,以及用户:
[[email protected] ~]# groups hive
hive : hive impala data
[[email protected] ~]# grep hive /etc/group
hive:x:486:impala,hive,flasun,testuser,fastlane
但是,当我尝试查询该文件夹中创建的表,它提供了访问错误:
[[email protected] 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单独不使用?
有人可以引导或确认吗?
感谢
感谢您的评论!但现在,我们已经通过让用户“impala”作为文件夹的所有者以及作为文件夹的所有者组的所关注组并将已应用770权限添加到文件夹来解决了这种情况。显然,当用户使用impala访问表时,由于用户模拟被禁用,他们利用“impala”用户,因此能够访问并且在用户被模拟的配置单元中,由于组权限,他们能够访问。唯一需要注意的是该团队应该是主要团队!次要群组不被HDFS识别。 – user5092078