无法在具有权限的文件夹中的 HDFS 上创建暂存目录

Cannot create staging directory on HDFS in a folder that has permissions

HDFS 的根目录中有几个文件夹:

它们都有子文件夹,其中包含使用 Hive 查询的不同 Parquet 文件。 我无法加载其中一个子文件夹(例如 dir2 中的 table1),即使权限对我来说没问题,但在尝试加载它时出现 EXECUTE 错误。 该代码在 Jupyter 笔记本中为 运行。 用户按组组织。

我已使用以下命令将相关目录的 rwx 权限添加到组中:

hdfs dfs -setfacl -R -m group:user_group:rwx /dir2/subdir2

我遇到的错误如下所示:

Cannot create staging directory 'hdfs://server:8020/dir2/subdir1/table1/.hive-staging_hive_2019-08-01_13-04-22': Permission denied: user=username, access=EXECUTE, inode="/dir2":hdfs:supergroup:drwxrwx---

我已将对 dir2 的读取和执行权限添加到用户组,但错误仍然存​​在。在我看来,这个错误以某种方式应用了默认权限,它们是 ---

所以,总结一下; 组对根目录具有读取和执行权限,对 table 目录具有读取、写入和执行权限,但它始终无法获得根目录的权限。

权限是这样的:

# file: /dir2
# owner: hdfs
# group: supergroup
user::rwx
user:some_group1:r-x
group::---
group:some_group2:rwx
group:user_group:r-x
group:hive:rwx
group:some_group3:r-x
group:some_group4:r-x
mask::rwx
other::---
default:user::rwx
default:user:some_group1:r-x
default:group::---
default:group:some_group2:rwx
default:group:hive:rwx
default:group:some_group3:r-x
default:group:some_group4:r-x
default:mask::rwx
default:other::---


# file: /dir2/subdir1/table1
# owner: some_user
# group: supergroup
user::rwx
user:some_group1:r-x
group::---
group:some_group2:rwx
group:user_group:rwx
group:hive:rwx
group:some_group3:r-x
group:some_group4:rwx
mask::rwx
other::---
default:user::rwx
default:user:some_group1:r-x
default:group::---
default:group:some_group2:rwx
default:group:user_group:rwx
default:group:hive:rwx
default:group:some_group3:r-x
default:group:some_group4:rwx
default:mask::rwx
default:other::---

问题最终通过创建替换旧目录的新目录得到解决。新目录是使用正确的用户和凭据创建的。 例如,我创建了 subdir1_new,将数据移到那里,将 subdir1 重命名为 subdir1_old,将 subdir1_new 重命名为 subdir1。受此问题影响的文件夹并不多,因此不会花费很长时间。

我知道这不是真正的解决方案,但我无法弄清楚到底发生了什么,这个变通办法起到了作用。