资源调度
分为两种
一种是 client 用于测试
当代码中出现 New SparkConf
在本地启动一个 Driver 和executor 并向 ResourceManager 申请 一个启动 ApplicationManager 的节点 ,ResourceManager 接到申请后启动 ApplicationManager ,ApplicationManager 启动后 向ResourceManager申请资源,
ResourceManager 会随机向 NodeManager 启动Container(容器),进而启动AM 这里Am会有 ExecutorLauncher 的功能,
主要的功能就是资源的申请,这个时候开始申请资源,比如executor 的核数,进程内存等等,ApplicationManager 连接其他de
nodeManager 去启动Container 中的Executor 启动后对应节点的 NodeManager 会向ApplicationManager 端Driver 发送反馈
另一种是 cluster
和Client 的方式差不多 基本一样 不过 Driver 与ApplicationManager 不在主节点 启动 功能合并 剩下的资源调度基本是一样的
任务调度
首先构建DAG 有向无环图,DAGScheduler根据宽窄依赖切分Stage,DAGscheduler 以TeskSet的形式发送给TaskScherduler,
taskscherduer将task 发送到 对应的 executor中执行 (尽量发送到数据所在的节点 跟巨RDD的第五大特性) Task 失败后,会继续
重试三次以上操作,如果是因为没有找到shuffle文件的话 TaskScheduler就不会继续操作Task 而是由 DAGScheduler去重新执行
stafge 。