簡體   English   中英

在BlockingQueue java上遇到問題,實現Storm(分布式計算)?

[英]having issues with BlockingQueue java , implementation of Storm (Distributed computing)?

這是我的輸入噴口的代碼片段,用於將元組發送到處理節點,以在集群上進行流處理。 問題是BlockingQueue正在拋出InterruptedException。

private SpoutOutputCollector collector;
public BlockingQueue<String> blockingQueue = new LinkedBlockingQueue<String>();

public boolean isDistributed() {
    return true;
    }


public void open(@SuppressWarnings("rawtypes") final Map conf, final TopologyContext context,
final SpoutOutputCollector collector) {

    this.collector=collector;

}

@Override
public void nextTuple() {


    try {
        //Utils.sleep(100);
        collector.emit(new Values("Single Temperature Reading", blockingQueue.take()));
    } catch (InterruptedException e) {
        e.printStackTrace();
    }



}

public void readInputfile() throws IOException, InterruptedException{
    FileInputStream file = new FileInputStream("/home/529076/Desktop/Temperature");
    DataInputStream readDate=new DataInputStream(file);
    BufferedReader readText=new BufferedReader(new InputStreamReader(readDate));

    String line;
    String singleReading = null;
    while((line=readText.readLine())!=null){
         singleReading=line;
         blockingQueue.add(singleReading);

    }

}
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
    declarer.declare(new Fields("Single Temperature Reading"));
}

異常描述如下:

java.lang.InterruptedException10930 [Thread-20]信息backtype.storm.util-異步循環中斷!

at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:1961)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1996)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
at com.tcs.storm.test.InputStreamSpout.nextTuple(InputStreamSpout.java:65)
at backtype.storm.daemon.task$fn__3349$fn__3404.invoke(task.clj:413)

而nextTuple(InputStreamSpout.java:65是------>

        collector.emit(new Values("Single Temperature Reading", blockingQueue.take()));

謝謝

該錯誤是由於以下事實造成的:-BlockingQueue沒有在輸出收集器中初始化;

在Storm中,建議在prepare()/ open()方法中初始化Bolts / Spouts的字段。

原因是在從其上載拓撲的節點上創建了Bolts / Spouts:將在此處構造BlockingQueue。 然后將螺栓/噴口序列化並分發到工作程序節點,在此對它們進行反序列化。 序列化/反序列化的過程可能無法保留在構造Bolt / Spout時設置的字段的所有屬性。 在prepare()或open()中初始化的字段沒有此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM