构建Storm时Zookeeper的ClassNotFoundException

我是java和Storm的新手所以请原谅任何明显的错误。 我正在尝试使用水槽连接器运行风暴,但它崩溃时出现以下错误:

java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:297) at java.lang.Thread.run(Thread.java:744) Caused by: java.lang.ExceptionInInitializerError at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:270) at clojure.lang.RT.loadClassForName(RT.java:2056) at clojure.lang.RT.load(RT.java:419) at clojure.lang.RT.load(RT.java:400) at clojure.core$load$fn__4890.invoke(core.clj:5415) at clojure.core$load.doInvoke(core.clj:5414) at clojure.lang.RestFn.invoke(RestFn.java:408) at clojure.core$load_one.invoke(core.clj:5227) at clojure.core$load_lib.doInvoke(core.clj:5264) at clojure.lang.RestFn.applyTo(RestFn.java:142) at clojure.core$apply.invoke(core.clj:603) at clojure.core$load_libs.doInvoke(core.clj:5302) at clojure.lang.RestFn.applyTo(RestFn.java:137) at clojure.core$apply.invoke(core.clj:603) at clojure.core$require.doInvoke(core.clj:5381) at clojure.lang.RestFn.invoke(RestFn.java:408) at backtype.storm.cluster$loading__4784__auto__.invoke(cluster.clj:1) at backtype.storm.cluster__init.load(Unknown Source) at backtype.storm.cluster__init.(Unknown Source) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:270) at clojure.lang.RT.loadClassForName(RT.java:2056) at clojure.lang.RT.load(RT.java:419) at clojure.lang.RT.load(RT.java:400) at clojure.core$load$fn__4890.invoke(core.clj:5415) at clojure.core$load.doInvoke(core.clj:5414) at clojure.lang.RestFn.invoke(RestFn.java:408) at clojure.core$load_one.invoke(core.clj:5227) at clojure.core$load_lib.doInvoke(core.clj:5264) at clojure.lang.RestFn.applyTo(RestFn.java:142) at clojure.core$apply.invoke(core.clj:603) at clojure.core$load_libs.doInvoke(core.clj:5302) at clojure.lang.RestFn.applyTo(RestFn.java:137) at clojure.core$apply.invoke(core.clj:603) at clojure.core$require.doInvoke(core.clj:5381) at clojure.lang.RestFn.invoke(RestFn.java:408) at backtype.storm.daemon.nimbus__init.load(Unknown Source) at backtype.storm.daemon.nimbus__init.(Unknown Source) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:270) at clojure.lang.RT.loadClassForName(RT.java:2056) at clojure.lang.RT.load(RT.java:419) at clojure.lang.RT.load(RT.java:400) at clojure.core$load$fn__4890.invoke(core.clj:5415) at clojure.core$load.doInvoke(core.clj:5414) at clojure.lang.RestFn.invoke(RestFn.java:408) at clojure.core$load_one.invoke(core.clj:5227) at clojure.core$load_lib.doInvoke(core.clj:5264) at clojure.lang.RestFn.applyTo(RestFn.java:142) at clojure.core$apply.invoke(core.clj:603) at clojure.core$load_libs.doInvoke(core.clj:5302) at clojure.lang.RestFn.applyTo(RestFn.java:137) at clojure.core$apply.invoke(core.clj:603) at clojure.core$require.doInvoke(core.clj:5381) at clojure.lang.RestFn.invoke(RestFn.java:408) at backtype.storm.testing$loading__4784__auto__.invoke(testing.clj:1) at backtype.storm.testing__init.load(Unknown Source) at backtype.storm.testing__init.(Unknown Source) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:270) at clojure.lang.RT.loadClassForName(RT.java:2056) at clojure.lang.RT.load(RT.java:419) at clojure.lang.RT.load(RT.java:400) at clojure.core$load$fn__4890.invoke(core.clj:5415) at clojure.core$load.doInvoke(core.clj:5414) at clojure.lang.RestFn.invoke(RestFn.java:408) at clojure.core$load_one.invoke(core.clj:5227) at clojure.core$load_lib.doInvoke(core.clj:5264) at clojure.lang.RestFn.applyTo(RestFn.java:142) at clojure.core$apply.invoke(core.clj:603) at clojure.core$load_libs.doInvoke(core.clj:5302) at clojure.lang.RestFn.applyTo(RestFn.java:137) at clojure.core$apply.invoke(core.clj:605) at clojure.core$use.doInvoke(core.clj:5392) at clojure.lang.RestFn.invoke(RestFn.java:408) at backtype.storm.LocalCluster$loading__4784__auto__.invoke(LocalCluster.clj:1) at backtype.storm.LocalCluster__init.load(Unknown Source) at backtype.storm.LocalCluster__init.(Unknown Source) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:270) at clojure.lang.RT.loadClassForName(RT.java:2056) at clojure.lang.RT.load(RT.java:419) at clojure.lang.RT.load(RT.java:400) at clojure.core$load$fn__4890.invoke(core.clj:5415) at clojure.core$load.doInvoke(core.clj:5414) at clojure.lang.RestFn.invoke(RestFn.java:408) at clojure.lang.Var.invoke(Var.java:415) at backtype.storm.LocalCluster.(Unknown Source) at com.storm.WordCountTopology.main(WordCountTopology.java:97) ... 6 more Caused by: java.lang.ClassNotFoundException: org.apache.zookeeper.server.NIOServerCnxn$Factory at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:190) at backtype.storm.zookeeper$loading__4784__auto__.invoke(zookeeper.clj:1) at backtype.storm.zookeeper__init.load(Unknown Source) at backtype.storm.zookeeper__init.(Unknown Source) ... 96 more 

