我们正在使用最新版本的蜂巢以及黑斑羚。Impala正在使用LDAP进行身份验证,并通过Sentry进行授权。到目前为止,蜂箱访问尚未通过Sentry授权。我们正在从Impala创建表,而/user/hive/仓库通过"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,独立并不是这样吗?
有人能指点或确认一下吗?
谢谢
发布于 2015-08-28 02:14:05
您可以将hdfs的umask设置为1000并重新启动集群。这将确保在此更改之后创建的所有目录或文件都具有权限777。在此之后,对目录和文件夹应用正确的所有权和权限,以确保其他目录的权限不会打开。将umask设置为000不会更改现有目录的权限。只有新创建的目录/文件会受到影响。如果您正在使用cloudera管理器,则很容易进行此更改。
注意:U掩码000将使所有文件/目录具有默认权限777。这将提供打开的权限。因此,通过在父目录级别应用权限和acls来处理此问题。
https://stackoverflow.com/questions/32268052
复制相似问题