gpt4 book ai didi

java - 找到多个 defaults.yaml 资源

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:13:20 26 4
gpt4 key购买 nike

当我尝试提交拓扑时,我发现了这个

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>

最佳答案

LocalCluster 中运行拓扑有根本区别或通过 StormSubmitter 远程(这是项目中的默认设置)。

范围storm-core设置为 <scope>provided</scope>是默认值,因为这些类文件无论如何都在集群中可用。 provided告诉 Maven,这些类不能包含在 jar 中组装的文件,从而减少了 jar 的大小。此外,如果多次提供文件,这可以避免冲突——这就是 default.yaml 发生的情况。如果将范围更改为 compile .对于那些情况,来自 storm-core 的所有文件都打包进你了jar并提交给集群。 Storm 找到文件 defaults.yaml “本地”(即,在集群中的工作机器本地)和您的 jar .因此,Storm 不知道使用哪一个并引发错误。

然而,provided如果您也在本地运行,则排除那些类文件。当然,这些文件在本地不会自动可用,但在启动本地 JVM 时必须包含在 CLASSPATH 中。作为providedstorm-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>

关于java - 找到多个 defaults.yaml 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33356292/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com