Java 将本地目录的内容复制到hdfs中的目录

Java 将本地目录的内容复制到hdfs中的目录,java,hadoop,hdfs,Java,Hadoop,Hdfs,我需要能够将目录的内容从本地系统复制到HDFS上的目录 条件是只有目录内容应该复制到我指定的位置,而不是源目录本身。使用命令copyfromlocal我可以实现这一点。但是我需要使用Java。有一种方法copyFromLocalFile应该用于从本地文件系统复制,问题是它复制目录本身。还尝试使用FileUtils.copy方法,得到与copyFromLocalFile 作为测试,我尝试将目录内容从一个测试目录复制到另一个目录,这两个目录都在本地文件系统上。我使用了FileUtils.copyDi

我需要能够将目录的内容从本地系统复制到HDFS上的目录

条件是只有目录内容应该复制到我指定的位置,而不是源目录本身。使用命令
copyfromlocal
我可以实现这一点。但是我需要使用Java。有一种方法
copyFromLocalFile
应该用于从本地文件系统复制,问题是它复制目录本身。还尝试使用
FileUtils.copy
方法,得到与
copyFromLocalFile

作为测试,我尝试将目录内容从一个测试目录复制到另一个目录,这两个目录都在本地文件系统上。我使用了
FileUtils.copyDirectory
。这是可行的,但我不能将其用于HDFS。我已经看到了许多与这个问题相关的链接,但找不到任何方法


伙计们,你们能告诉我这是否可行,或者这是设计上的缺陷吗?如果这是可能的,我如何继续呢?

是的,要用
文件系统
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中的文件夹和文件名中还有一个带有波浪号(~)的文件。这是我应该担心的吗?可能是源目录中的某个临时文件。在该目录中尝试
ls-a
,因为
listFiles
也考虑隐藏文件。是的,你是对的!!!我将文件夹从hdfs导出到loca目录,并检查是否不存在带有波浪符号的文件。hdfs中这些文件的大小再次显示为0。如果您不想移动隐藏文件,则必须使用
FileFilter
来使用check
File.ishiden
或任何您想要的条件来
listFiles
方法。谢谢先生,我使用了一个过滤器,不包括以“~”结尾的文件签名,问题就解决了。