使用Hive和Impala同时使用表文件夹权限问题

时间:2015-08-28 09:45:04

标签: hadoop hive hdfs impala

我们正在使用最新版本的Hive以及Impala。 Impala正在使用LDAP进行身份验证,并且正在通过Sentry进行授权。目前尚未通过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拥有,group是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是独立的吗?

有人可以指导或确认吗?

由于

1 个答案:

答案 0 :(得分:1)

您可以将hdfs的umask设置为000并重新启动群集。这将确保在此更改后创建的所有目录或文件都具有权限777.此后,对目录和文件夹应用适当的所有权和权限,以确保其他目录的权限未打开。将umask设置为000不会更改现有目录的权限。只有新创建的目录/文件才会受到影响。如果您使用的是cloudera管理器,则很容易进行此更改。

注意:Umask 000将使所有文件/目录具有默认权限777.这将创建开放权限。因此,通过在父目录级别应用权限和acls来处理此问题。