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

简介:

本节书摘来自华章社区《深入理解Spark:核心思想与源码分析》一书中的第2章,第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之间的依赖关系。

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


95614d98e6c352e95109eef8adb6508384014252

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

相关文章
|
Apache 分布式计算 Spark
Apache Spark Delta Lake 事务日志实现源码分析
Apache Spark Delta Lake 事务日志实现源码分析 我们已经在这篇文章详细介绍了 Apache Spark Delta Lake 的事务日志是什么、主要用途以及如何工作的。那篇文章已经可以很好地给大家介绍 Delta Lake 的内部工作原理,原子性保证,本文为了学习的目的,带领大家从源码级别来看看 Delta Lake 事务日志的实现。
1961 0
|
分布式计算 Java Shell
Spark源码分析之Spark Shell(上)
终于开始看Spark源码了,先从最常用的spark-shell脚本开始吧。不要觉得一个启动脚本有什么东东,其实里面还是有很多知识点的。另外,从启动脚本入手,是寻找代码入口最简单的方法,很多开源框架,其实都可以通过这种方式来寻找源码入口。
901 0
|
分布式计算 Spark Hadoop
Spark MapOutputTracker源码分析
## 技能标签 - Spark ShuffleMapTask处理完成后,把MapStatus数据(BlockManagerId,[compressSize])发送给MapOutputTrackerMaster.
1663 0
|
分布式计算 搜索推荐 Spark
Spark 源码分析之ShuffleMapTask内存数据Spill和合并
- Spark ShuffleMapTask 内存中的数据Spill到临时文件 - 临时文件中的数据是如何定入的,如何按partition升序排序,再按Key升序排序写入(key,value)数据 - 每个临时文件,都存入对应的每个分区有多少个(key,value)对,有多少次流提交数组,数组中...
1776 0
|
分布式计算 Scala Spark
Spark源码分析之ResultTask处理
ResultTask 执行当前分区的计算,首先从ShuffleMapTask拿到当前分区的数据,会从所有的ShuffleMapTask都拿一遍当前的分区数据,然后调用reduceByKey自定义的函数进行计算,最后合并所有的ResultTask输出结果,进行输出
2275 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.
1104 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次印刷之前做了一些勘误。
838 0