将目录从本地系统复制到hdfs java代码
我在尝试使用java代码将目录从本地系统复制到HDFS时遇到问题。我可以移动单个文件,但无法找到移动包含子文件夹和文件的整个目录的方法。有人能帮我吗?提前感谢。只需使用将目录从本地系统复制到hdfs java代码,java,hadoop,hdfs,Java,Hadoop,Hdfs,我在尝试使用java代码将目录从本地系统复制到HDFS时遇到问题。我可以移动单个文件,但无法找到移动包含子文件夹和文件的整个目录的方法。有人能帮我吗?提前感谢。只需使用文件系统的方法即可。如果源路径是本地目录,它将被复制到HDFS目标: ... Configuration conf = new Configuration(); conf.addResource(new Path("/home/user/hadoop/conf/core-site.xml")); conf.addResource(
文件系统的方法即可。如果源路径是本地目录,它将被复制到HDFS目标:
...
Configuration conf = new Configuration();
conf.addResource(new Path("/home/user/hadoop/conf/core-site.xml"));
conf.addResource(new Path("/home/user/hadoop/conf/hdfs-site.xml"));
FileSystem fs = FileSystem.get(conf);
fs.copyFromLocalFile(new Path("/home/user/directory/"),
new Path("/user/hadoop/dir"));
...
下面是读写HDFS的完整工作代码。这需要两个论点
输入路径(本地/HDFS)
输出路径(HDFS)
我用了Cloudera沙箱
package hdfsread;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
public class ReadingAFileFromHDFS {
public static void main(String[] args) throws IOException {
String uri = args[0];
InputStream in = null;
Path pt = new Path(uri);
Configuration myConf = new Configuration();
Path outputPath = new Path(args[1]);
myConf.set("fs.defaultFS","hdfs://quickstart.cloudera:8020");
FileSystem fSystem = FileSystem.get(URI.create(uri),myConf);
OutputStream os = fSystem.create(outputPath);
try{
InputStream is = new BufferedInputStream(new FileInputStream(uri));
IOUtils.copyBytes(is, os, 4096, false);
}
catch(IOException e){
e.printStackTrace();
}
finally{
IOUtils.closeStream(in);
}
}
}
您使用的是什么版本的Hadoopbin/hadoop dfs-copyFromLocal folder
copiesfolder
,递归地复制其中的所有内容,对我来说都很好。因为目录不是“文件”。您应该递归地创建目录并逐个移动文件(如果您愿意,可以并行地进行)。当然,您应该知道,此操作不是原子操作,因此,如果失败,一些文件将保留在hdfs上。我提供的hdfs路径的形式为“hdfs://cluster.abc.com:8080/user/something,但它表示“错误的FS,预期的文件://”。有什么帮助吗?在core-site.xml中,fs.default.name的值是多少?它应该指向hdfs://host[:波特]谢谢。将fs.default.name设置为所需的hdfs://host:port 很好。嗨,当我尝试这个时,我得到org/apache/hadoop/fs/FSDataOutputStream错误。我已经将hadoop公共、hadoop hdfs库添加到我的pom中。还将core-site.xml、hdfs-site.xml添加到我的配置中。