Spark 运行机制

  1. 角色
  2. 执行流程
  3. 说明

Spark 程序运行顺序及说明

角色

  • Application: spark应用程序,就是根据 spark api 写的代码
  • Driver: 就是集群中提交 Spark 程序的节点上的一个进程
  • DAGScheduler: 根据编写的程序代码建立DAG(又向无环图), 且将DAG划分为多个执行阶段(stage)
  • TaskScheduler: 主要负责与 Master 和 Executor 进行通讯,向 Executor 发送 task
  • Master: 负责资源调度和分配,还有集群监控的进程
  • Worker: 工作节点,负责启动 Executor 进程,并对 RDD 上的 Partition进行处理和计算
  • Executor: 集群管理器为application在worker上分配的进程, 负责并行执行对 RDD 定义的算子操作, 并将数据保存在内存或磁盘中,每个 application 都有自己的 executor
  • Task: Executor 进程下的线程
  • task: Driver 发送给 Executor 要执行的任务
  • Job: 每个spark application,根据执行了多少次action操作,就会有多少个job
  • Stage: 每个job都会划分为多个stage(阶段),每个stage都会有对应的一批task,分配到executor上去执行

执行流程

  1. 执行 spark-submit 命令, 启动 driver 进程
  2. Driver 进程启动后,会做一些初始化的操作,主要是构造出 DAGScheduler 和 TaskScheduler
  3. 初始化过程中,TaskScheduler 会发送请求到 Master 节点上,进行 Spark 程序的注册,通俗的说,就是通知 Master 有一个新的程序要运行
  4. Master 在接收到注册申请之后,会发送请求给 Worker, 进行资源(Executor)的调度和分配
  5. Worker 接收到 Master 的请求之后,会为 Spark 程序启动 Executor
  6. Executor 启动之后, 会向 Driver 上的 TaskScheduler 进行反注册,通俗的说,就是告诉 Driver 有哪些 Executor 会为它服务
  7. Driver 注册了一些 Executor 之后,就会结束初始化,并开始执行编写的 Spark 程序
  8. 程序运行第一步,就是读取数据源(HDFS/Hive/kafka),创建初始RDD.
  9. 数据源被读取到多个 Worker 节点上,形成内存中的分布式数据集,也就是初始 RDD
  10. 继续执行代码,每执行到一个 action 操作, 就会创建一个 job, 并将 job 提交给 DAGScheduler
  11. DAGScheduler 根据 stage 划分算法, 将 job 划分为一个或多个 stage, 为每个 stage 创建一个 TaskSet 并提交给 TaskScheduler
  12. TaskScheduler 根据 task 分配算法,把 task 提交给 Executor
  13. Executor 接收到 task 之后,就会启动多个 Task 进程执行 task
  14. Task 会对 RDD 的 partition 数据进行算子操作,形成新的RDD

说明

  1. 每个spark application,都有属于自己的 executor进程, 不可能出现多个spark aplication共享一个executor进程,executor进程,在整个spark application运行的生命周期内,都会一直存在,不会自己消失.executor进程,最主要的,就是使用多线程的方式,运行SparkContext分配过来的task,来一批task就执行一批,一批执行完了,再换下一批task执行
  2. spark application,跟集群管理器之间,是透明的,不管是哪个集群管理器,只要可以申请到executor进程就可以了,
  3. driver 进程必须时刻监听着属于它这个spark application 的 executor进程发来的通信和连接,而且driver除了监听,自己也得负责调度整个spark作业的调度和运行,也得大量跟executor进程通信,给它们分派计算任务
  4. driver要调度task给executor执行,所以driver在网络环境中的位置尽量离spark集群得近一些,driver最好和spark集群在一片网络内

文章标题:Spark 运行机制

文章字数:886

本文作者:Waterandair

发布时间:2017-12-25, 11:20:47

最后更新:2019-12-28, 14:03:59

原始链接:https://waterandair.github.io/2017-12-25-spark-operating-mechanism.html

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏

github