Spark架构原理浅析
Spark架构原理分析
关键词的作用
Application: 指的是用户编写的Spark应用程序,包含了Driver代码和分布在集群中的多个节点运行的Executor代码
Driver Program: 驱动程序,就是运行Application的main()函数并且创建SparkContext.
SparkContext: 准备Spark运行环境;与Cluster Manager进行通信;资源申请;任务分配与监控;与此同时构建DAG图->DAGScheduler(将DAG图分解成stage)->TaskScheduler(监控并且提交Task到Executor中)
Cluster Manager: 集群资源管理器。主要是把WorkerNode上RDD存储在的资源分配给SparkContext
Worker Node: 集群中任何可以运行Application代码的节点。内部包含了Executor
Executor: 执行器.是某个Application运行在worker节点上的一个进程
Job: 包含多个Task组成的并行计算。通常是由action触发生成,一个Application往往会产生多个Job
Task: 一个Task处理RDD的一个分区,task是被送到某个Executor上的工作单元
stage: 阶段。一个stage包含多个Task,而一个job由多个stage组成。一个job由多组Task组成,而每组Task到最后完成时,会有多个步骤以及生成对应的多个新的RDD.Task从刚开始运行时,然后生成多个对应的RDD这些总的过程就是一个Job,而中间的每个步骤就在RDD没有经过shuffle(洗牌)时,是属于一个stage,经过shuffler是一个stage
自我总结
SparkContext与Cluster Manager进行通信,
并且向Cluster Manager注册一个驱动Driver并且申请能运行Executor的资源(这个资源就是让RDD分区的内容能保存的Executor),
Cluster Manager得到的SparkContext请求后,让Worker Node分配出资源,
当Worker Node把自身情况告诉Cluster Node后(满足条件),
Worker Node向SparkContext申请Task(来保存RDD的某个分区的内容),
而SparkContext把分区内容直接传入到Worker Node的Executor中的Task中(RDD分区内容保存完毕),
然后SparkContext(本身已经创建了RDD到TaskScheduler的这个流程图)
通过监控Executor执行的算子来继续写这个由RDD->DAGScheduler->TaskScheduler构建的流程图(SparkContext对Executor进行分配任务与监控),
而当Executor完成后,ClusterManager会关闭SparkContext.
(算子中的函数也是通过SparkContext传递给Executor中的task执行的)
算子执行的位置:
一般而言,driver执行且只执行一次的是除了算子中的代码块以外的所有代码
但是算子执行是通过driver发送到集群中的Executor中进行执行的
而且算子是分为转换算子和动作算子,转换算子会在等到动作算子触发的时候,一起发送到集群中的Executor中执行,简言之,转换算子会在遇到动作算子的时候才会真正进行计算