【问题标题】:Error executing storm starter执行风暴启动器时出错
【发布时间】:2015-12-01 18:41:50
【问题描述】:

我正在尝试在本地运行storm starter 项目。我正在按照 - 的指示进行操作 -

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

但是当我尝试执行storm 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:///”?

【问题讨论】:

  • 你尝试运行哪种storm-started拓扑?你真的需要指定前缀file://(顺便说一句:它应该只有两个斜杠,而不是三个)此外,我想知道(但我不是窗口用户)为什么你使用斜杠而不是反斜杠?
  • 我的解决方案对您有帮助吗?

标签: xml java-io apache-storm


【解决方案1】:

根据 Microsoft 命名约定,您应该只使用 backslashes on the path,但您可以使用反斜杠和正斜杠。

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

还有更多:

注意 Windows API 中的文件 I/O 函数将“/”转换为“\”作为将名称转换为 NT 样式名称的一部分,除非使用“\?\”前缀,如以下部分所述.

对于文件 I/O,路径字符串的“\?\”前缀告诉 Windows API 禁用所有字符串解析并将其后面的字符串直接发送到文件系统。例如,如果文件系统支持大路径和文件名,则您可以超过由 Windows API 强制执行的 MAX_PATH 限制。有关正常最大路径限制的更多信息,请参阅上一节最大路径长度限制。

【讨论】:

  • 这方面有什么更新吗?如果可能的话,请尽量具体说明需要做什么
  • @user2334092 将前斜杠更改为反斜杠... ${sys:storm.log.dir}/metrics.log 为 ${sys:storm.log.dir}\metrics.log
  • 我还需要file:///的前缀吗?
  • @user2334092 可能是的...尝试两种方式
【解决方案2】:

同样的问题,兄弟
但是,在这个错误之后:

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

如果您打开 java 进程,您会发现一切正常:
screenshot

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,我编辑了storm-config.cmd并将协议添加到URL env vars:

    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。尝试恢复这些更改,看看它是否有效。

    【讨论】:

    • 这些行已经存在于storm-config.cmd 中。它们需要在storm-config.cmd中通过添加“file://”前缀来修改,而不是在storm.cmd中。
    【解决方案4】:

    从 \log4j2\worker.xml 和 \log4j2\cluster.xml 中删除所有更改。

    编辑 \bin\storm-config.cmd 并修改以下指定条目。

    来自

    设置 STORM_LOGBACK_CONFIGURATION_FILE=%STORM_LOGBACK_CONFIGURATION_DIR%\cluster.xml

    设置 STORM_LOGBACK_CONFIGURATION_FILE=file://%STORM_LOGBACK_CONFIGURATION_DIR%\cluster.xml

    来自

    设置 STORM_LOGBACK_CONFIGURATION_FILE=%STORM_HOME%\log4j2\cluster.xml

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

    storm-config.cmd 的 logback 配置条目中添加 file:// 有助于解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-27
      • 2014-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多