背景描述:
由于默认的hdfs是备份为3,在三台集群上hive的数据库都有备份,现在准备删除其他datanode上的备份,但执行
hadoop fs -rm -r /user/hive/warehouse/*
命令时报错:
rm: Failed to move to trash: Permission denied by sticky bit: user=root, path=…
错误分析:
经过网上搜查之后,发现错误原因可能有三,一是root用户权限不够,在hdfs下,hdfs才是最大权限用户,解决方法是增加root用户的权限;二是HDFS启用了回收站的功能,但是对应的用户家目录下没有/.Trash的目录;三是HDFS中用户家目录的权限,或者回收站的目录权限并没有设置正确;
参考链接:http://d-prototype.com/archives/15154
添加链接描述
解决方法:
一.root用户权限不够,增加root用户的权限
【分析:一的解决方案包含了二和三,我通过方法一成功删除了相应的数据文件】
#查看是否有root用户组
#如果没有,则使用如下命令进行创建
sudo -u hdfs hdfs dfs -mkdir /user/root
sudo -u hdfs hdfs dfs -mkdir /user/root/.Trash
sudo -u hdfs hdfs dfs -chown -R root /user/root
sudo -u hdfs hdfs dfs -ls /user/root
#给文件赋予hdfs权限
sudo -u hdfs hdfs dfs -chown -R root:root /user/hive/warehouse/*
hdfs dfs -rm -r /user/hive/warehouse/* #注意,这个会删除集群内三台机器上对应的文件
#hadoop fs -rm -r hdfs://host:port/user/hadoop/dir
#采用这种形式可以删除某台机器上对应的文件