1

使用storm 1.1.0 运行我的拓扑时,storm 的worker 上的pacemaker 出现错误。 ->java.lang.IllegalArgumentException: No matching field found: waitUntilReady for class org.apache.storm.pacemaker.PacemakerClient

在使用反射时,调用者似乎找不到方法waitUntilReady?但是我在 PacemakerClient 的源码中找到了这个方法:private void waitUntilReady() throws PacemakerConnectionException { } 当我使用相同拓扑代码和相同配置的storm 1.0.1时,worker到pacemaker的通信运行良好,没有这个异常。</p>

我用jdk1.8打包了topology,storm1.1.0也是用jdk1.8启动的!

我有这样的strom 1.1.0起搏器配置:</p>

    起搏器.servers:[“exp104.didatick.com”]
    起搏器端口:6699
    起搏器.max.threads:10
    起搏器.childopts:“-Xmx512m”
    起搏器.auth.method:“无”

    storm.cluster.state.store:“org.apache.storm.pacemaker.pacemaker_state_factory”

完整的堆栈跟踪:</p>

2017-04-16 17:08:50.896 oasdworker main [INFO] Worker 855fbf1e-d23d-400f-b181-1a0934720bbf 风暴 TRIDENT-TEST-4-1492333594 on 47d8b370-85c2-41d1-b4e6-e603f 已完成加载 bf3
2017-04-16 17:08:50.998 oasppacemaker-state-factory executor-heartbeat-timer [错误] 无法设置_worker_hb。将进行 [10] 次尝试。
java.lang.IllegalArgumentException:未找到匹配字段:org.apache.storm.pacemaker.PacemakerClient 类的 waitUntilReady
         在 clojure.lang.Reflector.getInstanceField(Reflector.java:271) ~[clojure-1.7.0.jar:?]
         在 clojure.lang.Reflector.invokeNoArgInstanceMember(Reflector.java:315) ~[clojure-1.7.0.jar:?]
         在 org.apache.storm.pacemaker.pacemaker_state_factory$get_pacemaker_write_client.invoke(pacemaker_state_factory.clj:110) ~[storm-core-1.1.0.jar:1.1.0]
         在 org.apache.storm.pacemaker.pacemaker_state_factory$_mkState$reify__12511$fn__12512.invoke(pacemaker_state_factory.clj:187) ~[storm-core-1.1.0.jar:1.1.0]
         在 org.apache.storm.pacemaker.pacemaker_state_factory$pacemaker_retry_on_exception$fn__12506.invoke(pacemaker_state_factory.clj:139) ~[storm-core-1.1.0.jar:1.1.0]
         在 org.apache.storm.pacemaker.pacemaker_state_factory$pacemaker_retry_on_exception.invoke(pacemaker_state_factory.clj:139) [storm-core-1.1.0.jar:1.1.0]
         在 org.apache.storm.pacemaker.pacemaker_state_factory$_mkState$reify__12511.set_worker_hb(pacemaker_state_factory.clj:183) [storm-core-1.1.0.jar:1.1.0]
         在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_92]
         在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_92]
         在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_92]
         在 java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_92]
         在 clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:93) [clojure-1.7.0.jar:?]
         在 clojure.lang.Reflector.invokeInstanceMethod(Reflector.java:28) [clojure-1.7.0.jar:?]
         在 org.apache.storm.cluster$mk_storm_cluster_state$reify__4395.worker_heartbeat_BANG_(cluster.clj:468) [storm-core-1.1.0.jar:1.1.0]
         在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_92]
         在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_92]
         在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_92]
         在 java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_92]
         在 clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:93) [clojure-1.7.0.jar:?]
         在 clojure.lang.Reflector.invokeInstanceMethod(Reflector.java:28) [clojure-1.7.0.jar:?]
         在 org.apache.storm.daemon.worker$do_executor_heartbeats.doInvoke(worker.clj:76) [storm-core-1.1.0.jar:1.1.0]
         在 clojure.lang.RestFn.invoke(RestFn.java:439) [clojure-1.7.0.jar:?]
         在 org.apache.storm.daemon.worker$fn__5542$exec_fn__1364__auto__$reify__5544$fn__5547.invoke(worker.clj:624) [storm-core-1.1.0.jar:1.1.0]
         在 org.apache.storm.timer$schedule_recurring$this__1737.invoke(timer.clj:105) [storm-core-1.1.0.jar:1.1.0]
         在 org.apache.storm.timer$mk_timer$fn__1720$fn__1721.invoke(timer.clj:50) [storm-core-1.1.0.jar:1.1.0]
         在 org.apache.storm.timer$mk_timer$fn__1720.invoke(timer.clj:42) [storm-core-1.1.0.jar:1.1.0]
         在 clojure.lang.AFn.run(AFn.java:22) [clojure-1.7.0.jar:?]
         在 java.lang.Thread.run(Thread.java:745) [?:1.8.0_92]
4

1 回答 1

0

我见过同样的问题。

Pacemaker 功能似乎在 1.1.0: STORM-2500中被破坏。

查看源代码,我相信它在 1.0.3 之前都可以正常工作,但我还没有测试过。我想您必须与项目的维护者之一联系,以查看他们是否有意解决此问题。

当一些 Pacemaker 代码无论如何都用 java 重写时,他们当然可能计划只在 2.0.0 中解决这个问题。

于 2017-06-27T14:01:52.067 回答