深入理解Spark:核心思想与源码分析. 2.2 Spark基础知识

简介:

2.2 Spark基础知识

1.版本变迁

经过4年多的发展,Spark目前的版本是1.4.1。我们简单看看它的版本发展过程。

1)Spark诞生于UCBerkeley的AMP实验室(2009)。

2)Spark正式对外开源(2010年)。

3)Spark 0.6.0版本发布(2012-10-15),进行了大范围的性能改进,增加了一些新特性,并对Standalone部署模式进行了简化。

4)Spark 0.6.2版本发布(2013-02-07),解决了一些bug,并增强了系统的可用性。

5)Spark 0.7.0版本发布(2013-02-27),增加了更多关键特性,例如,Python API、Spark Streaming的alpha版本等。

6)Spark 0.7.2版本发布(2013-06-02),性能改进并解决了一些bug,新增API使用的例子。

7)Spark接受进入Apache孵化器(2013-06-21)。

8)Spark 0.7.3版本发布(2013-07-16),解决一些bug,更新Spark Streaming API等。

9)Spark 0.8.0版本发布(2013-09-25),一些新功能及可用性改进。

10)Spark 0.8.1版本发布(2013-12-19),支持Scala 2.9、YARN 2.2、Standalone部署模式下调度的高可用性、shuffle的优化等。

11)Spark 0.9.0版本发布(2014-02-02),增加了GraphX,机器学习新特性,流式计算新特性,核心引擎优化(外部聚合、加强对YARN的支持)等。

12)Spark 0.9.1版本发布(2014-04-09),增强使用YARN的稳定性,改进Scala和Python API的奇偶性。

13)Spark 1.0.0版本发布(2014-05-30),Spark SQL、MLlib、GraphX和Spark Streaming都增加了新特性并进行了优化。Spark核心引擎还增加了对安全YARN集群的支持。

14)Spark 1.0.1版本发布(2014-07-11),增加了Spark SQL的新特性和对JSON数据的支持等。

15)Spark 1.0.2版本发布(2014-08-05),Spark核心API及Streaming、Python、MLlib的bug修复。

16)Spark 1.1.0版本发布(2014-09-11)。

17)Spark 1.1.1版本发布(2014-11-26),Spark核心API及Streaming、Python、SQL、GraphX和MLlib的bug修复。

18)Spark 1.2.0版本发布(2014-12-18)。

19)Spark 1.2.1版本发布(2015-02-09),Spark核心API及Streaming、Python、SQL、GraphX和MLlib的bug修复。

20)Spark 1.3.0版本发布(2015-03-13)。

21)Spark 1.4.0版本发布(2015-06-11)。

22)Spark 1.4.1版本发布(2015-07-15),DataFrame API及Streaming、Python、SQL和MLlib的bug修复。

2.基本概念

要想对Spark有整体性的了解,推荐读者阅读Matei Zaharia的Spark论文。此处笔者先介绍Spark中的一些概念:

RDD(resillient distributed dataset):弹性分布式数据集。

Task:具体执行任务。Task分为ShuffleMapTask和ResultTask两种。ShuffleMapTask和ResultTask分别类似于Hadoop中的Map和Reduce。

Job:用户提交的作业。一个Job可能由一到多个Task组成。

Stage:Job分成的阶段。一个Job可能被划分为一到多个Stage。

Partition:数据分区。即一个RDD的数据可以划分为多少个分区。

NarrowDependency:窄依赖,即子RDD依赖于父RDD中固定的Partition。Narrow-Dependency分为OneToOneDependency和RangeDependency两种。

ShuffleDependency:shuffle依赖,也称为宽依赖,即子RDD对父RDD中的所有Partition都有依赖。

DAG(directed acycle graph):有向无环图。用于反映各RDD之间的依赖关系。

3. Scala与Java的比较

Spark为什么要选择Java作为开发语言?笔者不得而知。如果能对二者进行比较,也许能看出一些端倪。表2-1列出了Scala与Java的比较。

表2-1 Scala与Java的比较

