Hi,

Right now, I have my storm cluster setting up (three machines respectively
for zookeeper, nimbus, supervisor). Before submitting the topology to the
storm cluster, I usually test storm program in local model with Eclipse.
And then I use Eclipse to package the storm project and send to nimbus
machine to submit. But whatever I package from Eclipse (the entire project
or the target folder..), it shows error that cannot find class.... The
following experments are what I did on Storm :

Getting-Started.jar is the entire project jar packaged from Eclipse. I use
"jar -tf Getting-Started.jar" to extract, you can see the path:

Getting-Started/.classpath
Getting-Started/.gitignore
Getting-Started/.project
Getting-Started/.settings/org.eclipse.jdt.core.prefs
Getting-Started/.settings/org.eclipse.m2e.core.prefs
Getting-Started/.settings/org.maven.ide.eclipse.prefs
Getting-Started/Readme.txt
Getting-Started/bin/data/
Getting-Started/bin/src/main/java/dataApi/
Getting-Started/bin/src/main/java/topology/bolts/
Getting-Started/bin/src/main/java/topology/data/
Getting-Started/bin/src/main/java/topology/spouts/
Getting-Started/bin/src/main/resources/
Getting-Started/bin/src/test/java/
Getting-Started/bin/target/classes/META-INF/maven/storm.book/
Getting-Started/bin/target/classes/dataApi/
Getting-Started/bin/target/classes/topology/bolts/
Getting-Started/bin/target/classes/topology/data/
Getting-Started/bin/target/classes/topology/spouts/
Getting-Started/data/
Getting-Started/pom.html
Getting-Started/pom.xml
Getting-Started/src/main/java/dataApi/DataConnector.java
Getting-Started/src/main/java/dataApi/DataOutputController.java
Getting-Started/src/main/java/dataApi/FinancialDataStream.java
Getting-Started/src/main/java/dataApi/QuoteInterface.java
Getting-Started/src/main/java/topology/FinancialDataOperationTopology.java
Getting-Started/src/main/java/topology/RandomFinancialDataTopology.java
Getting-Started/src/main/java/topology/bolts/DataNormalizerBolt.java
Getting-Started/src/main/java/topology/bolts/QuoteAveragerBolt.java
Getting-Started/src/main/java/topology/data/FinancialData.java
Getting-Started/src/main/java/topology/data/Symbol.java
Getting-Started/src/main/java/topology/spouts/FinancialDataSpout.java
Getting-Started/src/main/java/topology/spouts/RandomFinancialDataSpout.java
Getting-Started/src/main/resources/financialdata.txt
Getting-Started/src/test/java/
Getting-Started/target/classes/META-INF/MANIFEST.MF
Getting-Started/target/classes/META-INF/maven/storm.book/Getting-Started/pom.properties
Getting-Started/target/classes/META-INF/maven/storm.book/Getting-Started/pom.xml
Getting-Started/target/classes/dataApi/DataConnector.class
Getting-Started/target/classes/dataApi/DataOutputController.class
Getting-Started/target/classes/dataApi/FinancialDataStream.class
Getting-Started/target/classes/dataApi/QuoteInterface.class
Getting-Started/target/classes/financialdata.txt
Getting-Started/target/classes/topology/FinancialDataOperationTopology.class
Getting-Started/target/classes/topology/RandomFinancialDataTopology.class
Getting-Started/target/classes/topology/bolts/DataNormalizerBolt.class
Getting-Started/target/classes/topology/bolts/QuoteAveragerBolt.class
Getting-Started/target/classes/topology/data/FinancialData.class
Getting-Started/target/classes/topology/data/Symbol.class
Getting-Started/target/classes/topology/spouts/FinancialDataSpout.class
Getting-Started/target/classes/topology/spouts/RandomFinancialDataSpout.class
Getting-Started/target/get.jar
Getting-Started/target/test-classes/

I see the topology path in this jar is :
Getting-Started/target/classes/topology/RandomFinancialDataTopology.class
Then I use "storm jar" command:
 /usr/local/storm/bin/storm jar Getting-Started.jar
topology.RandomFinancialDataTopology datatopology

It shows this error:
Exception in thread "main" java.lang.NoClassDefFoundError:
Getting-Started/target/classes/topology/RandomFinancialDataTopology (wrong
name: topology/RandomFinancialDataTopology)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:643)
        at
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
Could not find the main class:
Getting-Started.target.classes.topology.RandomFinancialDataTopology.
Program will exit.

Then I try to use maven command "mvn package" to package on the nimbus
command line and submit the topology, it works. When I extract the jar
using maven I see it only packages the files in the
"Getting-Started/target/classes". Then I manually package this folder and
try to submit again. Unfortunately it shows the same error as I showed
above.

I want to ask whether there is a way to handle this situation if I want to
first use Eclipse to package and send the jar to nimbus machine for
submitting.


Thanks,
Cui Qin

Reply via email to