Apache storm Apache storm Spoot的发射速度快于Bolt计算,导致ConcurrentModificationException
这是我的情况。我有一个卡夫卡喷口,喷口每秒发出一个元组。螺栓将连接到Rserve,需要大约5秒钟来计算结果,然后发出一个元组。 但是螺栓总是得到一致的修改例外,然后工人就死了Apache storm Apache storm Spoot的发射速度快于Bolt计算,导致ConcurrentModificationException,apache-storm,concurrentmodification,Apache Storm,Concurrentmodification,这是我的情况。我有一个卡夫卡喷口,喷口每秒发出一个元组。螺栓将连接到Rserve,需要大约5秒钟来计算结果,然后发出一个元组。 但是螺栓总是得到一致的修改例外,然后工人就死了 public class LagBolt extends BaseRichBolt { OutputCollector _collector; public void prepare(Map map, TopologyContext topologyContext, OutputCollector outputColl
public class LagBolt extends BaseRichBolt {
OutputCollector _collector;
public void prepare(Map map, TopologyContext topologyContext, OutputCollector outputCollector) {
_collector = outputCollector;
}
public void execute(Tuple tuple) {
List<Pair> pairs = (List<Pair>) tuple.getValueByField("pairs");
double[] value = new double[pairs.size()];
for (int i = 0; i < pairs.size(); i++) {
value[i] = pairs.get(i).getValue();
}
Model model = new Model();
RConnection rConnection = new RserveConnection().getrConnection();
// the test() and estimate() need about five seconds to compute
int d = model.test(rConnection, value);
int[] ap = model.estimate(rConnection, value, d);
List<Parameter> parameters = delegate(ap, d);
rConnection.close();
_collector.emit(tuple, new Values(parameters));
_collector.ack(tuple);
}
public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
outputFieldsDeclarer.declare(new Fields("parameters"));
}
private List<Parameter> delegate(int[] ap, int d){
int apNum = ap[0];
List<Parameter> parameters = new ArrayList<Parameter>();
for(int i = 1; i < 1+apNum; i++){
for(int j = apNum+1; j < ap.length; j++){
Parameter parameter = new Parameter(ap[i], d, ap[j]);
parameters.add(parameter);
}
}
return parameters;
}
public类LagBolt扩展了BaseRichBolt{
输出采集器_采集器;
公共空白准备(地图地图、拓扑上下文、拓扑上下文、OutputCollector OutputCollector){
_收集器=输出收集器;
}
公共void执行(元组){
列表对=(列表)tuple.getValueByField(“对”);
double[]值=新的double[pairs.size()];
对于(int i=0;i
这是个例外
379632[Thread-14-Lag]错误b.s.util-异步循环终止!
java.lang.RuntimeException:java.util.ConcurrentModificationException
在backtype.storm.utils.DisruptorQueue.ConsumerBatchToCursor(DisruptorQueue.java:135)~[storm-core-0.10.0.jar:0.10.0]
在backtype.storm.utils.DisruptorQueue.ConsumerBatchWhenAvailable(DisruptorQueue.java:106)~[storm-core-0.10.0.jar:0.10.0]
在backtype.storm.disruptor$consume\u batch\u可用时调用(disruptor.clj:80)~[storm-core-0.10.0.jar:0.10.0]
在backtype.storm.daemon.executor$fn_u5694$fn_u5707$fn_u5758.invoke(executor.clj:819)~[storm-core-0.10.0.jar:0.10.0]
在backtype.storm.util$async\u循环$fn\uu 545.invoke(util.clj:479)[storm-core-0.10.0.jar:0.10.0]
在clojure.lang.AFn.run(AFn.java:22)[clojure-1.6.0.jar:?]
在java.lang.Thread.run(Thread.java:745)[?:1.7.091]
原因:java.util.ConcurrentModificationException
在java.util.ArrayList$SubList.checkForComodification(ArrayList.java:1169)~[?:1.7.091]
在java.util.ArrayList$SubList.listIterator(ArrayList.java:1049)~[?:1.7.091]
在java.util.AbstractList.listIterator(AbstractList.java:299)~[?:1.7.091]
在java.util.ArrayList$SubList.iterator(ArrayList.java:1045)~[?:1.7.091]
在java.util.AbstractCollection.toString(AbstractCollection.java:450)~[?:1.7.091]
在java.lang.String.valueOf(String.java:2849)~[?:1.7.0_91]
在java.lang.StringBuilder.append(StringBuilder.java:128)~[?:1.7.091]
在java.util.AbstractCollection.toString(AbstractCollection.java:458)~[?:1.7.091]
在backtype.storm.tuple.TupleImpl.toString(TupleImpl.java:222)~[storm-core-0.10.0.jar:0.10.0]
在clojure.core$str.invoke(core.clj:520)~[clojure-1.6.0.jar:?]
在clojure.core$str$fn_u3928.invoke(core.clj:524)~[clojure-1.6.0.jar:?]
在clojure.core$str.doInvoke(core.clj:526)~[clojure-1.6.0.jar:?]
在clojure.lang.RestFn.invoke(RestFn.java:516)~[clojure-1.6.0.jar:?]
在backtype.storm.daemon.executor$fn\u 5694$tuple\u action\u fn\u 5696.invoke(executor.clj:693)~[storm-core-0.10.0.jar:0.10.0]
在backtype.storm.daemon.executor$mk\u task\u receiver$fn\u 5615.invoke(executor.clj:436)~[storm-core-0.10.0.jar:0.10.0]
在backtype.storm.disruptor$clojure\u handler$reify\u 5189.onEvent(disruptor.clj:58)~[storm-core-0.10.0.jar:0.10.0]
在backtype.storm.utils.DisruptorQueue.ConsumerBatchToCursor(DisruptorQueue.java:132)~[storm-core-0.10.0.jar:0.10.0]
…还有6个
379677[Thread-14-Lag]错误b.s.d.执行器-
java.lang.RuntimeException:java.util.ConcurrentModificationException
在backtype.storm.utils.DisruptorQueue.ConsumerBatchToCursor(DisruptorQueue.java:135)~[storm-core-0.10.0.jar:0.10.0]
在backtype.storm.utils.DisruptorQueue.ConsumerBatchWhenAvailable(DisruptorQueue.java:106)~[storm-core-0.10.0.jar:0.10.0]
在backtype.storm.disruptor$consume\u batch\u可用时调用(disruptor.clj:80)~[storm-core-0.10.0.jar:0.10.0]
在backtype.storm.daemon.executor$fn_u5694$fn_u5707$fn_u5758.invoke(executor.clj:819)~[storm-core-0.10.0.jar:0.10.0]
在backtype.storm.util$async\u循环$fn\uu 545.invoke(util.clj:479)[storm-core-0.10.0.jar:0.10.0]
在clojure.lang.AFn.run(AFn.java:22)[clojure-1.6.0.jar:?]
在java.lang.Thread.run(Thread.java:745)[?:1.7.091]
原因:java.util.ConcurrentModificationException
在java.util.ArrayList$SubList.checkForComodification(ArrayList.java:1169)~[?:1.7.091]
在java.util.ArrayList$SubList.listIterator(ArrayList.java:1049)~[?:1.7.091]
在java.util.AbstractList.listIterator(AbstractList.java:299)~[?:1.7.091]
在java.util.ArrayList$SubList.iterator(ArrayList.java:1045)~[?:1.7.091]
在java.util.AbstractCollection.toString(AbstractCollection.java:450)~[?:1.7.091]
在java.lang.String.valueOf(String.java:2849)~[?:1.7.0_91]
在java.lang.StringBuilder.append(StringBuilder.java:128)~[?:1.7.091]
在java.util.AbstractCollection.toString(AbstractCollection.java:458)~[?:1.7.091]
在backtype.storm.tuple.TupleImpl.toString(TupleImpl.java:222)~[storm-core-0.10.0.jar:0.10.0]
在clojure.core$str.invoke(cor