1、用户通过spark-submit命令提交任务
2、调用SparkSubmit初始化环境,创建SparkApplication,启动Client客户端
3、Client客户端向ResourceManager申请资源
4、ResourceManager指定一个NodeManager启动ApplicationMaster,ApplicationMaster启动diver,由yarnAllocator来分配资源,创建executorRunnable
5、executorRunnable启动nmClient,启动Container(executor)
6、executor端构建rpcEnv,与driver端建立通信,创建executor,并将executor信息发送给driver端
7、行动算子触发job,创建SparkContext,然后调用DAGScheduler
8、DAGScheduler根据shuffle依赖从后往前划分stage,将每个stage的tasks信息(包括最优先的资源位置)封装成一个taskSet,从前往后提交给TaskScheduler
9、TaskScheduler创建TaskManager来管理和监控任务的执行,然后向driver端申请重新激活资源
10、driver端进行资源画像,决定如何将task分配给可用的executor,将task信息和其资源信息封装成LunchExecutor,发送给executor端
11、executor端将LunchExecutor封装成TaskRunner
12、TaskRunner将Task序列化后,调用runTask方法,经所持有的迭代器链式计算获得计算结果
13、如果是ShuffleMapTask,就落盘成shuffle临时文件;如果是ResultTask,就写入外部存储
Spark--任务执行流程
于 2025-02-06 11:51:45 首次发布