文档首页/ MapReduce服务 MRS/ 故障排除/ 存算分离类/ 使用Hadoop客户端删除OBS上数据时报.Trash目录没有权限错误
更新时间:2023-11-02 GMT+08:00

使用Hadoop客户端删除OBS上数据时报.Trash目录没有权限错误

问题描述

执行hadoop fs -rm obs://<obs_path>出现如下报错:

exception [java.nio.file.AccessDeniedException: user/root/.Trash/Current/: getFileStatus on user/root/.Trash/Current/: status [403]

问题原因

hadoop删除文件时会将文件先移动到.Trash目录,若该目录没有权限则出现403报错。

解决方法

方案一:

使用hadoop fs -rm -skipTrash命令来删除文件。

方案二:

在集群对应的委托中添加访问.Trash目录的权限。

  1. 在集群“概览”页签中,查询并记录集群所绑定的委托名称。
  2. 登录IAM服务控制台。
  3. 选择“权限 > 创建自定义策略”。

    • 策略名称:请输入策略名称。
    • 作用范围:请选择“全局级服务”。
    • 策略配置方式:请选择“可视化视图”。
    • 策略内容:
      1. “允许”选择“允许”。
      2. “云服务”选择“对象存储服务 (OBS)”。
      3. “操作”勾选所有操作权限。
      4. “特定资源”选择:
        1. “object”选择“通过资源路径指定”,并单击“添加资源路径”分别在“路径”中输入.Trash目录,例如obs_bucket_name/user/root/.Trash/*
        2. “bucket”选择“通过资源路径指定”,并单击“添加资源路径”在“路径”中输入obs_bucket_name

        其中obs_bucket-name请使用实际的OBS桶名替换。

      5. (可选)请求条件,暂不添加。
    图1 自定义策略

  4. 单击“确定”完成策略添加。
  5. 选择“委托”,并在1中查询到的委托所在行的“操作”列单击“权限配置”。
  6. 查询并勾选3中创建的策略。
  7. 单击“确定”完成委托权限配置。
  8. 重新执行hadoop fs -rm obs://<obs_path>命令。