【问题标题】:ClassNotFound error when running storm-starter topologies in local mode (Win10, OS X)在本地模式下运行 Storm-starter 拓扑时出现 ClassNotFound 错误(Win10、OS X)
【发布时间】:2016-04-15 14:04:35
【问题描述】:

我正在尝试通过以下方式在 windows 下调试 Storm 拓扑(在 Storm v 1.0.0 上):

TopologyBuilder builder = new TopologyBuilder();
builder.setSpout("spout", new RandomIntegerSpout());
builder.setBolt("partialsum", new StatefulSumBolt("partial"), 1).shuffleGrouping("spout");
builder.setBolt("printer", new PrinterBolt(), 2).shuffleGrouping("partialsum");
builder.setBolt("total", new StatefulSumBolt("total"), 1).shuffleGrouping("printer");

Config conf = new Config();
conf.setDebug(false);
LocalCluster cluster = new LocalCluster();
StormTopology topology = builder.createTopology();
cluster.submitTopology("test", conf, topology);

并得到以下错误(WordCount/Exclamation/Stateful 或 Storm-starter 的其他拓扑 - 无关紧要):

java.lang.RuntimeException: java.lang.ClassNotFoundException: org.apache.storm.daemon.acker
at org.apache.storm.utils.Utils.javaDeserialize(Utils.java:181) ~[storm-core-1.0.0.jar:1.0.0]
at org.apache.storm.utils.Utils.getSetComponentObject(Utils.java:430) ~[storm-core-1.0.0.jar:1.0.0]
at org.apache.storm.daemon.task$get_task_object.invoke(task.clj:74) ~[storm-core-1.0.0.jar:1.0.0]
at org.apache.storm.daemon.task$mk_task_data$fn__66.invoke(task.clj:177) ~[storm-core-1.0.0.jar:1.0.0]
at org.apache.storm.util$assoc_apply_self.invoke(util.clj:930) ~[storm-core-1.0.0.jar:1.0.0]
at org.apache.storm.daemon.task$mk_task_data.invoke(task.clj:170) ~[storm-core-1.0.0.jar:1.0.0]
at org.apache.storm.daemon.task$mk_task.invoke(task.clj:181) ~[storm-core-1.0.0.jar:1.0.0]
at org.apache.storm.daemon.executor$mk_executor$fn__6149.invoke(executor.clj:371) ~[storm-core-1.0.0.jar:1.0.0]
at clojure.core$map$fn__4553.invoke(core.clj:2622) ~[clojure-1.7.0.jar:?]
at clojure.lang.LazySeq.sval(LazySeq.java:40) ~[clojure-1.7.0.jar:?]
at clojure.lang.LazySeq.seq(LazySeq.java:49) ~[clojure-1.7.0.jar:?]
at clojure.lang.RT.seq(RT.java:507) ~[clojure-1.7.0.jar:?]
at clojure.core$seq__4128.invoke(core.clj:137) ~[clojure-1.7.0.jar:?]
at clojure.core.protocols$seq_reduce.invoke(protocols.clj:30) ~[clojure-1.7.0.jar:?]
at clojure.core.protocols$fn__6506.invoke(protocols.clj:101) ~[clojure-1.7.0.jar:?]
at clojure.core.protocols$fn__6452$G__6447__6465.invoke(protocols.clj:13) ~[clojure-1.7.0.jar:?]
at clojure.core$reduce.invoke(core.clj:6519) ~[clojure-1.7.0.jar:?]
at clojure.core$into.invoke(core.clj:6600) ~[clojure-1.7.0.jar:?]
at org.apache.storm.daemon.executor$mk_executor.invoke(executor.clj:372) ~[storm-core-1.0.0.jar:1.0.0]
at org.apache.storm.daemon.worker$fn__6779$exec_fn__3235__auto__$reify__6781$iter__6786__6790$fn__6791.invoke(worker.clj:634) ~[storm-core-1.0.0.jar:1.0.0]
at clojure.lang.LazySeq.sval(LazySeq.java:40) ~[clojure-1.7.0.jar:?]
at clojure.lang.LazySeq.seq(LazySeq.java:49) ~[clojure-1.7.0.jar:?]
at clojure.lang.RT.seq(RT.java:507) ~[clojure-1.7.0.jar:?]
at clojure.core$seq__4128.invoke(core.clj:137) ~[clojure-1.7.0.jar:?]
at clojure.core$dorun.invoke(core.clj:3009) ~[clojure-1.7.0.jar:?]
at clojure.core$doall.invoke(core.clj:3025) ~[clojure-1.7.0.jar:?]
at org.apache.storm.daemon.worker$fn__6779$exec_fn__3235__auto__$reify__6781.run(worker.clj:634) ~[storm-core-1.0.0.jar:1.0.0]
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_65]
at javax.security.auth.Subject.doAs(Subject.java:422) ~[?:1.8.0_65]
at org.apache.storm.daemon.worker$fn__6779$exec_fn__3235__auto____6780.invoke(worker.clj:606) ~[storm-core-1.0.0.jar:1.0.0]
at clojure.lang.AFn.applyToHelper(AFn.java:178) ~[clojure-1.7.0.jar:?]
at clojure.lang.AFn.applyTo(AFn.java:144) ~[clojure-1.7.0.jar:?]
at clojure.core$apply.invoke(core.clj:630) ~[clojure-1.7.0.jar:?]
at org.apache.storm.daemon.worker$fn__6779$mk_worker__6874.doInvoke(worker.clj:580) [storm-core-1.0.0.jar:1.0.0]
at clojure.lang.RestFn.invoke(RestFn.java:512) [clojure-1.7.0.jar:?]
at org.apache.storm.daemon.supervisor$fn__7647.invoke(supervisor.clj:1200) [storm-core-1.0.0.jar:1.0.0]
at clojure.lang.MultiFn.invoke(MultiFn.java:251) [clojure-1.7.0.jar:?]
at org.apache.storm.daemon.supervisor$get_valid_new_worker_ids$iter__7208__7212$fn__7213.invoke(supervisor.clj:380) [storm-core-1.0.0.jar:1.0.0]
at clojure.lang.LazySeq.sval(LazySeq.java:40) [clojure-1.7.0.jar:?]
at clojure.lang.LazySeq.seq(LazySeq.java:49) [clojure-1.7.0.jar:?]
at clojure.lang.RT.seq(RT.java:507) [clojure-1.7.0.jar:?]
at clojure.core$seq__4128.invoke(core.clj:137) [clojure-1.7.0.jar:?]
at clojure.core$dorun.invoke(core.clj:3009) [clojure-1.7.0.jar:?]
at clojure.core$doall.invoke(core.clj:3025) [clojure-1.7.0.jar:?]
at org.apache.storm.daemon.supervisor$get_valid_new_worker_ids.invoke(supervisor.clj:367) [storm-core-1.0.0.jar:1.0.0]
at org.apache.storm.daemon.supervisor$sync_processes.invoke(supervisor.clj:428) [storm-core-1.0.0.jar:1.0.0]
at clojure.core$partial$fn__4527.invoke(core.clj:2492) [clojure-1.7.0.jar:?]
at org.apache.storm.event$event_manager$fn__909.invoke(event.clj:40) [storm-core-1.0.0.jar:1.0.0]
at clojure.lang.AFn.run(AFn.java:22) [clojure-1.7.0.jar:?]
at java.lang.Thread.run(Thread.java:745) [?:1.8.0_65]

