由于部署到远程集群时发现多个 defaults.yaml 资源,拓扑无法正常工作
Topology not working due to Found multiple defaults.yaml resources when deploying to remote cluster
我在同一台机器上设置了一个单节点远程集群(所有 nimbus、supervisor、zookeeper)运行。我将我的拓扑(简单的 Exclamation 拓扑)部署到这个远程集群。虽然拓扑和 jar 已成功提交,但集群中没有发生任何事情。
当我查看主管日志时,我可以看到:
2015-10-14T21:24:26.340+0000 b.s.d.supervisor [INFO] 42dd0337-1182-45b0-9385-14570c7e0b09 仍未启动
工作日志文件为空。
在主管日志中稍微调试一下,我可以看到
使用命令启动 worker:(一些 java 命令)..触发此 java 命令我可以看到此错误:
原因:java.lang.RuntimeException:找到多个 defaults.yaml 资源。您可能将 Storm jar 与拓扑 jar 捆绑在一起。
我在 Internet 和其他东西上进行了更多调试,也修改了我的 build.gradle 文件,但每当我部署拓扑时仍然出现相同的错误。
这是我的 gradle 文件
dependencies {
compile group: 'org.springframework.boot', name: 'spring-boot-starter-actuator', version: springBootVersion
compile group: 'org.quartz-scheduler', name: 'quartz', version: quartzVersion
compile group: 'clj-stacktrace' , name: 'clj-stacktrace',version: cljStackTrace
compile group: 'org.apache.storm' , name: 'storm-core',version: stormVersion
ext {
fatJarExclude = true
}
}
task uberjar(type: Jar) {
from files(sourceSets.main.output.classesDir)
from {configurations.compile.collect {zipTree(it)}} {
exclude "META-INF/*.SF"
exclude "META-INF/*.DSA"
exclude "META-INF/*.RSA"
exclude "META-INF/LICENSE"
}
manifest {
attributes 'Main-Class': 'storm.topology.ExclamationTopology'
}
}
jar 文件不能包含 defaults.yaml
文件。因此,您需要通过
排除它
exclude "defaults.yaml"
实际上我建议从您的 jar 中排除所有 Storm 依赖项。它们不是必需的,并且会不必要地增加脂肪罐的大小。
有两种选择:
1- 使用 winrar "defaults.yaml" 删除 .jar
2- 添加 pom.xml 提供的风暴核心。
在我的 pom.xml:
<dependency>
<groupId>org.apache.storm</groupId>
<artifactId>storm-core</artifactId>
<version>0.9.1-incubating</version>
<scope>provided</scope>
</dependency>
打包拓扑 jar 时,不要包含 Storm jar,因为 Storm 会为您将它们放在类路径中。
参考
我在同一台机器上设置了一个单节点远程集群(所有 nimbus、supervisor、zookeeper)运行。我将我的拓扑(简单的 Exclamation 拓扑)部署到这个远程集群。虽然拓扑和 jar 已成功提交,但集群中没有发生任何事情。
当我查看主管日志时,我可以看到: 2015-10-14T21:24:26.340+0000 b.s.d.supervisor [INFO] 42dd0337-1182-45b0-9385-14570c7e0b09 仍未启动
工作日志文件为空。
在主管日志中稍微调试一下,我可以看到 使用命令启动 worker:(一些 java 命令)..触发此 java 命令我可以看到此错误:
原因:java.lang.RuntimeException:找到多个 defaults.yaml 资源。您可能将 Storm jar 与拓扑 jar 捆绑在一起。
我在 Internet 和其他东西上进行了更多调试,也修改了我的 build.gradle 文件,但每当我部署拓扑时仍然出现相同的错误。
这是我的 gradle 文件
dependencies {
compile group: 'org.springframework.boot', name: 'spring-boot-starter-actuator', version: springBootVersion
compile group: 'org.quartz-scheduler', name: 'quartz', version: quartzVersion
compile group: 'clj-stacktrace' , name: 'clj-stacktrace',version: cljStackTrace
compile group: 'org.apache.storm' , name: 'storm-core',version: stormVersion
ext {
fatJarExclude = true
}
}
task uberjar(type: Jar) {
from files(sourceSets.main.output.classesDir)
from {configurations.compile.collect {zipTree(it)}} {
exclude "META-INF/*.SF"
exclude "META-INF/*.DSA"
exclude "META-INF/*.RSA"
exclude "META-INF/LICENSE"
}
manifest {
attributes 'Main-Class': 'storm.topology.ExclamationTopology'
}
}
jar 文件不能包含 defaults.yaml
文件。因此,您需要通过
exclude "defaults.yaml"
实际上我建议从您的 jar 中排除所有 Storm 依赖项。它们不是必需的,并且会不必要地增加脂肪罐的大小。
有两种选择:
1- 使用 winrar "defaults.yaml" 删除 .jar
2- 添加 pom.xml 提供的风暴核心。
在我的 pom.xml:
<dependency>
<groupId>org.apache.storm</groupId>
<artifactId>storm-core</artifactId>
<version>0.9.1-incubating</version>
<scope>provided</scope>
</dependency>
打包拓扑 jar 时,不要包含 Storm jar,因为 Storm 会为您将它们放在类路径中。
参考