2016-04-15 26 views
7

Sto cercando di eseguire il debug di Tempesta Topology (Storm v 1.0.0) sotto le finestre tramite:errore durante l'esecuzione ClassNotFound topologie tempesta-avviamento in modalità locale (Win10, OS X)

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); 

E ottenere il seguente errore (WordCount/esclamativo/Stateful o di altre topologie di tempesta-starter - non importa):

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] 

Questo si comporta come se non ci sono jar-file nella directory di lavoro di lavoratori. Ma secondo il commento ";; in modalità locale non ci sono barattoli" in Nimbus.clj non sembra essere sbagliato. Nella versione 0.10.0 questo problema non si verifica. Qualche idea?

Il problema si verifica quando si tenta di eseguire un debug in IntelliJ utilizzando plugin di Maven-exec con la seguente riga di comando in configurazione (come consigliato here):

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

dalla directory, in cui POM file di topologia è situato.

UPD: il problema è sicuramente causato dall'indisponibilità di qualsiasi classe (topologia o storm-core) per il thread di lavoro durante l'inizializzazione. (L'analisi di entrambe le topologie di WordCount e Exclamation lo dimostra). Le riproduzioni con ambito di dipendenza "storm-core" e profilo intellij nel POM-s della topologia non hanno dato nulla.

+0

È corretto, che in modalità locale non è necessario un jar contenente il codice utente. Ma forse nel tuo percorso di classe mancano alcuni barattoli di tempesta ... Per favore ricontrolla. –

+0

Lo vedo anche su OS X. Ho aggiornato una topologia 0.10.0 che funzionava correttamente. –

risposta

4

Ho eseguito il mio LocalCluster con sbt run, se lo eseguo utilizzando java -jar fatjar.jar, tutto funziona correttamente. Per ora ho intenzione di eseguire con Intellij la classificazione del percorso di classe, non so perché sbt si sta comportando in modo strano quando si risolve il classpath. Chiunque abbia qualche informazione per favore commenta!

1

Ho trovato qualche soluzione: l'uso della funzionalità di creazione e di esecuzione standard di Idea funziona bene per le topologie java chiare. Ma solo fino a quando l'esecuzione non eseguirà alcuni script di shell (come splitsentece.py). Quindi fallisce con l'eccezione file non trovata, quindi la compilazione senza Maven sembra non essere completamente funzionante