将目录从本地系统复制到hdfs java代码

时间:2012-10-08 14:38:40

标签: java hadoop hdfs

我在尝试使用java代码将目录从本地系统复制到HDFS时遇到问题。我能够移动单个文件,但无法找到一种方法来移动整个目录与子文件夹和文件。任何人都可以帮助我吗?提前谢谢。

2 个答案:

答案 0 :(得分:22)

只需使用FileSystem' copyFromLocalFile方法即可。如果源路径是本地目录,则它将被复制到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"));
...   

答案 1 :(得分:0)

这是读取和写入HDFS的完整工作代码。它需要两个参数

  1. 输入路径(本地/ HDFS)

  2. 输出路径(HDFS)

  3. 我使用了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);
             }
         }
    }