복붙노트

[HADOOP] Java API를 사용하여 Hadoop에서 파일을 이동 하시겠습니까?

HADOOP

Java API를 사용하여 Hadoop에서 파일을 이동 하시겠습니까?

Java API를 사용하여 HDFS에서 파일을 옮기고 싶습니다. 나는 이것을 할 수있는 방법을 알 수 없다. FileSystem 클래스는 로컬 파일 시스템으로 이동하는 것을 허용하고 싶을뿐입니다.하지만 HDFS로 유지하고 거기로 옮기고 싶습니다.

나는 기본적인 것을 놓치고 있니? 내가 할 수있는 유일한 방법은 입력 스트림에서 그것을 읽고 다시 쓰는 것입니다 ... 그리고 오래된 복사본을 삭제하십시오.

감사

해결법

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

    1.FileSystem.rename () 사용 :

    FileSystem.rename () 사용 :

  2. ==============================

    2.java.nio. * 방식은 항상 HDFS에서 작동하지 않을 수 있습니다. 그래서 작동하는 다음 해결책을 찾았습니다.

    java.nio. * 방식은 항상 HDFS에서 작동하지 않을 수 있습니다. 그래서 작동하는 다음 해결책을 찾았습니다.

    org.apache.hadoop.fs.FileUtil.copy API를 사용하여 한 디렉토리에서 다른 디렉토리로 파일 이동

    val fs = FileSystem.get(new Configuration())
            val conf = new org.apache.hadoop.conf.Configuration()
            val srcFs = FileSystem.get(new org.apache.hadoop.conf.Configuration())
            val dstFs = FileSystem.get(new org.apache.hadoop.conf.Configuration())
            val dstPath = new org.apache.hadoop.fs.Path(DEST_FILE_DIR)
    
            for (file <- fileList) {
              // The 5th parameter indicates whether source should be deleted or not
              FileUtil.copy(srcFs, file, dstFs, dstPath, true, conf)
    
  3. ==============================

    3.나는 FileUtilts replaceFile이 또한 목적을 해결할 것이라고 생각한다. http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/fs/FileUtil.html#replaceFile(java.io.File, java.io.File)

    나는 FileUtilts replaceFile이 또한 목적을 해결할 것이라고 생각한다. http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/fs/FileUtil.html#replaceFile(java.io.File, java.io.File)

  4. ==============================

    4.

    hdfsDirectory="hdfs://srcPath"   
     val conf = new org.apache.hadoop.conf.Configuration()
            val src:Path = new org.apache.hadoop.fs.Path(hdfsDirectory)
            val fs = FileSystem.get(src.toUri,conf)
            val srcPath: Path = new Path("hdfs://srcPath")
            val srcFs =FileSystem.get(srcPath.toUri,conf)
            val dstPath:Path =new Path("hdfs://targetPath/")
            val dstFs =FileSystem.get(dstPath.toUri,conf)
            val exists = fs.exists(new org.apache.hadoop.fs.Path(hdfsDirectory))
            val status:Array[FileStatus] = fs.listStatus(new Path(hdfsDirectory))
            if (status.length>0) {
              status.foreach(x => {
                println("My files: " + x.getPath)
                FileUtil.copy(srcFs, x.getPath, dstFs, dstPath, true, conf)
                println("Files moved !!" +x.getPath)
              }
              )}
            else{
              println("No Files Found !!")
            }
    
  5. from https://stackoverflow.com/questions/5507804/moving-files-in-hadoop-using-the-java-api by cc-by-sa and MIT license