2015-08-28 40 views
0

我们正在使用最新版本的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单独不使用?

有人可以引导或确认吗?

感谢

回答

1

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

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

+0

感谢您的评论!但现在,我们已经通过让用户“impala”作为文件夹的所有者以及作为文件夹的所有者组的所关注组并将已应用770权限添加到文件夹来解决了这种情况。显然,当用户使用impala访问表时,由于用户模拟被禁用,他们利用“impala”用户,因此能够访问并且在用户被模拟的配置单元中,由于组权限,他们能够访问。唯一需要注意的是该团队应该是主要团队!次要群组不被HDFS识别。 – user5092078