我使用此链接here中的示例将内容从hdfs中的一个目录复制到hdfs中的另一个目录。复制文件有效,但它在目标中创建一个新的子目录,而不是将文件复制到目标目录。例如:
Path source=new Path("hdfs://HANameService/sources/hpm_support/apc_code/");
Path target=new Path("hdfs://HANameService/staging/hpm_support/apc_code/");
FileSystem fs = source.getFileSystem(conf);
FileUtil.copy(fs, source, fs, target, true, conf);`
因此,不是将文件复制到hdfs://HANameService/staging/hpm_support/apc_code
,而是在apc_code下创建一个新的目录,文件最终在hdfs://HANameService/staging/hpm_support/apc_code/apc_code
中如何才能让它不创建该子目录?
答案 0 :(得分:5)
您需要使用list
source directory
和copy
每个文件iterator
中的文件 Path source=new Path("hdfs://HANameService/sources/hpm_support/apc_code/");
Path target=new Path("hdfs://HANameService/staging/hpm_support/apc_code/");
FileSystem fs = source.getFileSystem(conf);
RemoteIterator<LocatedFileStatus> sourceFiles = fs.listFiles(source, true);
if(sourceFiles != null) {
while(sourceFiles.hasNext()){
FileUtil.copy(fs, sourceFiles.next().getPath(), fs, target, true, conf);
}
}
{{1}}
希望它对你有所帮助