| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> Spark运行机制汇总 -> 正文阅读 |
|
[大数据]Spark运行机制汇总 |
1、在命令行执行提交命令时,在spark-submit脚本中,调用了SparkSubmit类中的mainMethod.invoke方法,这个类通过反射,调用我们自定义的类。 2、我们自定义类中的main方法开始执行,初始化了SparkConf和SparkContext,在SparkContext对象被初始化的时候,构造出来DAGScheduler和TaskScheduler。 3、Driver端会对我们的代码进行解析,根据算子记录rdd之间的依赖关系,生成DAG有向无环图。 当程序触发action算子的时候就会产生一个job,会调用DagScheduler中的runjob方法来提交任务。 程序会拿到最后一个rdd(finalRDD)来创建一个ResultStage。 4、得到ResultStage之后,就正式的开始切分stage,从后往前遍历,一旦遇到窄依赖,就把rdd加入到当前的stage中,一旦遇到宽依赖,就会结束当前的stage,重新起动一个新的ShuffleMapStage。继续往前遍历,一直到rdd已经没有父依赖,整个切分结束。 5、当切分完了stage之后,就开始调用submitStage提交stage。从最后一个ResultStage开始触发提交,进行深度优先遍历,从前向后提交。 6、程序会根据提交stage的不同,调用模式匹配生成ShuffleMapTask和ResultTask。DagScheduler把当前提交的stage中的这么一些功能相同,处理的数据不同的task,组装成TaskSet,调用TaskScheduler来进行task的提交。 7、TaskScheduler会把TaskSet解压,生成task,然后把task进行序列化。 8、TaskScheduler通过它对应的后台进程与Master连接,向Master注册Application。 9、Master收到Application的注册请求后,会根据自己的资源调度算法,在spark集群的worker上启动一个或多个Executor进程。 10、Executor启动后会反向注册到TaskScheduler,TaskScheduler会把序列化好的task递交到Executor上面。 11、Executor每接收到一个task,就会用TaskRunner封装task,将我们的代码拷贝,反序列化。 然后从线程池中取出一个线程执行这个Task。 12、当执行结束后,将计算结果反馈到driver端,然后进行资源注销。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 0:42:05- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |