对SerializerManager的说明:

它是为各种Spark组件配置序列化,压缩和加密的组件,包括自动选择用于shuffle的Serializer。spark中的数据在network IO 或 local disk IO传输过程中。都需要序列化。其默认的 Serializer 是 org.apache.spark.serializer.JavaSerializer,在一定条件下,可以使用kryo,即org.apache.spark.serializer.KryoSerializer。

支持的两种序列化方式

即值的类型是八种基本类型中一种或null或String,都会使用kryo,否则使用默认序列化方式,即java序列化方式。

它还负责读写Block流是否使用压缩:

数据流是否支持压缩

默认情况下:

其中,如果使用压缩,默认的压缩是 lz4, 可以通过参数 spark.io.compression.codec 来配置。它支持的所有压缩类型如下:

读写数据流如何支持压缩

其中,支持压缩的InputStream和OutputStream是对原来的InputStream和OutputStream做了包装。我们以LZ4BlockOutputStream为例说明。

调用如下函数返回支持压缩的OutputStream:

首先,LZ4BlockOutputStream的继承关系如下:

被包装的类被放到了FilterOutputStream类的out 字段中,如下:

outputStream核心方法就是write。直接来看LZ4BlockOutputStream的write方法:

其中buffer是一个byte 数组,默认是 32k,可以通过spark.io.compression.lz4.blockSize 参数来指定,在LZ4BlockOutputStream类中用blockSize保存。

重点看flushBufferedData方法:

方法内部实现思路如下:

外部写入到buffer中的数据经过compressor压缩到compressorBuffer中,然后再写入一些magic,最终将压缩的buffer写入到out中,write操作结束。

可见,数据的压缩是由 LZ4BlockOutputStream 负责的,压缩之后的数据被写入到目标outputStream中。

转载于:https://www.cnblogs.com/johnny666888/p/11190380.html

spark 源码分析之十三 -- SerializerManager剖析相关推荐

  1. spark 源码分析之十八 -- Spark存储体系剖析

    本篇文章主要剖析BlockManager相关的类以及总结Spark底层存储体系. 总述 先看 BlockManager相关类之间的关系如下: 我们从NettyRpcEnv 开始,做一下简单说明. Ne ...

  2. spark 源码分析之八--Spark RPC剖析之TransportContext和TransportClientFactory剖析

    spark 源码分析之八--Spark RPC剖析之TransportContext和TransportClientFactory剖析 TransportContext 首先官方文档对Transpor ...

  3. Spark源码解读之Shuffle原理剖析与源码分析

    在前面几篇文章中,介绍了Spark的启动流程Spark内核架构流程深度剖析,Spark源码分析之DAGScheduler详解,Spark源码解读之Executor以及Task工作原理剖析,Spark源 ...

  4. spark 源码分析之二十 -- Stage的提交

    引言 上篇 spark 源码分析之十九 -- DAG的生成和Stage的划分 中,主要介绍了下图中的前两个阶段DAG的构建和Stage的划分. 本篇文章主要剖析,Stage是如何提交的. rdd的依赖 ...

  5. spark 源码分析之十九 -- DAG的生成和Stage的划分

    上篇文章 spark 源码分析之十八 -- Spark存储体系剖析 重点剖析了 Spark的存储体系.从本篇文章开始,剖析Spark作业的调度和计算体系. 在说DAG之前,先简单说一下RDD. 对RD ...

  6. Spark源码分析之Sort-Based Shuffle读写流程

    一 概述 我们知道Spark Shuffle机制总共有三种: # 未优化的Hash Shuffle:每一个ShuffleMapTask都会为每一个ReducerTask创建一个单独的文件,总的文件数是 ...

  7. Spark源码分析之七:Task运行(一)

    在Task调度相关的两篇文章<Spark源码分析之五:Task调度(一)>与<Spark源码分析之六:Task调度(二)>中,我们大致了解了Task调度相关的主要逻辑,并且在T ...

  8. Spark 源码分析

    2019独角兽企业重金招聘Python工程师标准>>> 一. 启动篇 (一) 引子 在spark-shell终端执行 val arr = Array(1,2,3,4) val rdd ...

  9. Spark源码分析之九:内存管理模型

    Spark是现在很流行的一个基于内存的分布式计算框架,既然是基于内存,那么自然而然的,内存的管理就是Spark存储管理的重中之重了.那么,Spark究竟采用什么样的内存管理模型呢?本文就为大家揭开Sp ...

最新文章

  1. 【Linux 内核 内存管理】内存管理架构 ② ( 用户空间内存管理 | malloc | ptmalloc | 内核空间内存管理 | sys_brk | sys_mmap | sys_munmap)
  2. 5 判断数据是否存在_Trie树实现:100亿URL中判断某个URL是否存在
  3. Visual Studio 的键盘快捷方式
  4. 已经无法合并还报请合并git_Git不能自动合并怎么解决?
  5. python pointer_python 的隐式指针特征与class inheritance
  6. 一键发布部署vs插件[AntDeploy]开源了
  7. 为什么程序员的社会地位不高?
  8. 百度云下载不限速方式集合
  9. 2022备赛蓝桥杯给大家的建议与提醒和资料,值得认真看一下,多拿几十分
  10. 网吧带宽很大,为什么三层更新下载游戏很慢?
  11. 深度学习大神都推荐入门必须读完
  12. 爱奇艺APP的自动化录制回放系统 全云化处理新体验
  13. IBM技术论坛:使用 Cobertura 和反射机制提高单元测试中的代码覆盖率
  14. Array.of()
  15. 三菱FX3U——ST编程中的字符串
  16. Jacob处理Word文档总结以及Java操作Office2007
  17. onLoad、onShow
  18. 【数字半导体测试基础】新手入门
  19. amd官网linux驱动性能,AMD最新驱动大幅提高Linux工作站性能
  20. 微型计算机d3000,微机(二次)消谐(多功能)

热门文章

  1. 2014/School_C_C++_B/3/x的x次幂
  2. 面试题 16.18. Pattern Matching LCCI
  3. 11.2.5 属性
  4. 征战蓝桥 —— 2017年第八届 —— C/C++A组第5题——字母组串
  5. Linux(四) 用户、用户组
  6. table高度改变时触发什么事件_(立下flag)每日10道前端面试题11 关于事件十问...
  7. Redis源码剖析(五)订阅与发布
  8. C++类成员函数在.cpp中设置成inline后无法解析的问题
  9. php mysql 内存溢出_关于MySQL的整型数据的内存溢出问题的应对方法_MySQL
  10. 深入理解BN、合并conv+BN公式推导