복붙노트

[HADOOP] Hadoop Path 객체를 Java File 객체로 변환하는 방법

HADOOP

Hadoop Path 객체를 Java File 객체로 변환하는 방법

유효하고 기존의 Hadoop Path 객체를 유용한 Java File 객체로 변경하는 방법이 있습니까? 이 작업을 수행 할 수있는 좋은 방법이 있습니까? 아니면 코드 작성을 위해 bludgeon을 사용해야합니까? 좀 더 분명한 접근 방식이 효과가 없으며 일반적인 코드 비트처럼 보입니다.

void func(Path p) {
  if (p.isAbsolute()) {
     File f = new File(p.toURI());
  }
}

Path :: toURI ()가 "hdfs"식별자를 반환하고 Java 파일 (URI uri) 생성자가 "파일"식별자 만 인식하기 때문에이 작업이 수행되지 않습니다.

경로와 파일을 함께 작동시키는 방법이 있습니까?

**

좋습니다, 특정 제한된 예는 어떻습니까?

Path[] paths = DistributedCache.getLocalCacheFiles(job);

DistributedCache는 파일의 지역화 된 복사본을 제공하기로되어 있지만 경로를 반환합니다. DistributedCache가 동일한 디스크에있는 파일의 로컬 복사본을 만드는 것으로 가정합니다. hdfs가이 방정식에 포함되지 않은 제한된 예제를 감안할 때 경로를 파일로 안정적으로 변환하는 방법이 있습니까?

**

해결법

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

    1.내가 아는 것은 아닙니다.

    내가 아는 것은 아닙니다.

    내 이해를 돕기 위해 Hadoop의 Path는 분산 파일 시스템에있는 노드의 식별자를 나타냅니다. 이것은 로컬 파일 시스템의 노드를 나타내는 java.io.File과는 다른 추상화입니다. 기본 모델이 근본적으로 다르기 때문에 Path가 동등하게 동작하는 File 표현을 가질 수는 없습니다.

    따라서 번역의 부족. 나는 당신의 주장에 File 객체가 "더 유용하다"라고 가정하고, 기존 라이브러리 메소드를 사용하기 위해이 클래스의 객체를 원한다. 위의 이유로, 이것은 잘 작동하지 않을 것입니다. 자체 라이브러리 인 경우 Hadoop Paths로 깨끗하게 작동하도록 파일을 다시 작성한 다음 파일을 Path 객체로 변환 할 수 있습니다.이 방향은 Path가 Files의 엄격한 상위 집합이므로 작동합니다. 제 3 자 라이브러리라면 운이 없어집니다. 그 방법의 저자는 분산 파일 시스템의 영향을 고려하지 않았고 평범한 오래된 로컬 파일에서 작업 할 방법을 작성했습니다.

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

    2.나는 최근에이 같은 질문을했고, 경로에서 파일을 얻는 방법이 있지만 파일을 임시로 다운로드해야합니다. 분명히 이것은 많은 작업에는 적합하지 않지만 시간과 공간이 반드시 필요하지 않으며 Hadoop에서 파일을 사용하여 작업해야하는 항목이 있으면 다음과 같이하십시오.

    나는 최근에이 같은 질문을했고, 경로에서 파일을 얻는 방법이 있지만 파일을 임시로 다운로드해야합니다. 분명히 이것은 많은 작업에는 적합하지 않지만 시간과 공간이 반드시 필요하지 않으며 Hadoop에서 파일을 사용하여 작업해야하는 항목이 있으면 다음과 같이하십시오.

    import java.io.File;
    import java.io.IOException;
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.Path;
    
    public final class PathToFileConverter {
        public static File makeFileFromPath(Path some_path, Configuration conf) throws IOException {
            FileSystem fs = FileSystem.get(some_path.toUri(), conf);
            File temp_data_file = File.createTempFile(some_path.getName(), "");
            temp_data_file.deleteOnExit();
            fs.copyToLocalFile(some_path, new Path(temp_data_file.getAbsolutePath()));
            return temp_data_file;
        }
    }
    
  3. ==============================

    3.LocalFileSystem을 얻는다면

    LocalFileSystem을 얻는다면

    final LocalFileSystem localFileSystem = FileSystem.getLocal(configuration);
    

    hadoop Path 객체를 localFileSystem.pathToFile에 전달할 수 있습니다.

    final File localFile = localFileSystem.pathToFile(<your hadoop Path>);
    
  4. from https://stackoverflow.com/questions/3444313/how-to-convert-a-hadoop-path-object-into-a-java-file-object by cc-by-sa and MIT license