微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Storm 2.0 工作程序在启动时失败并出现异常,而没有 Storm-kafka 对 pom 的依赖

如何解决Storm 2.0 工作程序在启动时失败并出现异常,而没有 Storm-kafka 对 pom 的依赖

根据storm 2.0 发布文档,storm-kafka 被删除用户必须转移到storm-kafka-client。

所以,我从 pom.xml 中删除了 Storm-kafka 依赖。我们已经对 pom 有了 Storm-kafka-client 依赖。构建成功。

但是当使用 storm jar CLI 命令启动拓扑风暴时,我们收到以下异常。我还可以在storm lib文件夹中看到json-simple-1.1.jar,我们不应该得到NoClassDef异常。

java.lang.Error: java.lang.NoClassDefFoundError: org/json/simple/parser/ParseException
    at org.apache.storm.utils.Utils.handleUncaughtException(Utils.java:647) ~[storm-client-2.0.0.jar:2.0.0]
    at org.apache.storm.utils.Utils.handleUncaughtException(Utils.java:626) ~[storm-client-2.0.0.jar:2.0.0]
    at org.apache.storm.utils.Utils.lambda$createDefaultUncaughtExceptionHandler$2(Utils.java:982) ~[storm-client-2.0.0.jar:2.0.0]
    at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1057) [?:1.8.0_191]
    at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1052) [?:1.8.0_191]
    at java.lang.Thread.dispatchUncaughtException(Thread.java:1959) [?:1.8.0_191]
Caused by: java.lang.NoClassDefFoundError: org/json/simple/parser/ParseException
    at java.lang.class.getDeclaredFields0(Native Method) ~[?:1.8.0_191]
    at java.lang.class.privateGetDeclaredFields(Class.java:2583) ~[?:1.8.0_191]
    at java.lang.class.getDeclaredField(Class.java:2068) ~[?:1.8.0_191]
    at java.io.ObjectStreamClass.getDeclaredSUID(ObjectStreamClass.java:1857) ~[?:1.8.0_191]
    at java.io.ObjectStreamClass.access$700(ObjectStreamClass.java:79) ~[?:1.8.0_191]
    at java.io.ObjectStreamClass$3.run(ObjectStreamClass.java:506) ~[?:1.8.0_191]
    at java.io.ObjectStreamClass$3.run(ObjectStreamClass.java:494) ~[?:1.8.0_191]
    at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_191]
    at java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:494) ~[?:1.8.0_191]
    at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:391) ~[?:1.8.0_191]
    at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:681) ~[?:1.8.0_191]
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1885) ~[?:1.8.0_191]
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1751) ~[?:1.8.0_191]
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2042) ~[?:1.8.0_191]
    at java.io.ObjectInputStream.readobject0(ObjectInputStream.java:1573) ~[?:1.8.0_191]
    at java.io.ObjectInputStream.readobject(ObjectInputStream.java:431) ~[?:1.8.0_191]
    at org.apache.storm.utils.Utils.javaDeserialize(Utils.java:542) ~[storm-client-2.0.0.jar:2.0.0]
    at org.apache.storm.utils.Utils.getSetComponentObject(Utils.java:915) ~[storm-client-2.0.0.jar:2.0.0]
    at org.apache.storm.daemon.Task.mkTaskObject(Task.java:271) ~[storm-client-2.0.0.jar:2.0.0]
    at org.apache.storm.daemon.Task.<init>(Task.java:88) ~[storm-client-2.0.0.jar:2.0.0]
    at org.apache.storm.executor.Executor.mkExecutor(Executor.java:194) ~[storm-client-2.0.0.jar:2.0.0]
    at org.apache.storm.daemon.worker.Worker.loadWorker(Worker.java:218) ~[storm-client-2.0.0.jar:2.0.0]
    at org.apache.storm.daemon.worker.Worker.lambda$start$0(Worker.java:166) ~[storm-client-2.0.0.jar:2.0.0]
    at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_191]
    at javax.security.auth.Subject.doAs(Subject.java:422) ~[?:1.8.0_191]
    at org.apache.storm.daemon.worker.Worker.start(Worker.java:165) ~[storm-client-2.0.0.jar:2.0.0]
    at org.apache.storm.daemon.worker.Worker.main(Worker.java:129) ~[storm-client-2.0.0.jar:2.0.0]
