
Spark技术内幕
文章平均质量分 77
通过Spark的源码分析,理解Spark的设计理念,系统架构。从而为Spark的二次开发,社区贡献和性能调优奠定理论基础。
anzhsoft
程序猿一枚毕业于南开工作于上海。喜欢读书,喜欢跑步,激情似火,心静如水。喜欢编程,喜欢寻根问底各种技术,在各种新技术中汲取营养。喜欢分享,因此以一些高质量的博文来回报各位可爱可敬的程序猿们
展开
-
Spark技术内幕:Storage 模块整体架构
Storage模块负责了Spark计算过程中所有的存储,包括基于Disk的和基于Memory的。用户在实际编程中,面对的是RDD,可以将RDD的数据通过调用org.apache.spark.rdd.RDD#cache将数据持久化;持久化的动作都是由Storage模块完成的。包括Shuffle过程中的数据,也都是由Storage模块管理的。可以说,RDD实现了用户的逻辑,而Storage则管理了用户原创 2015-01-18 19:13:13 · 17786 阅读 · 19 评论 -
Spark技术内幕:Shuffle的性能调优
通过上面的架构和源码实现的分析,不难得出Shuffle是Spark Core比较复杂的模块的结论。它也是非常影响性能的操作之一。因此,在这里整理了会影响Shuffle性能的各项配置。尽管大部分的配置项在前文已经解释过它的含义,由于这些参数的确是非常重要,这里算是做一个详细的总结。1.1.1 spark.shuffle.manager前文也多次提到过,Spark1.2.0官方支持两种方式的Shuf原创 2015-01-18 19:09:28 · 27139 阅读 · 6 评论 -
Spark技术内幕:Shuffle Map Task运算结果的处理
Shuffle Map Task运算结果的处理这个结果的处理,分为两部分,一个是在Executor端是如何直接处理Task的结果的;还有就是Driver端,如果在接到Task运行结束的消息时,如何对Shuffle Write的结果进行处理,从而在调度下游的Task时,下游的Task可以得到其需要的数据。Executor端的处理在解析BasicShuffle Writer时,我们知道ShuffleM原创 2015-01-12 08:02:16 · 19447 阅读 · 12 评论 -
Spark技术内幕:Shuffle Read的整体流程
本文详细讲解Shuffle Read的整个过程,包括如何获得Block的元数据信息,进行网络,本地读取。通过一个整体的流程架构图,详细大家可以对整个过程有一个更加深刻的把握原创 2015-01-12 08:07:31 · 23072 阅读 · 16 评论 -
Spark技术内幕: 如何解决Shuffle Write一定要落盘的问题?
在Spark 0.6和0.7时,Shuffle的结果都需要先存储到内存中(有可能要写入磁盘),因此对于大数据量的情况下,发生GC和OOM的概率非常大。因此在Spark 0.8的时候,Shuffle的每个record都会直接写入磁盘。一直到1.2.0,Shuffle的数据是一定会写入本地文件系统的,那么对于性能要求非常苛刻的用户,如何获得更好的性能呢?原创 2015-01-11 15:13:24 · 20562 阅读 · 8 评论 -
Spark技术内幕:Shuffle Pluggable框架详解,你怎么开发自己的Shuffle Service?
通过Hash Based Shuffle和Sort Based Shuffle的源码,可以得出使用Spark Pluggable框架开发一个第三方的Shuffle Service是比较容易的;这个容易是指功能实现方面。但是这个实现必须要考虑超大规模数据场景下的性能问题,资源消耗问题。原创 2015-01-08 07:58:40 · 16264 阅读 · 5 评论 -
Spark技术内幕:Sort Based Shuffle实现解析
在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。那么Sort BasedShuffle“取代”Hash BasedS原创 2015-01-05 07:29:53 · 19154 阅读 · 7 评论 -
What’s new in Spark 1.2.0
1.2.0 was released on 12/18, 2014在2014年5月30日发布了Spark 1.0 和9月11日发布了Spark1.1.后,Spark 1.2 终于在12月18日发布。作为1.X时代的第三个release,它有什么重要更新呢?原创 2014-12-23 07:42:40 · 4506 阅读 · 0 评论 -
2014 BDTC 参会有感
中国大数据技术大会(Big Data Technology Conference,BDTC)是目前国内最具影响、规模最大的大数据领域的技术盛会。大会的前身是Hadoop中国云计算大会(Hadoop in China,HiC)。从2008年仅60人参加的技术沙龙到当下的数千人技术盛宴,作为业内极具实战价值的专业交流平台,已经成功举办七届的中国大数据技术大会忠实地描绘了大数据领域内的技术热点,沉淀了行业实战经验,见证了整个大数据生态圈技术的发展与演变。原创 2014-12-19 07:28:33 · 5344 阅读 · 10 评论 -
Spark技术内幕: Shuffle详解(三)
前两篇文章写了Shuffle Read的一些实现细节。但是要想彻底理清楚这里边的实现逻辑,还是需要更多篇幅的;本篇开始,将按照Job的执行顺序,来讲解Shuffle。即,结果数据(ShuffleMapTask的结果和ResultTask的结果)是如何产生的;结果是如何处理的;结果是如何读取的。原创 2014-12-07 20:46:13 · 6574 阅读 · 3 评论 -
Spark技术内幕: Shuffle详解(二)
本文主要关注ShuffledRDD的Shuffle Read是如何从其他的node上读取数据的。上文讲到了获取如何获取的策略都在org.apache.spark.storage.BlockFetcherIterator.BasicBlockFetcherIterator#splitLocalRemoteBlocks中。可以见注释。原创 2014-11-30 18:18:57 · 19048 阅读 · 7 评论 -
Spark技术内幕: Shuffle详解(一)
通过上面一系列文章,我们知道在集群启动时,在Standalone模式下,Worker会向Master注册,使得Master可以感知进而管理整个集群;Master通过借助ZK,可以简单的实现HA;而应用方通过SparkContext这个与集群的交互接口,在创建SparkContext时就完成了Application的注册,Master为其分配Executor;在应用方创建了RDD并且在这个RDD上进行了很多的Transformation后,触发action,通过DAGScheduler将DAG划分为不同的St原创 2014-11-29 21:39:15 · 20934 阅读 · 16 评论 -
Spark技术内幕: Task向Executor提交的源码解析
在上文《Spark技术内幕:Stage划分及提交源码分析》中,我们分析了Stage的生成和提交。但是Stage的提交,只是DAGScheduler完成了对DAG的划分,生成了一个计算拓扑,即需要按照顺序计算的Stage,Stage中包含了可以以partition为单位并行计算的Task。我们并没有分析Stage中得Task是如何生成并且最终提交到Executor中去的。这就是本文的主题。原创 2014-10-19 18:16:57 · 22398 阅读 · 14 评论 -
Spark技术内幕:Stage划分及提交源码分析
在一个RDD触发了一个action(比如count,collect)时,任务是如何被提交到?什么是Stage?DAGScheduler的作用是什么?它是如何划分Stage的?本文将基于源码,进行深入分析。原创 2014-10-18 23:05:22 · 28935 阅读 · 28 评论 -
Spark技术内幕:究竟什么是RDD
RDD是Spark最基本,也是最根本的数据抽象。http://www.cs.berkeley.edu/~matei/papers/2012/nsdi_spark.pdf 是关于RDD的论文。如果觉得英文阅读太费时间,可以看这篇译文:http://shiyanjun.cn/archives/744.html 本文也是基于这篇论文和源码,分析RDD的实现。第一个问题,RDD是什么?Resilient Distributed Datasets(RDD,) 弹性分布式数据集。RDD是只读的、分区记录的集合。RD原创 2014-10-07 17:34:53 · 32849 阅读 · 5 评论 -
Spark技术内幕:Master的故障恢复
使用ZK作为HA方案的Master是如何快速故障恢复的呢?本文为你详细解读。最后给出的流程图,可以清楚的理解恢复过程的数据流程和处理逻辑。原创 2014-10-05 03:45:15 · 13004 阅读 · 9 评论 -
Spark技术内幕:Executor分配详解
当用户应用new SparkContext后,集群就会为在Worker上分配executor,那么这个过程是什么呢?本文以Standalone的Cluster为例,详细的阐述这个过程。原创 2014-10-05 01:02:19 · 43002 阅读 · 30 评论 -
Spark技术内幕之任务调度:从SparkContext开始
SparkContext是开发Spark应用的入口,它负责和整个集群的交互,包括创建RDD,accumulators and broadcast variables。理解Spark的架构,需要从这个入口开始。原创 2014-10-01 21:17:33 · 17196 阅读 · 1 评论 -
Spark 1.0 开发环境构建:maven/sbt/idea
主要包含使用maven和sbt编译spark源码。还有配置idea等。原创 2014-09-07 00:21:13 · 12310 阅读 · 1 评论 -
Spark技术内幕:Worker源码与架构解析
Worker所起的作用有以下几个:1. 接受Master的指令,启动或者杀掉Executor2. 接受Master的指令,启动或者杀掉Driver3. 报告Executor/Driver的状态到Master4. 心跳到Master,心跳超时则Master认为Worker已经挂了不能工作了5. 向GUI报告Worker的状态原创 2014-08-04 21:49:29 · 16131 阅读 · 16 评论 -
从Storm和Spark 学习流式实时分布式计算的设计
最近我在做流式实时分布式计算系统的架构设计,而正好又要参见优快云博文大赛的决赛。本来想就写Spark源码分析的文章吧。但是又想毕竟是决赛,要拿出一些自己的干货出来,仅仅是源码分析貌似分量不够。因此,我将最近一直在做的系统架构的思路整理出来,形成此文。为什么要参考Storm和Spark,因为没有参照效果可能不会太好,尤其是对于Storm和Spark由了解的同学来说,可能通过对比,更能体会到每个具体实现背后的意义。本文对流式系统出现的背景,特点,数据HA,服务HA,节点间和计算逻辑间的消息传递,存储模型,原创 2014-08-02 17:06:51 · 46910 阅读 · 18 评论 -
Spark技术内幕:一个图搞定Spark到底有多少行代码
Spark1.0.0发布一个多月了,那么它有多少行代码(Line of Code, LOC)?原创 2014-06-30 17:04:54 · 24258 阅读 · 5 评论 -
Spark技术内幕:Master基于ZooKeeper的High Availability(HA)源码实现
本文详细讲解了Spark在Standalone模式下的Master的HA的源码分析。为了解决Standalone模式下的Master的SPOF,Spark采用了ZooKeeper提供的选举功能。Spark并没有采用ZooKeeper原生的Java API,而是采用了Curator,一个对ZooKeeper进行了封装的框架。采用了Curator后,Spark不用管理与ZooKeeper的连接,这些对于Spark来说都是透明的。Spark仅仅使用了100行代码,就实现了Master的HA。当然了,Spark是原创 2014-06-24 20:25:39 · 33150 阅读 · 10 评论 -
Spark技术内幕:Client,Master和Worker 通信源码解析
本文分析了Spark1.0.0的Client,Master和Worker之间是如何通信的。通过对通信的分析,可以清楚的理解各个角色的作用和责任,和它在集群中扮演的不同角色。当然了,为了便于源码分析,本文开始分析了akka,一个非常优秀的actor的实现:高性能,易于编程,可扩展和弹性无中心。原创 2014-06-17 21:43:06 · 35245 阅读 · 15 评论 -
Spark:大数据的电花火石!
Apache Spark™is a fast and general engine for large-scale data processing: 一种快速通用可扩展的数据分析引擎。如果想要搞清楚Spark是什么,那么我们需要知道它解决了什么问题,还有是怎么解决这些问题的。本文将带领你进入Spark的世界,首先阐述了为什么Spark能够在众多的大数据分析平台中脱颖而出:通用,易用,高性能和与Hadoop的有效整合。Spark All in One的解决方案使用一个通用栈解决了流式,交互式,实时查询,迭代原创 2014-06-13 23:19:10 · 29973 阅读 · 23 评论