spark工作原理和流程介绍

Spark相关名词解释:

  • Driver
    主进程,执行了一个Spark Application的main函数和创建Spark Contex的进程
    在Yarn集群中:
    Yarn-Cluster Driver进程在集群的节点上
    Yarn-Client Driver进程存在本地,方便调试,但是会有大量网络传输,不适合生成环境

  • SparkContext
    负责和集群通讯,申请资源,监控集群任务状态

  • Partition
    RDD数据量很大,通常需要分区,一般每个机器节点可以作为一个分区,每个分区一个Task(线程)
    分区数量一般等于CPU core数量

  • Job
    每次执行一个action操作产生一个job,Spark Application中的每个action会被Spark作为Job进行调度

  • Stage
    每个Job是一个计算序列的最终结果,而这个序列中能够产生中间结果的计算就是一个stage

  • Executor
    执行进程,负责在各个节点执行Task

  • Task
    最小工作单元,负责在Executor上面执行并完成一些特定的工作

  • RDD
    分布式弹性数据集,Java对象的集合
    RDD在转换和执行之间存在血统关系(Lineage), DAG (有向无环图)
    宽依赖 : 一个或者多个父RDD分区对应一个子RDD分区
    窄依赖 : 多个父RDD分区对应一个子RDD分区

  • DataFrame
    有结构的分布式弹性数据集,用来处理结构化数据,SparkSql基于DataFrame处理数据

  • Shuffle
    将集群多个节点的key拉到同一个节点进行聚合操作,比如reduceByKey、join、distinct、repartition会触发shuffle算子操作,分区之间的数据交互其实就是shuffle

Spark工作流程

1.使用Spark-submit提交代码至服务器上

2.创建SparkContext,在SparkContext初始化的时候会创建DAGScheduler和TaskScheduler

3.TaskScheduler会启动一个后台进程去集群Master注册Application,申请任务资源,比如CPU,内存等等

4.Master接收注册请求后会利用自己的资源调度算法,在Spark集群的worker上,为Application启动多个Executor

5.worker会启动Executor,Executor会反向注册到Driver上,Driver结束SparkContext初始化,继续执行代码

6.每次执行到一个action算子,就会创建一个job,同时job会被提交到DAGScheduler

7.DAGScheduler会使用划分算法,将job划分成多个stage,然后每个stage都会创建一个TaskSet,划分stage依据是分区间有无数据交互,也就是Shuffle过程

8.TaskScheduler会把TaskSet中的task通过task分配算法提交到Executor上运行,遵循"计算向数据靠拢",TaskScheduler会根据节点上的数据,将对于的任务丢到该节点上。

9.Executor会创建线程池执行task,每个都会task被封装成TaskRunner.

10.Task有两种,ShuffleMapTask和ResultTask,只有最后一个stage使用resultTask,也就是触发action才会返回结果

11.Spark应用的执行就是stage分批次提交TaskSet到Executor,每个Task针对RDD的一个partition,执行定义的算子,直到所有问题完成

Spark算子

1.TransForm

操作 含义
filter(func) 筛选出满足函数func的元素, 并返回一个新的数据集
map(func) 将每个元素传递到函数func中, 并将结果返回为一个的数集
flatMap(func) 与map()相似, 但每个输入元素都可以映射到0或多个输出结果
groupByKey(func) 应用于(K,V)键值对的数据集时, 返回一个新的(K,Iterable)形式的数据集
reduceByKey(func) 应用于(K,V)键值对的数据集时, 返回一个新的(K,V)形式的数据集, 其中每个值是将每个key传递到函数func中进行聚合后的结果

2.Action

操作 含义
count 返回数据集元素个数
collect() 以数组形式返回数据集所有元素
first() 返回数据集第一个元素
take(n) 以数组形式返回数据集前n个元素
reduce(func) 聚合数据集中元素
foreach(func) 将数据集中元素传递到函数func中运行

熟练掌握

3.惰性机制
只有Action操作才会触发Spark任务计算

猜你喜欢

转载自blog.csdn.net/LJJZJ/article/details/86315087