Caused by: java.lang.classNotFoundException: org.json.simple.parser.ParseException
    at java.net.urlclassloader.findClass(urlclassloader.java:382) ~[?:1.8.0_191]
    at java.lang.classLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_191]
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349) ~[?:1.8.0_191]
    at java.lang.classLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_191]
    at java.lang.class.getDeclaredFields0(Native Method) ~[?:1.8.0_191]
    at java.lang.class.privateGetDeclaredFields(Class.java:2583) ~[?:1.8.0_191]
    at java.lang.class.getDeclaredField(Class.java:2068) ~[?:1.8.0_191]
    at java.io.ObjectStreamClass.getDeclaredSUID(ObjectStreamClass.java:1857) ~[?:1.8.0_191]
    at java.io.ObjectStreamClass.access$700(ObjectStreamClass.java:79) ~[?:1.8.0_191]
    at java.io.ObjectStreamClass$3.run(ObjectStreamClass.java:506) ~[?:1.8.0_191]
    at java.io.ObjectStreamClass$3.run(ObjectStreamClass.java:494) ~[?:1.8.0_191]
    at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_191]
    at java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:494) ~[?:1.8.0_191]
    at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:391) ~[?:1.8.0_191]
    at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:681) ~[?:1.8.0_191]
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1885) ~[?:1.8.0_191]
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1751) ~[?:1.8.0_191]
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2042) ~[?:1.8.0_191]
    at java.io.ObjectInputStream.readobject0(ObjectInputStream.java:1573) ~[?:1.8.0_191]
    at java.io.ObjectInputStream.readobject(ObjectInputStream.java:431) ~[?:1.8.0_191]
    at org.apache.storm.utils.Utils.javaDeserialize(Utils.java:542) ~[storm-client-2.0.0.jar:2.0.0]
    at org.apache.storm.utils.Utils.getSetComponentObject(Utils.java:915) ~[storm-client-2.0.0.jar:2.0.0]
    at org.apache.storm.daemon.Task.mkTaskObject(Task.java:271) ~[storm-client-2.0.0.jar:2.0.0]
    at org.apache.storm.daemon.Task.<init>(Task.java:88) ~[storm-client-2.0.0.jar:2.0.0]
    at org.apache.storm.executor.Executor.mkExecutor(Executor.java:194) ~[storm-client-2.0.0.jar:2.0.0]
    at org.apache.storm.daemon.worker.Worker.loadWorker(Worker.java:218) ~[storm-client-2.0.0.jar:2.0.0]
    at org.apache.storm.daemon.worker.Worker.lambda$start$0(Worker.java:166) ~[storm-client-2.0.0.jar:2.0.0]
    at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_191]
    at javax.security.auth.Subject.doAs(Subject.java:422) ~[?:1.8.0_191]
    at org.apache.storm.daemon.worker.Worker.start(Worker.java:165) ~[storm-client-2.0.0.jar:2.0.0]
    at org.apache.storm.daemon.worker.Worker.main(Worker.java:129) ~[storm-client-2.0.0.jar:2.0.0]```

解决方法

lib 目录不是用于客户端代码的。如果您的拓扑中需要 json-simple,请将其包含在您的 jar 中,或者将其放入 worker-lib 目录中。

这是来自storm.py引导脚本的相关代码:

def get_classpath(extrajars,daemon=True,client=False):
    ret = get_wildcard_dir(STORM_DIR)
    if client:
        ret.extend(get_wildcard_dir(STORM_WORKER_LIB_DIR))
    else :
        ret.extend(get_wildcard_dir(STORM_LIB_DIR))
    ...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。