无法在具有权限的文件夹中的 HDFS 上创建暂存目录
Cannot create staging directory on HDFS in a folder that has permissions
HDFS 的根目录中有几个文件夹:
- 目录 1
- 子目录 1
- table1
- table2
- 子目录 2
- 目录 2
- 子目录 1
- table1
- table2
- dir3
它们都有子文件夹,其中包含使用 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。受此问题影响的文件夹并不多,因此不会花费很长时间。
我知道这不是真正的解决方案,但我无法弄清楚到底发生了什么,这个变通办法起到了作用。
HDFS 的根目录中有几个文件夹:
- 目录 1
- 子目录 1
- table1
- table2
- 子目录 2
- 子目录 1
- 目录 2
- 子目录 1
- table1
- table2
- 子目录 1
- dir3
它们都有子文件夹,其中包含使用 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。受此问题影响的文件夹并不多,因此不会花费很长时间。
我知道这不是真正的解决方案,但我无法弄清楚到底发生了什么,这个变通办法起到了作用。