我正在寻找一个最好的方法来复制整个目录从hdfs与所有内容内。比如:
Path srcPath = new Path("hdfs://localhost:9000/user/britva/data");
Path dstPath = new Path("/home/britva/Work");
fs.copyToLocal(false, srcPath, dstPath);
此外,“data”文件夹可以包含“work”目录中不存在的文件夹。那么最好的方法是什么呢?
谢谢你的回答!
我想其中一个解决方案是使用fileutil对象,但不确定如何使用它,因为我只初始化了一个文件系统hdfs。那么问题是我应该如何初始化我的本地fs?据我所知,这个util在有许多节点时使用。但我想要的是-与本地fs一起工作-从hdfs复制到项目源。
还有,因为我在玩!框架,最好使用它的路径,比如 Play.application.path + "/public/stuff"
.
如果我尝试使用上面的代码,它会说:
java.io.IOException: No FileSystem for scheme: file
2条答案
按热度按时间qf9go6mv1#
我使用scala,所以这里有一个类似于java的scala示例。
第一步。确保hdfs处于活动状态。对于本地,只需尝试打开127.0.0.1:50070
第二步。下面是scala代码:
第三步。例如:我的本地文件路径是:/tmp/hdfsdata
在运行step2的代码之后,我想在hdfs中复制这个目录下的所有文件:所有文件都将位于“127.0.0.1:9000/hdfsdata/”
第四步。要从hdfs复制到本地,只需将“copyfromlocalfile”更改为“copytolocalfile”
fsi0uk1n2#
如果您使用
maven
关于“方案无文件系统”例外,我有这样的问题,我的情况如下:请检查您要运行的jar的内容。尤其是
META-INFO/services
目录,文件org.apache.hadoop.fs.FileSystem
. 应该有系统实现类的列表。支票行org.apache.hadoop.hdfs.DistributedFileSystem
在hdfs和org.apache.hadoop.fs.LocalFileSystem
对于本地文件方案。如果是这种情况,则必须在生成期间重写引用的资源。
另一种可能是你根本没有
hadoop-hdfs.jar
但是这种可能性很低。通常如果你有正确的答案hadoop-client
它不是一个选项。