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的job是如何划分的 spark工作_spark的job是如何划分的

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