Apache Spark源码走读之1ITeye - AG环亚娱乐集团

Apache Spark源码走读之1ITeye

2019年03月10日08时09分34秒 | 作者: 浩思 | 标签: 源码,一个,数据 | 浏览: 1760

源码阅览是一件十分简单的事,也是一件十分难的事。简单的是代码就在那里,一翻开就能够看到。难的是要通过代码理解作者最初为什么要这样规划,规划之初要处理的首要问题是什么。

在对Spark的源码进行具体的走读之前,假如想要快速对Spark的有一个全体性的知道,阅览Matei Zaharia做的Spark论文是一个十分不错的挑选。

在阅览该论文的根底之上,再结合Spark作者在2012 Developer Meetup上做的讲演Introduction to Spark Internals,那么关于Spark的内部完成会有一个比较大约的了解。

有了上述的两篇文章奠定根底之后,再来进行源码阅览,那么就会知道剖析的要点及难点。

基本概念(Basic Concepts)

RDD - resillient distributed dataset 弹性分布式数据集

Operation - 作用于RDD的各种操作分为transformation和action

Job - 作业,一个JOB包括多个RDD及作用于相应RDD上的各种operation

Stage - 一个作业分为多个阶段

Partition - 数据分区, 一个RDD中的数据能够分红多个不同的区

DAG - Directed Acycle graph, 有向无环图,反响RDD之间的依靠联系

Narrow dependency - 窄依靠,子RDD依靠于父RDD中固定的data partition

Wide Dependency - 宽依靠,子RDD对父RDD中的一切data partition都有依靠

Caching Managenment 缓存办理,对RDD的中心核算成果进行缓存办理以加速全体的处理速度

编程模型(Programming Model)

RDD是只读的数据分区调集,留意是数据集。

作用于RDD上的Operation分为transformantion和action。 经Transformation处理之后,数据会集的内容会发作更改,由数据集A转化成为数据集B;而经Action处理之后,数据会集的内容会被归约为一个具体的数值。

只有当RDD上有action时,该RDD及其父RDD上的一切operation才会被提交到cluster中真实的被执行。

从代码到动态运转,涉及到的组件如下图所示。

 

演示代码

val sc = new SparkContext("Spark://...", "MyJob", home, jars)
val file = sc.textFile("hdfs://...")
val errors = file.filter(_.contains("ERROR"))
errors.cache()
errors.count()
运转态(Runtime view)

不论什么样的静态模型,其在动态运转的时分无外乎由进程,线程组成。

用Spark的术语来说,static view称为dataset view,而dynamic view称为parition view. 联系如图所示

 

在Spark中的task能够对应于线程,worker是一个个的进程,worker由driver来进行办理。

那么问题来了,这一个个的task是怎么从RDD演化过来的呢?下节将具体答复这个问题。

布置(Deployment view)

当有Action作用于某RDD时,该action会作为一个job被提交。

在提交的过程中,DAGScheduler模块介入运算,核算RDD之间的依靠联系。RDD之间的依靠联系就形成了DAG。

每一个JOB被分为多个stage,区分stage的一个首要依据是当时核算因子的输入是否是断定的,假如是则将其分在同一个stage,防止多个stage之间的音讯传递开支。

当stage被提交之后,由taskscheduler来依据stage来核算所需求的task,并将task提交到对应的worker.

Spark支撑以下几种布置形式1)standalone 2)Mesos 3) yarn. 这些布置形式将作为taskscheduler的初始化入参。

RDD接口(RDD Interface)

RDD由以下几个首要部分组成

partitions     partition调集,一个RDD中有多少data partition dependencies RDD依靠联系 compute(parition) 关于给定的数据集,需求作哪些核算 preferredLocations   关于data partition的方位偏好 partitioner 关于核算出来的数据成果怎么分发 缓存机制(caching)

RDD的中心核算成果能够被缓存起来,缓存先选Memory,假如Memory不行的话,将会被写入到磁盘中。

依据LRU(last-recent update)来决议哪先内容持续保存在内存,哪些保存到磁盘。

容错性(Fault-tolerant)

从最初始的RDD到衍生出来的最终一个RDD,中心要通过一系列的处理。那么怎么处理中心环节呈现过错的场景呢?

Spark供给的处理方案是只对失效的data partition进行事情重演,而无须对整个数据全集进行事情重演,这样能够大大加速场景康复的开支。

RDD又是怎么知道自己的data partition的number该是多少?假如是hdfs文件,那么hdfs文件的block将会成为一个重要的核算依据。

集群办理(cluster management)

task运转在cluster之上,除了spark本身供给的standalone布置形式之外,spark还内涵支撑yarn和mesos.

Yarn来担任核算资源的调度和监控,依据监控成果来重启失效的task或者是从头distributed task一旦有新的node参加cluster的话。

这一部分的内容需求参阅yarn的文档。

在源码阅览时,需求要点掌握以下两大主线。

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表AG环亚娱乐集团立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章