복붙노트

[HADOOP] 배수 Hadoop FileSystem 인스턴스

HADOOP

배수 Hadoop FileSystem 인스턴스

클래스가 있습니다 (가독성을 위해 try / catch를 제거함).

public class HadoopFileSystem {

    private FileSystem m_fileSystem = null;

    public HadoopFileSystem() {
        Configuration l_configuration = new Configuration();
        l_configuration .set("fs.default.name", "hdfs://localhost:9100");
        l_configuration .set("mapred.job.tracker", "localhost:9101");

        m_fileSystem = FileSystem.get(l_configuration );

    }

    public void close() {
        m_fileSystem.close();
    }

    public void createFile(String a_pathDFS) {
        m_fileSystem.create(new Path(a_pathDFS));
    }

}

내 프로그램에서 나는 첫 번째 HadoopFileSysem 객체를 닫지 않았다.

그런 다음 두 번째 HadoopFileSysem 객체를 만들고 닫습니다.

마침내, 첫 번째 객체에서 m_fileSystem에 함수를 사용하려고 할 때 오류가 발생합니다. java.io.IOException : 파일 시스템이 닫혔습니다.

그러나 나는 그것을 닫지 않았다!

내 문제를 설명하는 약간의 코드는 다음과 같습니다.

HadoopFileSystem h1 = new HadoopFileSystem();
HadoopFileSystem h2 = new HadoopFileSystem();

if(h1 == h2)
    System.out.println("=="); // No print
if(h1.equals(h2))
    System.out.println("equals"); // No print

h2.close();
h1.createFile("test.test"); // ERROR : java.io.IOException: Filesystem closed
h1.close();

왜 ?

해결법

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

    1.m_fileSystem = FileSystem.get (l_configuration); 두 개의 다른 객체가 생성 된 경우에도 정적 호출입니다. 두 개의 다른 객체에 대해이 호출을 정적으로 만들지 않는 방법을 찾아야합니다.

    m_fileSystem = FileSystem.get (l_configuration); 두 개의 다른 객체가 생성 된 경우에도 정적 호출입니다. 두 개의 다른 객체에 대해이 호출을 정적으로 만들지 않는 방법을 찾아야합니다.

    이 문제를 해결하려면이 방법을 사용해보십시오.

    conf.setBoolean("fs.hdfs.impl.disable.cache", true);
    
  2. ==============================

    2.하드 코드 된 구성을 기반으로 개체를 만듭니다. 이것은 기본적으로 2 개의 동일한 객체를 생성한다는 것을 의미합니다. 이러한 객체는 동일하므로 JVM은 동일한 객체를 참조합니다. 따라서 h1과 h2는 동일한 객체를 참조합니다.

    하드 코드 된 구성을 기반으로 개체를 만듭니다. 이것은 기본적으로 2 개의 동일한 객체를 생성한다는 것을 의미합니다. 이러한 객체는 동일하므로 JVM은 동일한 객체를 참조합니다. 따라서 h1과 h2는 동일한 객체를 참조합니다.

    그 이유는 구성 파일을 기반으로 개체의 기존 인스턴스를 가져 오기 때문입니다. h1과 h2의 구성이 다른 경우 더 이상 동일한 인스턴스가 아닙니다.

  3. from https://stackoverflow.com/questions/17421218/multiples-hadoop-filesystem-instances by cc-by-sa and MIT license