Storm提交Topology報錯:Found multiple defaults.yaml resources.


Storm提交Topology運行方式分為本地和集群運行兩種,其中集群運行需要將程序打包並把jar包復制到集群,通過以下方式執行:

bin/storm jar /opt/run/storm-demo-1.0-SNAPSHOT-jar-with-dependencies.jar org.mort.storm.kafka.KafkaTopologyBasic
bin/storm jar [jar包路徑] [main所在類名]

不過有時程序運行報錯提示如下:

Caused by: java.lang.RuntimeException: java.io.IOException: Found multiple defaults.yaml resources. You're probably bundling the Storm jars with your topology jar. [jar:file:/opt/run/storm-demo-1.0-SNAPSHOT-jar-with-dependencies.jar!/defaults.yaml, jar:file:/opt/module/apache-storm-1.2.3/lib/storm-core-1.2.3.jar!/defaults.yaml]
        at org.apache.storm.utils.Utils.findAndReadConfigFile(Utils.java:385)
        at org.apache.storm.utils.Utils.readDefaultConfig(Utils.java:429)
        at org.apache.storm.utils.Utils.readStormConfig(Utils.java:465)
        at org.apache.storm.utils.Utils.<clinit>(Utils.java:179)
        ... 39 more
Caused by: java.io.IOException: Found multiple defaults.yaml resources. You're probably bundling the Storm jars with your topology jar. [jar:file:/opt/run/storm-demo-1.0-SNAPSHOT-jar-with-dependencies.jar!/defaults.yaml, jar:file:/opt/module/apache-storm-1.2.3/lib/storm-core-1.2.3.jar!/defaults.yaml]
        at org.apache.storm.utils.Utils.getConfigFileInputStream(Utils.java:411)
        at org.apache.storm.utils.Utils.findAndReadConfigFile(Utils.java:364)
        ... 42 more

出現問題原因是storm-core下面也存在一個defaults.yaml文件,因此storm運行時報錯沖突,因此修改Maven配置文件,添加scope屬性並設為provided:

<dependency>
    <groupId>org.apache.storm</groupId>
    <artifactId>storm-core</artifactId>
    <version>1.2.3</version>
    <scope>provided</scope>
</dependency>

scope設置成provided表示容器或JDK已提供范圍,表示該依賴包已經由目標容器(如tomcat)和JDK提供,只在編譯的classpath中加載和使用,打包的時候不會包含在目標包中。

再次運行成功提交。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM