我试图在部署到storm的jar中包含拓扑所需的一些jar。当我在manifestclasspath任务中使用ant创建jar文件时,我得到一个清单,如下所示:
Ant-Version: Apache Ant 1.9.5
Created-By: 1.8.0_45-b14 (Oracle Corporation)
Main-Class: org.softwarematters.storm.MyTopology
Class-Path: ../build/lib/kafka-clients-0.8.2.1.jar ../build/lib/kafka_
2.11-0.8.2.1.jar ../build/lib/log4j-1.2.16.jar ../build/lib/metrics-c
ore-2.2.0.jar ../build/lib/scala-library-2.11.5.jar ../build/lib/stor
m-kafka-0.9.5.jar ../build/lib/zookeeper-3.4.6.jar
类路径条目中的路径看起来错误。拓扑部署成功,但当我将数据发送到kafka时,在storm日志中会得到一个classnotfoundexception:storm.kafka.kafkaspout。
我修改了清单如下:
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.5
Created-By: 1.8.0_45-b14 (Oracle Corporation)
Main-Class: org.softwarematters.storm.MyTopology
Class-Path: . lib/kafka-clients-0.8.2.1.jar lib/kafka_2.11-0.8.2.1.jar
lib/log4j-1.2.16.jar lib/metrics-core-2.2.0.jar lib/scala-library-2.1
1.5.jar lib/storm-kafka-0.9.5.jar lib/zookeeper-3.4.6.jar
这也成功地部署了,但是当我尝试传递消息时会出现相同的错误。
如何创建一个包含这些依赖项并在storm上正常运行的jar文件?我不想将jar添加到storm lib目录,但这是我发现的唯一有效的配置。
1条答案
按热度按时间drnojrws1#
显然,matthias是正确的,storm不能处理嵌套的jar文件。修复方法是解压jar文件并将类文件包含在拓扑jar中。这对我的ant build.xml文件进行了两次更改。首先,将依赖项放在一个暂存目录中,并从中构建一个jar:
然后将这些.class文件拉入拓扑jar,不包括清单:
这个jar成功地部署到风暴。