복붙노트

[HADOOP] 로컬 시스템에서 디렉토리를 hdfs java 코드로 복사

HADOOP

로컬 시스템에서 디렉토리를 hdfs java 코드로 복사

Java 코드를 사용하여 로컬 시스템에서 HDFS로 디렉토리를 복사하는 중 문제가 발생했습니다. 개별 파일을 이동할 수는 있지만 하위 폴더 및 파일을 사용하여 전체 디렉토리를 이동하는 방법을 알아낼 수는 없습니다. 누구든지 저를 도울 수 있습니까? 미리 감사드립니다.

해결법

  1. ==============================

    1.FileSystem의 copyFromLocalFile 메소드를 사용하면됩니다. 소스 경로가 로컬 디렉토리이면 HDFS 대상에 복사됩니다.

    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"));
    ...   
    
  2. ==============================

    2.다음은 HDFS에서 읽고 쓰는 전체 작업 코드입니다. 두 가지 주장이 필요하다.

    다음은 HDFS에서 읽고 쓰는 전체 작업 코드입니다. 두 가지 주장이 필요하다.

    나는 Cloudera sandbox를 사용했다.

     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);
             }
         }
    }
    
  3. from https://stackoverflow.com/questions/12783968/copying-directory-from-local-system-to-hdfs-java-code by cc-by-sa and MIT license