文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

数据分析工具篇——Spark计算原理

2024-12-03 12:02

关注

Spark的计算原理

spark的结构为:

节点介绍:

  1. Cluster Manager:在standalone模式中即为Master主节点,控制整个集群,监控worker。在YARN模式中为资源管理器负责分配资源,有点像YARN中ResourceManager那个角色,大管家握有所有的干活的资源,属于乙方的总包。
  2. WorkerNode:可以干活的节点,听大管家ClusterManager差遣,是真正有资源干活的主。从节点,负责控制计算节点,启动Executor或者Driver。
  3. Executor:在WorkerNode上起的一个进程,相当于一个包工头,负责准备Task环境和执行。
  4. Task:负责内存和磁盘的使用。Task是施工项目里的每一个具体的任务。
  5. Driver:统管Task的产生与发送给Executor的,运行Application 的main()函数,是甲方的司令员。
  6. SparkContext:与ClusterManager打交道的,负责给钱申请资源的,是甲方的接口人。

整个互动流程是这样的:

  1. 甲方来了个项目,创建了SparkContext,SparkContext去找ClusterManager申请资源同时给出报价,需要多少CPU和内存等资源。ClusterManager去找WorkerNode并启动Excutor,并介绍Excutor给Driver认识;
  2. Driver根据施工图拆分一批批的Task,将Task送给Executor去执行;
  3. Executor接收到Task后准备Task运行时依赖并执行,并将执行结果返回给Driver;
  4. Driver会根据返回回来的Task状态不断的指挥下一步工作,直到所有Task执行结束;

运行流程及特点为:

借用上图我们再来了解一下spark的运算过程:

  1. 构建Spark Application的运行环境,启动SparkContext;
  2. SparkContext向资源管理器(可以是Standalone,Mesos,Yarn)申请运行Executor资源,并启动StandaloneExecutorbackend;
  3. Executor向SparkContext申请Task;
  4. SparkContext将应用程序分发给Executor;
  5. SparkContext构建成DAG图,将DAG图分解成Stage、将Taskset发送给Task Scheduler,最后由Task Scheduler将Task发送给Executor运行;
  6. Task在Executor上运行,运行完释放所有资源;

RDD计算案例

我们用一个案例来分析RDD的计算过程:

DAGScheduler对于RDD图形的划分是有一定规律的:

 

  1. stage的划分是触发action的时候从后往前划分的,所以本图要从RDD_G开始划分。
  2. RDD_G依赖于RDD_B和RDD_F,随机决定先判断哪一个依赖,但是对于结果无影响。
  3. RDD_B与RDD_G属于窄依赖,所以他们属于同一个stage,RDD_B与老爹RDD_A之间是宽依赖的关系,所以他们不能划分在一起,所以RDD_A自己是一个stage1;
  4. RDD_F与RDD_G是属于宽依赖,他们不能划分在一起,所以最后一个stage的范围也就限定了,RDD_B和RDD_G组成了Stage3;
  5. RDD_F与两个爹RDD_D、RDD_E之间是窄依赖关系,RDD_D与爹RDD_C之间也是窄依赖关系,所以他们都属于同一个stage2;
  6. 执行过程中stage1和stage2相互之间没有前后关系所以可以并行执行,相应的每个stage内部各个partition对应的task也并行执行;
  7. stage3依赖stage1和stage2执行结果的partition,只有等前两个stage执行结束后才可以启动stage3;
  8. 我们前面有介绍过Spark的Task有两种:ShuffleMapTask和ResultTask,其中后者在DAG最后一个阶段推送给Executor,其余所有阶段推送的都是ShuffleMapTask。在这个案例中stage1和stage2中产生的都是ShuffleMapTask,在stage3中产生的ResultTask;
  9. 虽然stage的划分是从后往前计算划分的,但是依赖逻辑判断等结束后真正创建stage是从前往后的。也就是说如果从stage的ID作为标识的话,先需要执行的stage的ID要小于后需要执行的ID。就本案例来说,stage1和stage2的ID要小于stage3,至于stage1和stage2的ID谁大谁小是随机的,是由前面第2步决定的。

Executor是最终运行task的苦力,他将Task的执行结果反馈给Driver,会根据大小采用不同的策略:

 

来源:数据python与算法内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