Spark 运行机制
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上去执行
执行流程
- 执行 spark-submit 命令, 启动 driver 进程
- Driver 进程启动后,会做一些初始化的操作,主要是构造出 DAGScheduler 和 TaskScheduler
- 初始化过程中,TaskScheduler 会发送请求到 Master 节点上,进行 Spark 程序的注册,通俗的说,就是通知 Master 有一个新的程序要运行
- Master 在接收到注册申请之后,会发送请求给 Worker, 进行资源(Executor)的调度和分配
- Worker 接收到 Master 的请求之后,会为 Spark 程序启动 Executor
- Executor 启动之后, 会向 Driver 上的 TaskScheduler 进行反注册,通俗的说,就是告诉 Driver 有哪些 Executor 会为它服务
- Driver 注册了一些 Executor 之后,就会结束初始化,并开始执行编写的 Spark 程序
- 程序运行第一步,就是读取数据源(HDFS/Hive/kafka),创建初始RDD.
- 数据源被读取到多个 Worker 节点上,形成内存中的分布式数据集,也就是初始 RDD
- 继续执行代码,每执行到一个 action 操作, 就会创建一个 job, 并将 job 提交给 DAGScheduler
- DAGScheduler 根据 stage 划分算法, 将 job 划分为一个或多个 stage, 为每个 stage 创建一个 TaskSet 并提交给 TaskScheduler
- TaskScheduler 根据 task 分配算法,把 task 提交给 Executor
- Executor 接收到 task 之后,就会启动多个 Task 进程执行 task
- Task 会对 RDD 的 partition 数据进行算子操作,形成新的RDD
说明
- 每个spark application,都有属于自己的 executor进程, 不可能出现多个spark aplication共享一个executor进程,executor进程,在整个spark application运行的生命周期内,都会一直存在,不会自己消失.executor进程,最主要的,就是使用多线程的方式,运行SparkContext分配过来的task,来一批task就执行一批,一批执行完了,再换下一批task执行
- spark application,跟集群管理器之间,是透明的,不管是哪个集群管理器,只要可以申请到executor进程就可以了,
- driver 进程必须时刻监听着属于它这个spark application 的 executor进程发来的通信和连接,而且driver除了监听,自己也得负责调度整个spark作业的调度和运行,也得大量跟executor进程通信,给它们分派计算任务
- 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" 转载请保留原文链接及作者。