1
我有一個Storm Spout將從日誌文件中讀取。所以當我在本地測試代碼的時候它的效果很好,因爲我在運行Job時傳遞了運行時參數。無法讀取風暴噴口中的輸入文件
但是,當我在集羣中部署代碼時,它給出FileNotFoundException
。
所以我的問題是如何將輸入傳遞給集羣系統中的Spout。
我正在使用資源位置將少量查找表傳遞給螺栓,但是如果我以相同的方式傳遞給噴口,它會給出相同的錯誤。
我也嘗試將參數傳遞給驅動程序類中的conf.put("logfile", args[0]);
,噴口應該讀取其open()
方法中的conf對象。這也不起作用。
public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
collector_out = collector;
try {
this.context = context;
this.filereader = new FileReader(conf.get("logfile").toString());
} catch (FileNotFoundException e) {
throw new RuntimeException("Error reading file ["+conf.get("logfile")+"]");
}
}
public void nextTuple() {
try {
br = new BufferedReader(filereader);
line = br.readLine();
while(line != null){
count++;
collector_out.emit(new Values(line));
Thread.sleep(2);
line = br.readLine();
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
finally{
completed = true;
}
}
所以,如果有任何想法如何得到它將是一個很大的幫助。
你可以把你的噴口的代碼? – gasparms 2014-09-12 18:59:25
Storm集羣無法識別常規路徑。最好使用NFS或其他選擇。 – halfelf 2014-09-13 02:59:33
您需要將文件保存在某個可供所有節點訪問的位置。如前面的註釋中所建議的,您可以使用NFS或同等...來驗證一個節點中的運行風暴並將文件保留在那裏,您應該獲得預期的產出 – user2720864 2014-09-15 06:44:38