2015-09-05 93 views
3

我想在本地運行風暴起動器項目。我下面的說明從 -執行風暴起動器時出錯

https://github.com/apache/storm/tree/master/examples/storm-starter

但是當我嘗試執行風暴jar命令,我得到

ERROR StatusLogger Invalid URL C:/Users/xyzabc/apache-storm-0.10.0-beta/log4j2/cluster.xml java.net.MalformedURLException: unknown protocol: c 

我認爲這是與在定義下面的一段cluster.xml和worker.xml

<RollingFile name="METRICS" 
       fileName="${sys:storm.log.dir}/metrics.log" 
       filePattern="${sys:storm.log.dir}/metrics.log.%i"> 

所以顯然文件名需要像

file:///C:/Users/xyzabc/apache-storm-0.10.0-beta/log4j2/cluster.xml 

但是當我嘗試這樣做,通過設置

<RollingFile name="METRICS" 
        fileName="file:///${sys:storm.log.dir}/metrics.log" 
        filePattern="file:///${sys:storm.log.dir}/metrics.log.%i"> 

我得到這個錯誤

ERROR Unable to create file file:///C:\Users\xyzabc\apache-storm-0.10.0-beta\logs/metrics.log java.io.IOException: The filename, directory name, or volume label syntax is incorrect 

,你可以看到,它完全莫名其妙地打亂了的文件路徑。

有沒有一種方法可以在xml屬性中正確呈現「file:///」?

+0

您嘗試運行風暴啓動的哪種拓撲結構?你真的需要指定前綴'file://'(btw:它應該只有兩個斜線,而不是三個)。此外,我想知道(但我不是窗口用戶)爲什麼你使用斜槓而不是反斜槓? –

+0

我的解決方案對您有幫助嗎? –

回答

1

根據Microsoft命名約定,您應該只使用backslashes on the path,但是您應該使用反斜槓和前斜槓。

file:///C:\Users\xyzabc\apache-storm-0.10.0-beta\logs/metrics.log 

還有更多:

Note File I/O functions in the Windows API convert "/" to "\" as part of converting the name to an NT-style name, except when using the "\?\" prefix as detailed in the following sections.

For file I/O, the "\?\" prefix to a path string tells the Windows APIs to disable all string parsing and to send the string that follows it straight to the file system. For example, if the file system supports large paths and file names, you can exceed the MAX_PATH limits that are otherwise enforced by the Windows APIs. For more information about the normal maximum path limitation, see the previous section Maximum Path Length Limitation.

+0

有關於此的任何更新?如果可能,請嘗試指定需要執行的操作 – AbtPst

+1

@ user2334092將正斜線更改爲反斜槓... $ {sys:storm.log.dir} /metrics.log to $ {sys:storm.log.dir} \ metrics.log –

+0

我還需要file:///的前綴嗎? – AbtPst

0

同樣的問題,兄弟
但是,這個錯誤後:

storm\bin>ERROR StatusLogger Invalid URL D:/stuff/storm/log4j2/cluster.xml java.net.MalformedURLException: unknown protocol: d 

如果您打開Java進程,你會看到,全部作品:
screenshot

0

我有同樣的問題,我編輯的風暴config.cmd並補充協議的URL ENV瓦爾:

if not %STORM_LOGBACK_CONFIGURATION_DIR% == nil (
    set STORM_LOGBACK_CONFIGURATION_FILE=file://%STORM_LOGBACK_CONFIGURATION_DIR%\cluster.xml 
) 

if not defined STORM_LOGBACK_CONFIGURATION_FILE (
    set STORM_LOGBACK_CONFIGURATION_FILE=file://%STORM_HOME%\log4j2\cluster.xml 
) 

我相信你所得到的「無法創建文件」的問題,因爲它期待一個路徑,而不是一個URL。嘗試恢復這些更改並查看它是否有效。

+0

這些行已經存在於storm-config.cmd中。他們需要在storm-config.cmd中通過添加「file://」前綴來修改,而不是在storm.cmd中。 – VladH

2

刪除\ log4j2 \ worker.xml和\ log4j2 \ cluster.xml中的所有更改。

編輯\ bin \ storm-config.cmd並在指定條目下修改。

set STORM_LOGBACK_CONFIGURATION_FILE=%STORM_LOGBACK_CONFIGURATION_DIR%\cluster.xml

set STORM_LOGBACK_CONFIGURATION_FILE=file://%STORM_LOGBACK_CONFIGURATION_DIR%\cluster.xml

set STORM_LOGBACK_CONFIGURATION_FILE=%STORM_HOME%\log4j2\cluster.xml

set STORM_LOGBACK_CONFIGURATION_FILE=file://%STORM_HOME%\log4j2\cluster.xml

這則廣告文件://關於logback配置條目storm-config.cmd有助於解決問題。