2014-10-22 119 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