Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ApacheStorm:ClassNotFoundException将jar部署到remoteCluster时_Java_Classnotfoundexception_Apache Storm - Fatal编程技术网

Java ApacheStorm:ClassNotFoundException将jar部署到remoteCluster时

Java ApacheStorm:ClassNotFoundException将jar部署到remoteCluster时,java,classnotfoundexception,apache-storm,Java,Classnotfoundexception,Apache Storm,我正在尝试将我的拓扑捆绑为胖jar部署到远程集群。jar可以成功部署,但部署后,我在worker日志中看到以下错误:它说它找不到JpaRepository的类,如下所示 不过,我提交给集群的jar已经包含了这个类。我从集群中复制了jar并查看了它的内容,下面是我看到的内容 如果你们中有人知道为什么会失败,我会非常感激,因为我不知道如何继续下去。我已经在用类部署jar了,但它仍然显示classNotFound:(。在本地集群上一切都很好 还有一件事:-我上传的Jar是68MB(重一点)。这与此

我正在尝试将我的拓扑捆绑为胖jar部署到远程集群。jar可以成功部署,但部署后,我在worker日志中看到以下错误:它说它找不到JpaRepository的类,如下所示

不过,我提交给集群的jar已经包含了这个类。我从集群中复制了jar并查看了它的内容,下面是我看到的内容

如果你们中有人知道为什么会失败,我会非常感激,因为我不知道如何继续下去。我已经在用类部署jar了,但它仍然显示classNotFound:(。在本地集群上一切都很好


还有一件事:-我上传的Jar是68MB(重一点)。这与此有关系吗???

如果您通过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 SN‌​APSHOT ns.r134 boot.jar

如果您想避免将可传递依赖项包含到jar中,您还可以手动将它们复制到Storm的
lib
文件夹中。当然,您需要将它们复制到所有计算机上。您可能还需要重新启动群集。您可以将任意多个jar复制到
lib
文件夹中,Storm将“拾取”所有jar


此外,如果您构建一个胖jar,依赖jar不能嵌套到远jar中(即,依赖jar的提取内容必须包含在远jar中)。例如,您的依赖jar
dep.jar
包含一个文件
DClass.class
;因此,您的胖jar不能包含“dep.jar”(无论是顶级还是“lib”)文件夹),但所有喷口类和螺栓类旁边的“DClass.class”(即,“DClass.class”必须包含在jar的顶层文件夹中。当然,您还需要尊重包结构,即,如果“dep.jar”包含一个文件
dpackage.DClass2
(即,“dpackage”文件夹中的“DClass2.class”),则远jar必须包含一个目录“dpackage”(在jar的顶层文件夹中)包含“DClass2.class”。

您可以通过
storm jar
命令提交
spring-data-jpa-1.6.4.RELEASE.jar
?作为构建胖jar的替代方法,您还可以手动将依赖项jar复制到
storm_HOME/lib
(当然在集群的每台机器上)。您可能需要重新启动群集以使Storm拾取jar。我没有使用Storm jar命令提交…我使用Nimbus客户端从Eclipse提交:=>Map Storm_conf=Utils.readStormConfig();Storm_conf.put(Config.Nimbus_HOST,“130.211.244.139”);String jar=“/Users/agarg/Documents/notificationRepo/apache storm/build/libs/apache storm SNAPSHOT ns.r134 boot.jar”;NimbusClient nimbus=new NimbusClient(storm_conf,“130.211.244.139”,6627);String uploadedJarLocation=StormSubmitter.submitJar(storm_conf,jar);而且,我现在只有一个单节点群集。我有太多的依赖jar。提交所有jar可能很困难。我可以尝试手动推送这个jar。也就是说。storm会扫描libs文件夹中的所有jar吗。我的意思是,如果我将更多jar推送到libs文件夹中,会与fat jar一起。如果没有,storm也会扫描它们吗d不知怎的在胖罐子里?谢谢Matthias..所以现在我正在手动部署罐子,它似乎正在工作(我现在每次都得到不同的classNotFoundException:)…然而,这远不是理想的解决方案..理想情况下,我希望有一个胖罐子来为我做这项工作,因为在所有节点上重复相同的操作是一项乏味而痛苦的任务..那么,风暴是这样设计的还是一个可以修复的bug?你可以构建一个远罐子,并在其中包含所有依赖项,以避免手动将依赖的罐子复制到
lib
文件夹。在您的示例中,所有依赖项都必须包含在
apache storm SN中‌​APSHOT ns.r134 boot.jar
。您只需确保胖jar不包含依赖项,因为
jar
文件--Storm无法处理嵌套的jar。实际上,我无法理解您的观点…我相信我在做同样的事情。.胖jar与jar在单独的lib文件夹中有所有依赖项。让我给m附加一个图像阿帕奇风暴‌​APSHOT-ns.r134-boot.jar来详细说明。也许到时候我会明白你的意思。我刚刚扩展了我的答案。啊,有点晚了。我也发布了这张照片。不管怎样,因为我现在已经发布了。请确认我的理解,我会删除它。非常感谢你在这里对我的帮助:)