簡體   English   中英

在Spark Streaming中將StreamingContext與Receiver分開

[英]Separate StreamingContext from Receiver in Spark Streaming

我想概括一下我在Main的接待情況。 設置SparkConf和JavaContextStreaming之后,我想接收一個任意對象,然后將其傳遞給分析器。

在以下情況下,我會遇到異常:任務無法序列化

Main.java
/**
*
**/
  SparkConf conf = new SparkConf().setMaster("local[*]").setAppName("MyApp");
  JavaStreamingContext jsc = new JavaStreamingContext(conf, BATCH_DURATION);
  JavaReceiverInputDStream<String> input = jsc.socketTextStream(HOST, PORT);
  OtherClass.analyze(input);
/*
 */
  jsc.start();
  jsc.awaitTermination();
  jsc.close();

OtherClass.java
/**
*
**/
public void analyze(JavaReceiverInputDStream<String> input){
  JavaPairDStream<String, String> events = input.mapToPair( ...);
// other code
//
// Task not serializable (at the line where I call lines.mapToPair(...))
//
  }

我也嘗試過將接收器插入該方法中,並且在同一行得到相同的結果。

Main.java
/**
*
**/
  SparkConf conf = new SparkConf().setMaster("local[*]").setAppName("MyApp");
  JavaStreamingContext jsc = new JavaStreamingContext(conf, BATCH_DURATION);
  OtherClass.analyze(jsc);
/*
 */

OtherClass.java
/**
*
**/
public void analyze(JavaStreamingContext jsc){

  JavaReceiverInputDStream<String> input = jsc.socketTextStream(HOST, PORT);
  JavaPairDStream<String, String> events = input.mapToPair( ...);
// other code
//
// Task not serializable (at the line where I call lines.mapToPair(...))
//
  jsc.start();
  jsc.awaitTermination();
  jsc.close();
}

有沒有一種方法可以將接收器(在這種情況下為JavaReceiverInputDStream,但可以很容易地成為JavaDStream)與分析數據的邏輯部分分開? 或者,有一種方法可以將JavaStreamingContext從接收者和分析數據的部分分開?

由OP解決。

我只需要在OtherClass.java中實現Serializable(java.io)。 顯然,對於每個環境(包括本地環境)都是必要的。

暫無
暫無

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

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