今天做的一个梦,梦回大一结束,回高中复读高三,一年下来不思进取做题也是飘的,甚至看不懂题说的意思。高考后,没有上本科分数线,专科是不会去读的。决定继续补习,闲暇时,会有点后悔放弃了985学历回来复读,最后如此结局。梦醒06:38
关键角色
- client:将应用提交的角色,Linux系统中通常执行提交脚本(Spark-submit.sh)的端
- driver:客户端启动driver,由driver向ResourceManager申请启动ApplicationMaster,且driver负责DAG(有向无环图)的运行规划。
根据运行模式的不同,driver启动在不同的节点
yarn-cluster模式,driver启动在ApplicationMaster所在节点上;
yarn-client模式,driver启动在client所在节点,且driver日志直接会输出到启动终端 - Application Master:这个应用运行的管理者,包括所使用资源的申请
- executor:实际的工作执行者,运行在container中
- Resource Manager:资源管理者,负责调度及分配管理所有可用资源
- container:实际的资源容器(由memory和vcore组成)
关键流程
-
client 提交 submit application
-
执行 main 函数
运行的进程是 Driver,此进程在创建 SparkContext 时会创建 DAGScheduler,创建 TaskScheduler
-
执行ing,遇到 Transform 则记录,直到遇到 Action。
调度 SparkContext.runjob 生成一个新的 job
经过一系列调度,调度到 DAGScheduler.handleJobSubmitted(...) 生成 ResultStage(当前 job 的 FinalStage,这一过程遍历获得该 Stage 的所有父 Stage,遇到 ShuffleMapStage 则递归调用 new ShuffleMapStage() 在内部继续遍历父 Stage,直到没有父 Stage,生成 StageId 从左到右从大到小,这一过程生成了 DAG),创建成功则提交这个 Stage,在 SubmitStage 中,递归调用SubmitStage,先提交 ParentStage 最后提交自己。补充 lineage 机制: each RDD remembers how it was built from other datasets (by transformations like map, join or groupBy) to rebuild itself.
-
每个 Stage 生成一组 Tasks,TaskScheduler 调用 SubmitTasks 提交 TaskSet(Tasks),在 SubmitTasks(TaskSet) 内部由 SchedulerBackend 完成 Tasks 申请并把 Tasks 分配给 executor。由 TaskScheduler 完成 tasks 和 executor 的资源分配,executor 执行真正的计算任务。
网友评论