task的序列化问题和线程安全问题

在spark中,使用类实例,一般分为四种情况

  1.  Driver初始化一个object,这个单例对象要伴随着Task发送到Executor,但是一个Executor中只有一份必须实现序列化接口, 使用共享成员变量有可能会出现线程安全问题
  2. Driver实例化一个类的实例(new一个实例),在函数内容引用了这个实例,该实例会伴随着Task发送到Executor,每个Task有一个单独的实例,必须实现序列化接口
  3. 在executor端初始化,在函数内部使用一个object,这个object不用实现序列化,这个object是在Executor中初始化的,并且一个Executor中只有一份,使用共享成员变量有可能会出现线程安全问题
  4.  在executor端初始化,在函数内部new 一个实例,每来一条数据new一个类的实例,这样会频繁GC,浪费大量资源

具体可以看一下这个链接

https://blog.csdn.net/zuochang_liu/article/details/108063129

posted @ 2022-03-30 16:57  习惯了蓝  阅读(98)  评论(0)    收藏  举报