Spark中Executor、Task、Stage、Job的关系

Spark重点关键字
 
 
Application
基于Spark的用户程序。由集群上的Driver program和Executor组成。
Application jar
一个包含用户的Spark应用程序的jar。在某些情况下,用户将希望创建一个包含其应用程序及其依赖项的“uber jar”。
用户的jar不包含Hadoop或Spark库,但是这些库将在运行时添加。
Driver program
该进程运行应用程序的main()函数并创建SparkContext
Cluster manager
用于获取集群上资源的外部服务(例如,standalone manager, Mesos, YARN)
Deploy mode
区分驱动程序进程的运行位置。在“ cluster”模式下,框架在集群内部启动驱动程序。在“ client”模式下,用户在集群外部启动 driver
Worker node
可以在集群中运行应用程序代码的任何节点
Executor
Worker node上的应用程序启动的进程,该进程运行任务并将数据跨任务存储在内存或磁盘存储中。每个应用程序都有自己的执行程序。
Task
发送给某个Executor的工作单元
Job
一种由多个任务组成的并行计算,这些任务对应一些Spark操作(例如savecollect);可以在Driver日志中看到job。
Stage
每个 job 都被分为一些较小的任务集,这些任务集就是 stages(类似于MapReduce中的map和reduce阶段),stage是相互依赖的;可以在Driver日志中看到Stage
 
想要学习Spark,以上几个关键字是必须要搞懂的,就算不搞懂也要熟知。其中初学Spark最容易混淆或不清楚的就是Executor、Task、Stage、Job的关系,现在我来介绍一下。
        重点:一个action对应一个job,一个job多个stage,划分stage的边界是不同节点取数据,到shuffle结束,一个stage对应多个task,task由dirver发送到executor,task运行在executor中,exector运行在worker node上,exector由dirver在worker node上申请资源创建,application包括driver program和executors。
 
                                 Spark中Executor、Task、Stage、Job的关系
 
Spark 多线程模型第一步是构建一个可重用的资源池,然后在这个资源池里运行所有的ShuffleMapTask 和ReduceTask,task是线程的,可以并行
 
                                   Spark中Executor、Task、Stage、Job的关系