运行storm拓扑时找不到主类

9lowa7mx  于 2021-06-24  发布在  Storm
关注(0)|答案(4)|浏览(347)

我正在使用 storm jar 类将拓扑提交到“nimbus”。它在本地工作正常,但在远程集群上它表示无法加载主类。下面是错误

stderr: SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/storm-0.9.0.1/lib/logback-classic-1.0.6.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/tmp/storm-starter.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
Error: Could not find or load main class ExclamationTopology

我正在cli上运行以下命令:

usr/local/storm/bin/storm jar /tmp/storm-starter.jar ExclamationTopology
vybvopom

vybvopom1#

storm-starter.jar的打包可能有问题:这个jar不应该包含sl4j实现。为了打包storm starter示例(https://github.com/nathanmarz/storm-starter),从根文件夹(其中存在m2-pom.xml)运行以下命令:

mvn -f m2-pom.xml package

这将在目标/文件夹中生成此文件:

storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar

然后,为了将它部署到集群(实际上,通过nimbus),您需要告诉 storm jar 命令包含 main() 它提供了拓扑定义,如下所示(请确保使用带有“-with dependencies”的定义):

usr/local/storm/bin/storm jar storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar storm.starter.ExclamationTopology
nzk0hqpo

nzk0hqpo2#

试着这样跑:

java -jar /tmp/storm-starter.jar ExclamationTopology

答案是:在控制台中运行jar

zhte4eai

zhte4eai3#

对我来说,这是一个类路径问题。一旦我遍历到jar所在的目录,并运行命令,一切正常。
从storm主文件夹运行

./bin/storm jar examples/storm-starter/storm-starter-topologies-0.9.3.jar storm.starter.WordCountTopology TOne

Failed with error: Error: Could not find or load main class storm.starter.WordCountTopology

Running from directory examples/storm-starter

/root/storm/apache-storm-0.10.0/bin/storm jar storm-starter-topologies-0.10.0.jar storm.starter.WordCountTopology TOne

干得不错。

xggvc2p6

xggvc2p64#

对于storm,我也有类似的错误,通过添加pom.xml中提供的内容,它得到了修复。当您添加provided时,maven不会将这些lib捆绑到jar中。

相关问题