2014-10-22 70 views
2

我有一个运行在Tomcat上的Spring MVC应用程序,它提交MapReduce作业并分析结果。我的Spring Batch tasklet能够成功调用MR驱动程序类并运行作业。驱动程序类扩展Configured并实现Tool,并且很容易操作HDFS文件。包含驱动程序类和MR代码的maven模块作为依赖项添加到webapp模块中。Hadoop配置getConf()返回null

为了分析,我在webapp模块中创建了一个新的类,它扩展了Configured。这个类应该读取一个HDFS文件并对其进行分析。但是,当我尝试创建FileSystem对象时,我收到空指针异常。

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

这两种方法都要求我有配置对象,我试图从类路径中自动填充配置对象,就像我们在驱动程序类中使用它时那样。 – 2014-10-25 07:24:51

+0

如果只有在类路径中有适当的hadoop配置xmls,那么使用'Configuration'构造函数'new Configuration()'就足够了。 – user3122114 2014-10-25 21:30:43