我的pom文件

  4.0.0 com.storm my-storm 1.0-SNAPSHOT jar my-storm http://maven.apache.org  1.3.0-cdh4.2.1 2.0.0-cdh4.2.1 UTF-8    clojars.org http://clojars.org/repo   cdh-maven-repo CDH Maven Repository https://repository.cloudera.com/content/repositories/releases/     storm storm 0.8.2 compile   junit junit 3.8.1 test   org.apache.flume flume-ng-embedded-agent ${flume.version}   org.apache.flume flume-ng-core ${flume.version}   org.slf4j slf4j-api     org.apache.flume flume-ng-configuration ${flume.version}   org.apache.flume flume-ng-node ${flume.version}   org.apache.hadoop hadoop-common ${hadoop.version}   org.apache.zookeeper zookeeper 3.4.5 test   org.slf4j slf4j-log4j12 1.5.8      org.apache.maven.plugins maven-compiler-plugin 2.3.2  1.7 1.7    org.apache.maven.plugins maven-release-plugin 2.0-beta-9     $uname -a :Linux 2.6.32-358.23.2.el6.x86_64 #1 SMP Thu Oct 17 10:27:22 CEST 2013 x86_64 x86_64 x86_64 GNU/Linux $locate zookeeper .m2/repository/org/apache/zookeeper/zookeeper/3.4.5-cdh4.2.1/zookeeper-3.4.5-cdh4.2.1.pom 

你能解释一下我错过了什么吗?

似乎关键在于:

 Caused by: java.lang.ClassNotFoundException: org.apache.zookeeper.server.NIOServerCnxn$Factory 

这似乎是由使用zookeeper版本3.4.5引起的。 您是否尝试过降级,可能是版本3.3.6

分支-3.3包含内部类NIOServerCnxn $ Factory但分支-3.4包含NIOServerCnxnFactory而不是

似乎最后一个jar丢失了zookeeper。 尝试添加此:

   org.apache.flume flume-ng-core ${flume.version}   org.slf4j slf4j-api     org.apache.zookeeper zookeeper 3.4.5 test   org.slf4j slf4j-log4j12 1.5.8  

到你的pom.xml。

如果它没有帮助问题:

 mvn dependency:tree 

并发给我输出。

以下POM适合我 –

   org.apache.zookeeper zookeeper 3.4.5   com.sun.jmx jmxri   com.sun.jdmk jmxtools   javax.jms jms     org.apache.storm storm-kafka 0.9.3   org.slf4j slf4j-log4j12   log4j log4j     org.apache.kafka kafka_2.10 0.8.2.0   org.slf4j slf4j-log4j12   log4j log4j     org.apache.storm storm-core 0.9.3   org.slf4j slf4j-log4j12   log4j log4j     com.espertech esper 4.11.0   org.slf4j slf4j-log4j12   log4j log4j     net.sf.opencsv opencsv 2.3   

我也面临同样的问题,我在我的案例中注意到的问题是:我使用storm-9.0.1和Zookeeper 3.4.5。

通过将我的zookeeper改为3.3.6或将风暴改为9.0.2,我的问题已经解决了。

所以Storm-9.0.1与Zookeeper 3.3.6兼容,Storm 9.0.2与Zookeeper 3.4.5兼容

经过几天的敲击,我决定改变方法,显然Eclipse可以运行项目,因为它没有任何问题。

从eclipse创建一个uberjar并将所有引用的jar放在项目的lib文件夹中,然后使用java -jar在服务器中运行uberjar解决了这个问题。

不是一个好的解决方案,我永远不明白为什么maven无法运行该项目,但它的工作原理。