深入理解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作为大数据框架的理念吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值