2015-08-13 11 views
6

Lavoro con Storm già da un po ', ma voglio iniziare con lo sviluppo. Come suggerito, sto usando IntelliJ (fino ad ora, stavo usando Eclipse e scrivevo solo topologie contro l'API Java).Come eseguire WordCountTopology da storm-starter in Intellij

stavo anche guardando https://github.com/apache/storm/tree/master/examples/storm-starter#intellij-idea

Questa documentazione non è completa. Non ero in grado di eseguire nulla in Intellij prima. Potrei capire che ho bisogno di rimuovere la portata della dipendenza da storm-core (in pom.xml di avvio tempesta). (trovato qui: storm-starter with intellij idea,maven project could not find class)

Dopo che sono stato in grado di costruire il progetto. Posso anche eseguire ExclamationTopology senza problemi all'interno di IntelliJ. Tuttavia, WordCountTopology non riesce.

Per prima cosa ho ottenuto il seguente errore:

java.lang.RuntimeException: backtype.storm.multilang.NoOutputException: Pipe to subprocess seems to be broken! No output read. Serializer Exception: Traceback (most recent call last): File "splitsentence.py", line 16, in import storm ImportError: No module named storm

Aggiornamento: installazione python-storm non è tenuto a farlo funzionare

sono stato in grado di risolvere tramite: apt-get install Pitone storm (da StackOverflow)

Tuttavia, non parlo Python e mi chiedevo quale fosse il problema e perché potessi risolverlo in questo modo. Voglio solo approfondirmi. Forse qualcuno può spiegare.

Purtroppo, sto ottenendo un errore diverso ora:

java.lang.RuntimeException: backtype.storm.multilang.NoOutputException: Pipe to subprocess seems to be broken! No output read. Serializer Exception: Traceback (most recent call last): File "splitsentence.py", line 18, in class SplitSentenceBolt(storm.BasicBolt): AttributeError: 'module' object has no attribute 'BasicBolt'

non ho trovato alcuna soluzione su Internet. Anche chiedere a [email protected] non è stato d'aiuto. Vedo il seguente suggerimento:

I think that it was always assumed that topology would always be invoked through storm-command line. Thus working directory would be ${STORM-INSTALLATION}/bin/storm Since storm.py is in the this directory, splitSentence.py would be able to find storm modules. Can you set the working directory to a path, where storm.py is present and then try. If it works, we can add it later to the documentation

Tuttavia, il caricamento della directory di lavoro non ha risolto il problema.

E come non ho familiarità con Python e come sono nuovo in IntelliJ, sono bloccato ora. Perché ExclamationTopology viene eseguito, suppongo che la mia configurazione di base sia corretta.

Cosa faccio di sbagliato? È possibile eseguire WordcountTopology in LocalCluster in IntelliJ?

risposta

6

Sfortunatamente, AFAIK non è possibile eseguire la funzionalità multilang con LocalCluster senza avere file pacchettizzati.

ShellProcess si basa su codeDir di TopologyContext, che viene utilizzato dal supervisore. I lavoratori sono serializzati su stormcode.ser, ma i file multilang devono essere estratti all'esterno del file serializzato in modo che python/ruby ​​/ node/etc possa caricarlo.

Il completamento di questa modalità di distribuzione è semplice perché è sempre presente un jar inviato dall'utente e il supervisore può sapere che è ciò che l'utente ha inviato.

Tuttavia, eseguire tale operazione con la modalità locale non è un'operazione semplice, poiché supervisore non può conoscere il vaso inviato dall'utente e gli utenti possono eseguire la topologia in modalità locale senza imballaggio.

Quindi, Supervisore in modalità locale trova la directory di risorse ("risorse") da ciascun jar (che termina con "jar") in classpath e copia la prima occorrenza su codeDir.

storm jar posiziona il vaso di topologia utente sul primo di classpath, quindi può essere eseguito senza problemi.

Pertanto, è normale che ShellProcess non trovi "splitsentence.py". Forse la tua directory di lavoro o PYTHONPATH ha fatto il trucco.

+1

Impostazione PYTHONPATH fa il trucco! 'SplitSentence pythonSplit = new SplitSentence(); Mappa env = new HashMap(); env.put ("PYTHONPATH", "/ home/mjsax/workspace_storm/storm/storm-storm-multilang/python/src/main/resources/resources /"); pythonSplit.setEnv (env); builder.setBolt ("split", pythonSplit, 8) .shuffleGrouping ("spout"); ' –

+0

Sì, in caso di non trovare implementazioni multilang di storm-starter, è possibile aggiungerle anche a PYTHONPATH. –

+0

Non è contenuto in starter tempesta. E non tutte le versioni di 'storm.py' funzionano. Il codice contiene 5 file con 3 versioni differenti. Non riuscivo a capire perché ci sono diverse versioni però. Lo sai? –

1

Ho faticato con un problema simile, non con la topologia di esempio, ma con il mio utilizzando un bullone Python.

Anche l'oggetto "AttributeError:" module "non ha alcuna eccezione di attributo" BasicBolt "" - in modalità locale e in fase di invio al cluster.

Ci sono pochissime risorse su questo, ho trovato la tua domanda e poco altro discutere di questo problema.

Nel caso in cui qualcun altro abbia lo stesso problema: Assicurati di includere la dipendenza Maven "multilang-python" corretta nel tuo file pom. Questo impacchetterà le corrette dipendenze del tempo di esecuzione nel file JAR necessario per eseguire la topologia.

+0

mi scusi, sto affrontando lo stesso problema ma non sono riuscito a risolverlo, come posso sapere che l'esperto giusto dovrei usarlo? – user5520049

+1

Se ricordo correttamente, è sufficiente abbinare i numeri di versione sulla dipendenza multilang-python alla dipendenza dalla tempesta principale – Will777

Problemi correlati