2014-10-22 4 views
2

MapReduce 작업을 제출하고 결과를 분석하는 Tomcat에서 실행되는 Spring MVC 애플리케이션이 있습니다. My Spring Batch tasklet은 성공적으로 MR 드라이버 클래스를 호출하고 작업을 실행할 수 있습니다. 드라이버 클래스는 Configured으로 확장되고 Tool을 구현하며 HDFS 파일을 쉽게 조작 할 수 있습니다. 드라이버 클래스와 MR 코드를 포함하는 maven 모듈은 webapp 모듈에 대한 의존성으로 추가됩니다.Hadoop null을 반환하는 getConf()를 구성했습니다.

분석을 위해 webapp 모듈에 Configured을 확장하는 새 클래스를 만들었습니다. 이 클래스는 HDFS 파일을 읽고 분석합니다. 그러나 FileSystem 개체를 만들려고하면 null 포인터 예외가 발생합니다.

public class ReportAnalyzer extends Configured{ 

    public void analyze(String path) throws Exception{ 
     FileSystem hdfs=FileSystem.get(getConf()); <-- NPE 

     //create Path, etc. 
    } 
} 

FileSystem 개체를 얻으려면 다른 작업이 필요합니까? hadoop 의존성은 mapreduce 모듈을 통해 webapp에 추가됩니다.

답변

1

당신이 중 하나는 Configured(Configuration conf) 생성자

public ReportAnalyzer(Configuration conf){ 
    super(conf); 
} 

을 구현하거나 analyze()를 호출하기 전에 setConf()을 사용해야합니다.

+1

두 접근법 모두 내가 드라이버 클래스에서 사용할 때 클래스 패스에서 자동으로 채우려 고 시도한 Configuration 객체를 필요로합니다. –

+0

classpath에 적절한 hadoop 설정 xml이있는 경우'Configuration' 생성자를 사용하면'new Configuration()'만으로 충분합니다. – user3122114