Java通过Trash对象不能删除文件到回收站,运行没有出错,但是删除不成功
原因分析uri = URI.create("hdfs://192.168.153.131:8020");
conf = new Configuration();
user = "cxj";
fs = FileSystem.
get(uri, conf, user);
Trash ts = new Trash(fs, conf);
ts.moveToTrash(new Path("/a.txt"));
经过测试,在Shell中是可以正常操作的,并且使用fs对象进行Hadoop中的文件操作也是没有问题的。最后检测出上述不成功的原因就是:节点上的hdfs-site.xml配置的回收站并没有配置到Trash对象中,也就是执行最后的moveToTrash的命令的时候,回收站的状态就是默认的禁用的状态,而不是自定义的hfds-site.xml文件中配置的开启状态,Configuration对象不会自动加载集群中的配置,Trash构造函数也不会将fs对应的集群的配置加载到它的对象中,fs在上述代码的作用是将/a.txt映射到HDFS上,也就是最后组合成hdfs://hadoop102:8020/a.txt
问题解决
- Configuration可以自动添加本地的resources文件下的xml配置文件,但是不会自动加载集群上的配置文件
- 上述也可以不添加fs,而直接传入conf:Trash ts = new Trash(conf);并添加:conf.set("fs.defaultFS", "hdfs://hadoop102:8020")
在客户端上的resources目录下创建core-site.xml文件,并添加内容
fs.trash.interval 1 fs.trash.checkpoint.interval 1
或者直接通过Configuration对象直接配置
conf.set("fs.trash.interval", 1)
conf.set("fs.trash.checkpoint.interval", 1)



