现在的位置: 首页 > 综合 > 正文

spark学习一 基本概念理解

2018年03月21日 ⁄ 综合 ⁄ 共 2087字 ⁄ 字号 评论关闭

基本概念(Basic Concepts)

RDD - resillientdistributed dataset 弹性分布式数据集

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

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

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

Partition - 数据分区,一个RDD中的数据可以分成多个不同的区

DAG - DirectedAcycle graph, 有向无环图,反应RDD之间的依赖关系

Narrowdependency - 窄依赖,子RDD依赖于父RDD中固定的data partition

Wide Dependency- 宽依赖,子RDD对父RDD中的所有data partition都有依赖

CachingManagenment -- 缓存管理,对RDD的中间计算结果进行缓存管理以加快整体的处理速度

编程模型(Programming Model)

RDD是只读的数据分区集合,注意是数据集

作用于RDD上的Operation分为transformantionactionTransformation处理之后,数据集中的内容会发生更改,由数据集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是一个个的进程,workerdriver来进行管理。

那么问题来了,这一个个的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由以下几个主要部分组成

1.   partitions --   partition集合,一个RDD中有多少data partition

2.   dependencies -- RDD依赖关系

3.   compute(parition) --对于给定的数据集,需要作哪些计算

4.   preferredLocations -- 对于data partition的位置偏好

5.   partitioner --对于计算出来的数据结果如何分发

缓存机制(caching)

RDD的中间计算结果可以被缓存起来,缓存先选Memory,如果Memory不够的话,将会被写入到磁盘中。

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

容错性(Fault-tolerant)

从最初始的RDD到衍生出来的最后一个RDD,中间要经过一系列的处理。那么如何处理中间环节出现错误的场景呢?

Spark提供的解决方案是只对失效的data partition进行事件重演,而无须对整个数据全集进行事件重演,这样可以大大加快场景恢复的开销。

RDD又是如何知道自己的data partitionnumber该是多少?如果是hdfs文件,那么hdfs文件的block将会成为一个重要的计算依据。

集群管理(cluster management)

task运行在cluster之上,除了spark自身提供的standalone部署模式之外,spark还内在支持yarnmesos.

Yarn来负责计算资源的调度和监控,根据监控结果来重启失效的task或者是重新distributed task一旦有新的node加入cluster的话。

这一部分的内容需要参考yarn的文档。

 

抱歉!评论已关闭.