这就像工人的工作目录中没有 jar 文件一样。但根据Nimbus.clj 中的评论“;;在本地模式下没有 jar”,这似乎没有错。 在 0.10.0 版中不会出现此问题。有什么想法吗?

当我尝试在 Intellij 中使用 maven-exec 插件在配置中使用以下命令行(如推荐的 here)运行调试时出现问题:

compile exec:java -Dstorm.topology=org.apache.storm.starter.WordCountTopology 

来自拓扑的 POM 文件所在的目录。

UPD:问题是由于工作线程在初始化时任何(拓扑或风暴核心)类不可用引起的。 (尝试 WordCount 和 Exclamation 拓扑可以说明这一点)。在拓扑的 POM-s 中使用“storm-core”依赖和 intellij 配置文件的范围没有给出任何结果。

【问题讨论】:

  • 没错,本地模式下不需要包含用户代码的jar。但也许你的类路径中缺少一些风暴罐......请仔细检查。
  • 我也在 OS X 中看到了这个。我更新了运行良好的 0.10.0 拓扑。

标签: java intellij-idea maven-plugin apache-storm


【解决方案1】:

我一直使用sbt run 运行我的LocalCluster,如果我使用java -jar fatjar.jar 运行它,一切运行正常。现在我将使用 Intellij 来整理类路径,不知道为什么 sbt 在解析类路径时表现得很奇怪。有任何信息的人请发表评论!

【讨论】:

    【解决方案2】:

    我找到了一些解决方案:使用标准 Idea 的构建和运行功能非常适合清晰的 Java 拓扑。但只有在执行之前才会运行一些 shell 脚本(如 splitsentece.py)。然后由于找不到文件异常而失败,因此没有 maven 的编译似乎功能不全

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多