【问题标题】:Why does static keyword "fix" the issue of Task not serializable?为什么静态关键字“修复”任务不可序列化的问题?
【发布时间】: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);
            }

工作得很好。

我知道原因之一是sparkConfjssc 需要是static。但我不明白为什么。

谁能解释一下区别?

【问题讨论】:

    标签: java serialization apache-spark


    【解决方案1】:

    JavaStreamingContext 和 SparkConf 都没有实现 Serializable。

    没有这个接口你不能序列化类的实例。

    静态成员不会被序列化。

    更多信息可以在这里找到:

    http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-05
      • 1970-01-01
      • 2019-09-17
      • 2023-04-06
      • 1970-01-01
      • 2013-07-09
      相关资源
      最近更新 更多