2015-11-23 24 views
-1

我正在使用Storm,我想詢問是否有人知道如何更改工作人員JVM的主目錄。我的一些螺栓正在實例化對象,而該對象又需要從文件系統讀取配置。如何在Storm中爲工作人員的JVM設置/覆蓋主目錄

問題是螺栓在工作人員的JVM中執行,並且這些JVM正在使用錯誤的主目錄。

從工人登錄我能讀:

oaszsZooKeeperServer [INFO]服務器環境:user.dir來=在/ usr /本地/庫/風暴/ 0.9.5/libexec目錄/ conf目錄

這dir是我需要改變的一個,因爲它被螺栓用來搜索文件系統上的文件。 但是我無法在產生新的JVM之前找到改變它的方法。

監督員日誌說:

啓動工人用命令: 'Java' 作爲「-server'-Xmx768m'Dlogfile.name =工人6700.log「-Dstorm.home =在/ usr /本地/Cellar/storm/0.9.5/libexec'

所以也許有一種方法可以告訴Storm用一個新的user.dir變量啓動所有的工人?

編輯:我得到的錯誤是:

STDIO [錯誤]加載從/usr/local/Cellar/storm/0.9.5/libexec/conf/src/main/resources/corenlp/ner分類/english.muc.7class.caseless.distsim.crf.ser.gz

2015-11-23T15:24:38.523 + 0000 STDIO [錯誤] java.io.FileNotFoundException:src/main/resources/corenlp/ner /english.muc.7class.caseless.distsim.crf.ser.gz(沒有這樣的文件或目錄)

+0

您是否在使用Maven來設置您的項目?您是否使用getResourceAsStream從資源文件夾讀取數據? – morganw09dev

+0

我檢查了庫,它實際上是初始化一個解析器,它只是將該目錄存儲爲一個屬性:public Parser(){ Properties props = new Properties(); props.put(「ner.model」,「src/main/resources/corenlp/ner/english.muc.7class.caseless.distsim.crf.ser.gz」);props.put(「ner.applyNumericClassifiers」,「true」); props.put(「regexner.mapping」,「src/main/resources/corenlp/regex/regex_ner_list.txt」); } 但我不能編輯它,因爲它是一個編譯的jar。 – zizzo

回答

0

您是否在嘗試讀取文件時遇到錯誤?我想在使用像Storm這樣的分佈式系統時嘗試從文件系統中讀取文件會違背它的用例。

我很確定風暴之家設置爲您下載風暴發布的地方。你如何試圖從文件系統中讀取文件?如果你給它一個絕對的路徑,它應該在什麼位置並不重要。

編輯

對我來說,好像你沒有很多偉大的選擇。我認爲,最簡單的解決辦法是隻手動創建目錄

/usr/local/Cellar/storm/0.9.5/libexec/conf/src/main/resources/corenlp/ner/ 

並把你的文件存在,但是這是相當hackish的,而不是一個很好的解決方案。

而你問,你是否有辦法在爲新工作者產卵新的JVM時設置這些變量?

我的意思是大概?但是,假設Storm爲新工作者開啓了一個新的JVM,我不知道它是否確實(基於直覺的觀點,而不是事實)。我認爲只使用相同的JVM而不是爲單個工作者啓動新的JVM會更有意義。但要回答這個問題,需要檢查Storm的內部結構。我不認爲這是可取的。

總的來說,我猜只是使用一個已經編譯過的jar會讓你處於一個狹窄的位置,因爲它似乎沒有被用於像Storm這樣的分佈式框架。

+0

我已經意識到要設置的變量是user.dir。您是否認爲在爲新工作人員產生新的JVM時可以設置這些變量?我需要這樣做,因爲我正在使用「第三方」庫,每次實例化時它都會從文件中加載一些字典。這個庫從當前的主目錄開始,所以我需要將它設置正確。 – zizzo

+0

讀取文件路徑總是有點棘手,我通常不得不手動嘗試2-4種不同的東西,然後才能找出正確的東西。嘗試閱讀文件時會遇到什麼錯誤?你能編輯你的問題來顯示你的錯誤嗎?這真的會有幫助。 – morganw09dev

+0

我已將它添加到問題中,謝謝。 – zizzo

相關問題