当我试图提交拓扑时,我发现
Exception in thread "main" java.lang.RuntimeException: Found multiple defaults.yaml resources. You're probably bundling the Storm jars with your topology jar.
at backtype.storm.utils.Utils.findAndReadConfigFile(Utils.java:115)
at backtype.storm.utils.Utils.readDefaultConfig(Utils.java:135)
at backtype.storm.utils.Utils.readStormConfig(Utils.java:155)
at backtype.storm.StormSubmitter.submitTopology(StormSubmitter.java:61)
at backtype.storm.StormSubmitter.submitTopology(StormSubmitter.java:40)
at trident.myproject.main(myproject.java:288)但是,此错误在pom.xml中更新后出现。
<scope>compile</scope> instead of <scope>provided</scope>
因为我是个错误
An exception occured while executing the Java class. storm/trident/state/StateFactory这里pom文件
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>trident.myproject</mainClass>
<!-- <mainClass>crawler.Crawler</mainClass> -->
</manifest>
</archive>
</configuration>pom文件第2部分
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>pom文件第3部分
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>发布于 2015-10-27 13:36:26
在LocalCluster中或通过StormSubmitter (这是项目中的默认设置)运行拓扑是有根本区别的。
storm-core的作用域设置为<scope>provided</scope>是默认的,因为这些类文件无论如何在集群中都是可用的。provided告诉maven,这些类不能包含在组装的jar文件中,从而减小了jar的大小。此外,如果文件多次提供,这就避免了冲突--如果将作用域更改为default.yaml,就会发生这种情况。对于这些情况,来自storm-core的所有文件都打包到jar中并提交到集群中。defaults.yaml文件“本地”(即在集群中的工作机器上)和您的jar中查找。因此,Storm不知道使用哪一个,并引发错误。
但是,如果您也在本地运行,provided将排除这些类文件。当然,本地这些文件不是自动可用的,但在启动本地JVM时必须包含在CLASSPATH中。由于provided从storm-core中排除了这些文件,所以您将得到ClassNotFound异常。
为了在每次提交到不同环境时更改范围,可以将作用域设置为compile,并在maven-jar-plugin设置中显式地包含拓扑Main/Bolt/Spout类。此显式包含自动排除jar中的所有其他文件,即storm-core中的所有文件。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>MyTopology</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<includes>
<include>my/topology/package/**/*.class</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>https://stackoverflow.com/questions/33356292
复制相似问题