hadoop - 同时使用 Hive 和 Impala 时出现表文件夹权限问题

标签 hadoop hive hdfs impala

我们使用最新版本的 Hive 和 Impala。 Impala 正在使用 LDAP 进行身份验证,并通过 Sentry 完成授权。 Hive 访问尚未通过 Sentry 授权。我们正在从 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-alone没有?

有人可以指导或确认吗?

谢谢

最佳答案

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

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

关于hadoop - 同时使用 Hive 和 Impala 时出现表文件夹权限问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32268052/

相关文章:

java - 在Eclipse中运行mapreduce程序时出错

hadoop - 现有 CDH 5.5.2 集群上的 Kafka 配置

hadoop - 如何使用 hive/pig 查找唯一连接的数量

hadoop - 在 Amazon EC2 上将 HDFS 与 Apache Spark 结合使用

java - Giraph估计的群集堆4096MB的请求要大于当前可用的群集堆0MB。中止工作

hadoop - 如何在不使用 map reduce 的情况下使用 lzo 压缩写入 hadoop hdfs

hive - 如何通过列名称而不是列顺序从多个CSV在AWS Athena中创建表

sql - 如何以编程方式为过去和 future 增加两周的开始日期和结束日期?

hadoop - Namenode在硬盘和内存中存储了哪些信息?

hadoop - 是否每次都需要伪分发模式下的Namenode格式