将本地目录的内容复制到hdfs中的目录
问题描述:
我有一个要求,我应该能够将目录的内容从本地系统复制到HDFS上的目录。将本地目录的内容复制到hdfs中的目录
条件只是应该将目录内容复制到我指定的位置,而不是源目录本身。使用命令copyfromlocal
我可以实现这一点。但我需要使用Java。有这种方法copyFromLocalFile
应该用于从本地文件系统复制,问题是它复制目录本身。也尝试使用FileUtils.copy
方法,给出了与copyFromLocalFile
相同的结果
作为一个测试,我尝试将目录内容从测试目录复制到另一个目录,都在本地文件系统上。我用FileUtils.copyDirectory
。这工作,但我不能用于HDFS。我看到很多与这个问题有关的链接,但是找不到任何方法。
伙计们,请让我知道这是否可能或者是否存在一些设计缺陷?如果这可能,我该如何继续?
答
丫真的很难用FileSystem
api完成你想做的事情。文档不足会使事情变得更加困难(方法太多,解释不清)。一年前我面临同样的问题。
我唯一的解决办法是迭代:
void copyFilesToDir(String srcDirPath, FileSystem fs, String destDirPath)
throws IOException {
File dir = new File(srcDirPath);
for (File file : dir.listFiles()) {
fs.copyFromLocalFile(new Path(file.getPath()),
new Path(destDirPath, file.getName()));
}
}
我觉得代码需要一点解释。
谢谢,先生,代码就像一个魅力!我正在砸我的头,以获得解决方案,并正在考虑每次上传时创建新文件夹。虽然我已经注意到了一些东西,但不知道它是否对我的系统有些帮助。我可以看到,在hdfs中的文件夹以及文件名中还有另一个带有代字号(〜)的文件。这是我应该担心的吗? – Abhisekh 2014-09-29 14:29:08
和耶是一个解释,你已发送的代码是一个欢迎! – Abhisekh 2014-09-29 14:29:47
它可能是源代码目录中的一些临时文件。在该目录中尝试'ls -a',因为'listFiles'也认为隐藏的文件。 – blackSmith 2014-09-29 14:33:33