构建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无法运行该项目,但它的工作原理。