我正在尝试从hdfs到s3获取一些最终结果文件。我想使用distcp,但它似乎只复制整个文件夹,我只想复制文件夹中的一些文件。
所以我想我需要把我想要的文件移到他们自己的文件夹,然后用distcp上传这个文件夹。我明白我应该用 FileSystem.rename(path1,path2)
去做那件事。
所以我试着测试一下java中的1个文件:
Path itemsTable = new Path("hdfs://localhost/process-changes/itemstable-*");
itemsTable.getFileSystem(getConf()).mkdirs(new Path("hdfs://localhost/output"));
//Simple test moving just 1 file around HDFS via java API
boolean success = itemsTable.getFileSystem(getConf()).rename(new Path("hdfs://localhost/process-changes/itemtable-r-00001"), new Path("hdfs://localhost/output/itemtable-r-00001"));
但是我总是从rename(…)方法得到false。
这样做对吗?如果是的话,你猜我做错了什么?
2条答案
按热度按时间xnifntxz1#
好吧,最终还是成功了。我不太清楚为什么我会犯错,我相信这是一个严重的小错误。一般来说,上面的代码应该可以工作(如果你和我读这篇文章时遇到了同样的问题)。要有信心,把小问题解决好。
bbuxkriu2#
hadoop distcp似乎不够有效,因此我运行以下脚本来执行此操作:
hadoop fs-copytolocal/parquet//home/hadoop/aws s3 cp/home/hadoop/parquet/s3://shinezone datacenter data/result/--递归--安静