1、spark的安装和部署


第二章 安装和部署简单,不说了

===========================

第三章: spark计算模型


blockManager管理rdd的物理分区,每个block就是节点上对应的一个数据块,可以存储在内存或者磁盘上,而rdd中的partition是一个逻辑数据块,对应相应的物理块block

本质上一个rdd在代码中相当于数据的一个元数据结构。 存储着数据分区以及逻辑结构映射关系。 存储着rdd之前的依赖转换关系。


在spark的执行过程中

在物理上,rdd对应实质上是一个元数据结构。存储着block node等的映射关系,以及其他的元数据信息,一个rdd就是一组分区,在物理数据存储上,rdd的每个分区对应的就是一个block,block可以存储在内存中,当内存不够的时候可以存储在磁盘上。

每个block中存储着rdd所有数据项目的一个子集,暴露给用户的可以是一个block的迭代器, 例如:用户可以通过mapPartitions获取分区迭代器进行操作。也可以就是一个数据项例如:通过map函数对每个数据项并行计算,本事会在后面章节具体介绍数据管理的底层实现

从hdfs等外部存储作为输入数据源,数据按照hdfs中的数据分布策略进行数据分区,hdfs中的一个block队员spark的一个分区,同事spark支持重分区,数据通过spark 默认的或者用户自定义的分区器决定数据库分布在那些节点,例如 支持hash分区,按照数据项的key取hash值,hash值相同的放在同一个分区中,和range分区,将属于同一数据范围的数据放入同一分区中,等分区策略

下面具体介绍算子功能。


算子很多,分为三种, transfomation  还有action

第四章:  spark工作机制详解

spark应用提交后精力了一些列的转化,最后成为task在每个节点上执行,spark应用转换,rdd的action算子触发job的提交,提交到spark中的job生成 rdd  dag 由dagscheduler转化为stage dag, 每个stage中产生相应的task集合, taskscheduler将任务分发到executor执行,没给任务对于相应的一个数据快, 使用用户定义的函数处理数据块。


作业执行流程描述如下:

用户启动客户端,之后客户端运行用户程序, 启动drive 进程,在driver中启动或者实例化dagscheduler等组件,客户端的driver想master注册

workder向master注册,master命令workder启动executtoer,worker通过创建 executorrunner线程, 在executorrunner线程内部启动executorbackend进程。

 executorbackend启动后,想客户端driver进程内的schedulerbackernd注册, 这样driver进程就能找到计算资源, deirver 的dagcheduler解析应用中的rdd  dag并生成相应的stage ,每个stage包含的taskset 通过taskscheduler分配给executor,在 executor内部启动线程池 并行化执行 task

调度:

application调度,job调度,stage的调度,task的调度

不同的模式有不同的调度策略

standalone,默认情况下,用户向以standalone模式运行的spark集群提交引用使用fifo 的额顺序进行调度。

mesos

yarn

三种运行模式都不能提供跨应用的共享内存。

fifo的调度代码

还有fair调度方式