恢复HDFS中删除的文件

来源:互联网 发布:saas软件行业怎么样 编辑:程序博客网 时间:2024/05/22 03:33

刚才不小心操作删除了HDFS中的一个目录文件,百度了一些,发现找回其实挺简单的,笔者提供两种方法:1.通过终端命名;2.使用HDFS的API

相关知识

在HDFS中删除的文件不会马上直接删除掉,而是将其移动到了一个名为Trash的目录下,这种原理相当于电脑总的回收站机制,现在需要做的就是从回收站中将我们删除的文件还原出来。
在hadoop中的trash机制需要在配置文件core-site.xml中配置,具体配置如下,其中中的值表示的是杀出文件多久后,HDFS会永久清楚该文件,相当于此时你杀出了a.txt,那么在10080这个时间后,文件将会被永久的删除。不设置的话,默认6小时(这个需要勘误,因为我放了一晚上,第二天早上起来回复还在。。。)。

    <property>          <name>fs.trash.interval</name>          <value>10080</value>    </property>

在终端使用命令找回HDFS中(误)删除文件

通过终端找回这种方法很简单,就是移动文件(夹)罢了,命令和HDFS的操作差不多,现在比如我删除的文件名字叫/air/sampledata,那么我找回来的命令是:

hadoop fs -mv /user/root/.Trash/Current/air/sampledata /air/sampledata

需要注意的是/user/root 这里的root是我hadoop的用户,相应的更改。第一行和第二行有一个空格(熟悉mv 命令的,不解释。)

使用Java API回收HDFS(误)删除文件

使用Java API这种方法,其实也即是操作HDFS,在HDFS间移动文件夹罢了,代码如下:

    /**     * 根据新旧路径进行更名     * @param oldPathName 原始文件路径     * @param newPathName  现在文件路径     * @return 成功返回true, 失败返回false     * @throws IOException     */    public boolean rename(String oldPathName, String newPathName) throws IOException {        if (!exits(oldPathName)){            System.out.println("file is not exits.");            return false;        }        fs.rename(new Path(oldPathName), new Path(newPathName));        return true;    }

关于HDFS 的Java API,具体的可以参考我的另一篇博客:HDFS java API
传入参数的时候,oldpath 填入”/user/root/.Trash/Current/air/sampledata”,新的path传需要恢复到的HDFS原始目录。

0 0