美文网首页
2020-12-17-Spark-25(序列化问题)

2020-12-17-Spark-25(序列化问题)

作者: 冰菓_ | 来源:发表于2020-12-26 12:39 被阅读0次

1.spark运行结构

1.application 包括driver和分布在不同集群不同节点上的executor代码
2.driver指的是application中的main函数并且创建的sparkcontext,sparkcontext作用是创建运行环境
spark的运行环境是什么?
一个CoarseGrainedExecutorBackend只有一个executor
spark on yarn

image.png

2.序列化问题(闭包问题)与线程安全问题

在driver端初始化了一个object或class实例,要在executor运行,必须实现序列化接口
如果实例是object类型,则每个executor共享一个,如果是class类型,及new了一个实例,则一个task一个实例

在函数中初始化实例,如果是单例的,则一个进程(executor)只有一个实例,如果是class类型,看调用的算子,如果是map,则没来一条数据就new 一个,如果是mappartition,则一个分区一个实例

多个线程共用一个变量,会出现线程安全问题,例如:

object DateUntil {
  private val format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")

  def parse(st: String): Long = {
    val date = format.parse(st)
    date.getTime
  }
}

加锁改进:

object DateUntil {
  private val format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")

  def parse(st: String): Long = synchronized {
    val date = format.parse(st)
    date.getTime
  }
}

效果不好,改进:mappartition算子,一个分区一个simpledateformat

   rdd.mapPartitions(data => {
      val format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
      data.map(txt => {
        val date = format.parse(txt)
        date.getTime
      })
    })

3.shuffle

image.png

在join之前调用groupbykey,下游的数据明确知道要拉取的数据的分区,就没有shuffle,就无需划分stage,就是窄依赖.

image.png

相关文章

  • 2020-12-17-Spark-25(序列化问题)

    1.spark运行结构 1.application 包括driver和分布在不同集群不同节点上的executor代...

  • com.esotericsoftware.kryo.kryoex

    这次不扯蛋,直接开讲。 该问题的本质是序列化问题!!!序列化问题!!!序列化问题!!! 重要问题说三遍。 把对象转...

  • Java序列化心得(二):自定义序列化

    正如前文《Java序列化心得(一):序列化设计和默认序列化格式的问题》中所提到的,默认序列化方法存在各种各样的问题...

  • Java序列化与反序列化

    问题 Java序列化与反序列化是什么?为什么需要序列化与反序列化?有什么好处?如何实现Java序列化与反序列化? ...

  • jackson源码分析

    背景:之前碰到序列化的问题,spring默认序列化又是jackson序列化,然后近来又爆出fastjson序列化的...

  • 【Flink 精选】常见的性能问题及其定位思路

    常见的性能问题及其定位思路 1.常见的性能问题 (1)JSON序列化和反序列化 source的序列化,sink的反...

  • Protostuff序列化和反序列化

    Java序列化和反序列化 序列化和反序列化是在应对网络编程最常遇到的问题之一。序列化就是将Java Object转...

  • Protostuff序列化和反序列化

    序列化和反序列化是在应对网络编程最常遇到的问题之一。序列化就是将Java Object转成byte[];反序列化就...

  • 序列化

    序 想必大家都听过序列化或者是反序列化,为什么要序列化呢?如果不序列化会出现什么问题,序列化了有什么好处呢,有哪些...

  • netty使用Google Protobuf协议优化通道的序列化

    一、Google Protobuf 协议 解决序列化和检索效率的问题。 序列化的方法有: 使用java原生的序列化...

网友评论

      本文标题:2020-12-17-Spark-25(序列化问题)

      本文链接:https://www.haomeiwen.com/subject/gitjgktx.html