我正在尝试将捆绑为胖jar的拓扑部署到远程Cluster。 jar可以成功部署但是在部署时,我在worker日志中看到以下错误:它说它无法找到JpaRepository的类,如下所示
我提交给群集的jar已经包含了这个类。我从集群中复制了jar并看到了它的内容,这就是我所看到的
如果你有任何人知道为什么这会失败,我真的很感激,因为我没有任何线索如何继续进行。我已经在使用类部署了jar,但它仍然说classNotFound :((。一切都在Local Cluster上运行良好。
还有一件事: - 我上传的Jar是68MB(比较重的一面)。这可以与此有关吗?
答案 0 :(得分:2)
如果您通过Eclipse提交,则应该执行以下操作:
public static void main(String[] args) {
TopologyBuilder b = new TopologyBuilder();
// build your topology
b.setSpout(...);
b.setBolt(...);
Config c = new Config();
c.put(Config.NIMBUS_HOST, "130.211.244.139");
// not sure you you use 6627; 6123 is default port; if you change the port, just use 6627 of course
c.put(Config.NIMBUS_THRIFT_PORT, new Integer(6123));
StormSubmitter.submitTopology("myTopolgyName", conf, b.createTopology());
}
此外,您需要指定JVM参数-Dstorm.jar=/Users/agarg/Documents/notificationRepo/apache-storm/build/libs/apache-storm-SNAPSHOT-ns.r134-boot.jar
。
如果您想避免将传递依赖项包含在jar中,您也可以手动将它们复制到Storm的lib
文件夹中。当然,您需要将它们复制到所有机器。您可能还需要重新启动群集。您可以将尽可能多的罐子复制到lib
文件夹 - Storm将“拾取”所有罐子。
此外,如果您构建一个胖罐,则依赖罐不能嵌套到远罐中(即,依赖罐的提取内容必须包含在远罐中)。例如,您依赖jar dep.jar
包含文件DClass.class
;因此,你的胖罐子不能包含“dep.jar”(既不在顶层也不在“lib”文件夹中),而是包含所有Spout和Bolt类旁边的“DClass.class”(即“DClass.class”必须包含在jar中的顶级文件夹。当然,你还需要尊重包结构,即,如果“dep.jar”包含文件dpackage.DClass2
(即文件夹“dpackage”中的“DClass2.class”)远jar必须包含一个目录“dpackage”(在jar中的顶级文件夹中),其中包含“DClass2.class”。