文档首页/ MapReduce服务 MRS/ 用户指南(安卡拉区域)/ 故障排除/ 访问OBS/ Hadoop客户端删除OBS上数据时.Trash目录没有权限
更新时间:2024-11-29 GMT+08:00

Hadoop客户端删除OBS上数据时.Trash目录没有权限

用户问题

使用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>命令。