我从Docker Hub为Storm 1.2.1提取了最新的docker镜像。根据项目下的README文档打包Storm源代码1.2.1中的storm-starter示例项目,并将该软件包重命名为“topology.jar”。但是当我使用
将jar文件提交到Storm docker时 $ docker run -it -v $(pwd)/topology.jar:/topology.jar storm storm jar /topology.jar org.apache.storm.starter.ExclamationTopology
,
发生错误:
正在运行:/usr/lib/jvm/java-1.8-openjdk/jre/bin/java -client -Ddaemon.name = -Dstorm.options = -Dstorm.home = / apache-storm-1.2.1 -Dstorm .log.dir = / logs -Djava.library.path = / usr / local / lib:/ opt / local / lib:/ usr / lib -Dstorm.conf.file = -cp /apache-storm-1.2.1/ :/ Apache的风暴-1.2.1 / LIB / :/阿帕奇风暴-1.2.1 / EXTLIB / *:/ topology.jar:/ CONF:/apache-storm-1.2.1/ bin -Dstorm.jar = / topology.jar -Dstorm.dependency.jars = -Dstorm.dependency.artifacts = {} org.apache.storm.starter.ExclamationTopology
错误:无法找到或加载主类org.apache.storm.starter.ExclamationTopology
我在ExclamationTopology的同一个包下添加了一个HelloWorld类,只打印“Hello world!”在主要方法中:
public static void main (String[] args) {
System.out.println("Hello world!");
}
当我用$ docker run -it -v $(pwd)/topology.jar:/topology.jar storm storm jar /topology.jar org.apache.storm.starter.HelloWorld
提交这个新包时,它打印出“Hello world!”如预期的那样。
那么问题是什么?任何帮助表示赞赏。
PS。
/META-INFO/MANIFEST.MF
Manifest-Version: 1.0
Implementation-Title: storm-starter
Implementation-Version: 2.0.0-SNAPSHOT
Archiver-Version: Plexus Archiver
Built-By: leo
Specification-Vendor: The Apache Software Foundation
Specification-Title: storm-starter
Implementation-Vendor-Id: org.apache.storm
Implementation-Vendor: The Apache Software Foundation
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_121
Specification-Version: 2.0
Implementation-URL: http://storm.apache.org/examples/storm-starter
jar -tvf topology.jar | grep ExclamationTopology
时。控制台打印2060 Mon Mar 05 11:40:08 CST 2018 org / apache / storm / starter / ExclamationTopology.class 2242 Mon Mar 05 11:40:08 CST 2018 org / apache / storm / starter / ExclamationTopology $ ExclamationBolt.class
-cp
关键字打印。风暴启动器的项目结构与Github中的官方主分支相同。此外,HelloWorld类与ExclamationTopology共享相同的包,即org.apache.storm.starter
。您可以在此处参考源代码storm-starter。答案 0 :(得分:0)
最后,我明白了。 Docker Hub for Storm 1.2.1上的官方docker镜像错过了名为ConfigurableTopology
的类。将它从storm-client复制为本地,然后重新编译包。您可以成功提交。