java - Apache Storm : ClassNotFoundException when deploying jar to remoteCluster

标签 java classnotfoundexception apache-storm

我正在尝试将我的拓扑部署为一个 fat jar 捆绑到远程 Cluster 。 jar 可以成功部署,但是部署后,我在工作日志中看到以下错误:它说找不到 JpaRepository 的类,如下所示

enter image description here

我提交到集群的 jar 已经包含这个类了。我从集群中复制了 jar 并看到了它的内容,这就是我所看到的

enter image description here

如果你们中有人知道为什么会失败,我将非常感激,因为我不知道如何进一步进行此操作。我已经用 class 部署了 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 会“拾取”所有这些文件。

此外,如果构建一个fat jar,则依赖的jar 不能嵌套到far jar 中(即,提取的依赖jar 的内容必须包含到far jar 中)。例如,您依赖的jar dep.jar 包含一个文件DClass.class;因此,您的 fat jar 不得包含“dep.jar”(既不在顶级文件夹中,也不在“lib”文件夹中),而是在所有 Spout 和 Bolt 类旁边包含“DClass.class”(即,“DClass.class”必须包含在jar 中的顶级文件夹。当然,您还需要尊重包结构,即,如果“dep.jar”包含文件 dpackage.DClass2(即文件夹“中的“DClass2.class”) dpackage”)远 jar 必须包含目录“dpackage”(位于 jar 内的顶级文件夹中),其中包含“DClass2.class”。

关于java - Apache Storm : ClassNotFoundException when deploying jar to remoteCluster,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33157303/

相关文章:

java - Android使用服务将通知设置为特定时间

java - Hive Driver Connection 线上的 Hadoop 中的 ClassNotFoundException 引起的 NoClassDefFoundError?

apache-storm - Storm 场分组示例

java - 存在多个 log4j.properties 时 log4j 的行为

java - 无法设置用户来运行服务

java - 可变大小数组的构造函数

java - 子容器在启动 java.util.concurrent.ExecutionException 期间失败

java.lang.ClassNotFoundException : org. hibernate .bytecode.instrumentation.internal.FieldInterceptionHelper

java - 在 KafkaBolt 中暴露 Kafka 发布异常

java - 在 StormCrawler 上获取拓扑以正确写入 warc 文件