比项项     Scala         Java

语言类型          面向函数为主,兼有面向对象         面向对象(Java8也增加了lambda函数编程)

简洁性      非常简洁     不简洁

类型推断          丰富的类型推断,例如深度和链式的类型推断、 duck type、隐式类型转换等,但也因此增加了编译时长         少量的类型推断

可读性      一般,丰富的语法糖导致的各种奇幻用法,例如方法签名         好

学习成本          较高     一般

语言特性          非常丰富的语法糖和更现代的语言特性,例如 Option、模式匹配、使用空格的方法调用    丰富

并发编程          使用Actor的消息模型      使用阻塞、锁、阻塞队列等

 

通过以上比较似乎仍然无法判断Spark选择Java作为开发语言的原因。由于函数式编程更接近计算机思维,因此便于通过算法从大数据中建模,这应该更符合Spark作为大数据框架的理念吧!

相关文章
|
Apache 分布式计算 Spark
Apache Spark Delta Lake 事务日志实现源码分析
Apache Spark Delta Lake 事务日志实现源码分析 我们已经在这篇文章详细介绍了 Apache Spark Delta Lake 的事务日志是什么、主要用途以及如何工作的。那篇文章已经可以很好地给大家介绍 Delta Lake 的内部工作原理,原子性保证,本文为了学习的目的,带领大家从源码级别来看看 Delta Lake 事务日志的实现。
1960 0
|
分布式计算 Java Shell
Spark源码分析之Spark Shell(上)
终于开始看Spark源码了,先从最常用的spark-shell脚本开始吧。不要觉得一个启动脚本有什么东东,其实里面还是有很多知识点的。另外,从启动脚本入手,是寻找代码入口最简单的方法,很多开源框架,其实都可以通过这种方式来寻找源码入口。
899 0
|
分布式计算 Spark Hadoop
Spark MapOutputTracker源码分析
## 技能标签 - Spark ShuffleMapTask处理完成后,把MapStatus数据(BlockManagerId,[compressSize])发送给MapOutputTrackerMaster.
1662 0
|
分布式计算 搜索推荐 Spark
Spark 源码分析之ShuffleMapTask内存数据Spill和合并
- Spark ShuffleMapTask 内存中的数据Spill到临时文件 - 临时文件中的数据是如何定入的,如何按partition升序排序,再按Key升序排序写入(key,value)数据 - 每个临时文件,都存入对应的每个分区有多少个(key,value)对,有多少次流提交数组,数组中...
1774 0
|
分布式计算 Scala Spark
Spark源码分析之ResultTask处理
ResultTask 执行当前分区的计算,首先从ShuffleMapTask拿到当前分区的数据,会从所有的ShuffleMapTask都拿一遍当前的分区数据,然后调用reduceByKey自定义的函数进行计算,最后合并所有的ResultTask输出结果,进行输出
2274 0
|
分布式计算 Shell Scala
Spark源码分析之ShuffleMapTask处理
Spark源码分析之ShuffleMapTask处理,在map端对数据的处理源码分析
1668 0
|
分布式计算 Apache Spark
Spark Master启动源码分析
Spark Master启动源码分析 更多资源 github: https://github.com/opensourceteams/spark-scala-maven csdn(汇总视频在线看): https://blog.
947 0
|
分布式计算 Spark
Spark Worker启动源码分析
Spark Worker启动源码分析 更多资源 github: https://github.com/opensourceteams/spark-scala-maven csdn(汇总视频在线看): https://blog.
1103 0
|
分布式计算 Spark
Spark Executor启动源码分析
Spark CoarseGrainedExecutorBackend启动源码分析 更多资源 github: https://github.
1375 0
|
存储 分布式计算 Spark
《深入理解Spark:核心思想与源码分析》2次印刷修订内容清单
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/beliefer/article/details/51657146 前言 自从《深入理解Spark:核心思想与源码分析》一书出版以来,陆续收到很多读者的反馈,笔者为此在第1版第2次印刷之前做了一些勘误。
837 0