Spark工作原理和流程介绍

Spark相关名词解释:

  • Driver
    主进程,执行了一个Spark Application的main函数和创建Spark Contex的进程

    • 监听属于它这个Spark Application的Executor进程发来的通信和连接
    • Driver还要负责调度整个Spark作业的调度和运行,跟Executor进程通信,给Executor分派计算Task
    • 在Yarn集群中:
      Yarn-Cluster Driver进程在集群的节点上
      Yarn-Client Driver进程存在本地,方便调试,但是会有大量网络传输,不适合生成环境
  • Application
    Spark应用程序,即用户基于Spark API开发的程序,可以通过一个有main方法的类执行的

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

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

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

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

  • Executor
    集群管理器为Application分配的进程,运行在Worker节点上,负责执行作业的任务,并将数据保存在内存或磁盘中,每个Application都有自己的Executor

  • Worker
    集群中可以运行Application代码的节点。在Standalone模式中指的是通过slave文件配置的worker节点,在Spark on Yarn模式中指的就是NodeManager节点

  • Task
    最小工作单元,负责在Executor上面执行并完成一些特定的工作,由Driver发送到Executor上执行的计算单元,每个Task负责在一个阶段(Stage),处理一小片数据,计算出对应的结果

  • 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有哪些Executor为其服务,Driver结束SparkContext初始化,继续执行代码

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

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

  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 Standalone运行原理图

在这里插入图片描述

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任务计算

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值