【发布时间】:2015-11-20 22:21:47
【问题描述】:
我在运行 spark 流时遇到了“任务不可序列化”问题。原因可以在这个thread找到。
在我尝试了几种方法并解决了这个问题后,我不明白它为什么会起作用。
public class StreamingNotWorking implements Serializable {
private SparkConf sparkConf;
private JavaStreamingContext jssc;
public StreamingNotWorking(parameter) {
sparkConf = new SparkConf();
this.jssc = createContext(parameter);
JavaDStream<String> messages = functionCreateStream(parameter);
messages.print();
}
public void run() {
this.jssc.start();
this.jssc.awaitTermination();
}
public class streamingNotWorkingDriver {
public static void main(String[] args) {
Streaming bieventsStreaming = new StreamingNotWorking(parameter);
bieventsStreaming.run();
}
会给出同样的“Task not serializable”错误。
但是,如果我将代码修改为:
public class StreamingWorking implements Serializable {
private static SparkConf sparkConf;
private static JavaStreamingContext jssc;
public void createStream(parameter) {
sparkConf = new SparkConf();
this.jssc = createContext(parameter);
JavaDStream<String> messages = functionCreateStream(parameter);
messages.print();
run();
}
public void run() {
this.jssc.start();
this.jssc.awaitTermination();
}
public class streamingWorkingDriver {
public static void main(String[] args) {
Streaming bieventsStreaming = new StreamingWorking();
bieventsStreaming.createStream(parameter);
}
工作得很好。
我知道原因之一是sparkConf 和jssc 需要是static。但我不明白为什么。
谁能解释一下区别?
【问题讨论】:
标签: java serialization apache-spark