在Spark 1.2.0中,Spark Core的一个重要的升级就是将默认的Hash Based Shuffle换成了Sort Based Shuffle,即spark.shuffle.manager 从hash换成了sort,对应的实现类分别是org.apache.spark.shuffle.hash.HashShuffleManager和org.apache.spark.shuffle.sort.SortShuffleManager. 这个方式的选择是在org.apache.spark.Sp…
Spark Tungsten揭秘 Day2 Tungsten-sort Based Shuffle 今天在对钨丝计划思考的基础上,讲解下基于Tungsten的shuffle. 首先解释下概念,Tungsten-sort是对普通sort的一种优化,排序的不是内容本身,而是内容序列化后字节数组的指针(元数据),把数据的排序转变为了指针数组的排序,实现了直接对序列化后的二进制数据进行排序.由于直接基于二进制数据进行操作,所以在这里面没有序列化和反序列化的过程.内存的消耗大大降低,相应的,会极大的减少的…
分布式系统里的Shuffle 阶段往往是非常复杂的,而且分支条件也多,我只能按着我关注的线去描述.肯定会有不少谬误之处,我会根据自己理解的深入,不断更新这篇文章. 前言 借用和董神的一段对话说下背景: shuffle共有三种,别人讨论的是hash shuffle,这是最原始的实现,曾经有两个版本,第一版是每个map产生r个文件,一共产生mr个文件,由于产生的中间文件太大影响扩展性,社区提出了第二个优化版本,让一个core上map共用文件,减少文件数目,这样共产生corer个文件,好多了,但中间文…
从Spark-1.2.0开始,Spark的Shuffle由Hash Based Shuffle升级成了Sort Based Shuffle.即Spark.shuffle.manager从Hash换成了Sort.不同形式的Shuffle逻辑主要是ShuffleManager的实现类不同. 在org.apache.spark.SparkEnv类中: // Let the user specify short names for shuffle managers val shortShuffleMgr…
Spark Streaming揭秘 Day2 五大核心特征 引子 书接上回,Streaming更像Spark上的一个应用程序,会有多个Job的配合,是最复杂的Spark应用程序.让我们先从特征角度进行理解. 特征1:逻辑管理 DStream是对RDD封装的集合,作用于DStream的操作会对其中每个RDD进行作用,DStream Graph就是RDD Graph的模板,其逻辑管理完全继承RDD的DAG关系. 特征2:时间管理 Spark Streaming的最大特征是引入了时间属性,DStrea…
Spark Tungsten揭秘 Day4 内存和CPU优化使用 今天聚焦于内存和CPU的优化使用,这是Spark2.0提供的关于执行时的非常大的优化部分. 对过去的代码研究,我们会发现,抽象的提高,转过来会变成对CPU和内存的使用.也就是说,抽象提升,会对内存对Cpu会有很多不必要的使用,执行很多无谓的没有实际作用的操作.比如面向接口调用,就是使用了指针的指针,接口这层并没有实际的作用,可以直接跳过. whole-stage code Spark2.x的Tungsten中做了个非常重要的改进,…
Spark Tungsten揭秘 Day3 内存分配和管理内幕 恭喜Spark2.0发布,今天会看一下2.0的源码. 今天会讲下Tungsten内存分配和管理的内幕.Tungsten想要工作,要有数据源和数据结构,这时候会涉及到内存管理,而内存管理也是后续做很多分析和逻辑控制的基础. 内存分配 我们从内存分配的入口MemoryAllocator开始: allocate() 分配的是一块连续干净的内存空间,如果不是干净的话,会先用zero方法,把里面填充为0.我们注意到操作的数据结构都是Memor…
Spark Tungsten揭秘 Day1 jvm下的性能优化 今天开始谈下Tungsten,首先我们需要了解下其背后是符合了什么样的规律. jvm对分布式天生支持 整个Spark分布式系统是建立在分布式jvm基础上的,jvm非常伟大的一点在于把不同机器的计算能力联合起来了,jvm也把不同机器的存储能力连接起来了. jvm是怎么做到这一点的,jvm本身就是一个软件,有自己的通讯方式以及自己的一套协议,在进行java或者scala开发的时候,就支持了一个最重要的设计模式:代理模式,基于代理模式可以…
Spark Streaming揭秘 Day29 深入理解Spark2.x中的Structured Streaming 在Spark2.x中,Spark Streaming获得了比较全面的升级,称为Structured Streaming,和之前的很不同,功能更强大,效率更高,跟其他的组件整合性也更好. 连续应用程序continuous application 首先,也是最重要的,在2.x中,提出了一个叫做continuous applications连续应用程序的概念. 如下图所示,数据从Kaf…
Spark Streaming揭秘 Day35 Spark core思考 Spark上的子框架,都是后来加上去的.都是在Spark core上完成的,所有框架一切的实现最终还是由Spark core来做的.抛开任何具体的东西,现在考虑下Spark core是个什么东西. 解析rdd 程序就是数据+代码.所以首先,我们需要考虑spark core由什么数据结构构成,一共就三种:rdd,broadcast,accumulator,最重要.最核心的是rdd. rdd可以简单的认为是一个数组,只不过是一…