开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段:Spark 原理_物理图_Task 设计】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/689/detail/12022
Spark 原理_物理图_Task 设计
内容简介
一、回顾
二、分析 Task 该如何设计
三、总结 Task 设计步骤
一、回顾
上节已经了解了物理执行图的意义,由于 RDD 自身是不能计算数据的,那么就需要一个组件来计算,这里就要用到 tesk,task 运行在 executor 中,本节主要学习 task 如何设计、有多少个 task,每个 task 计算什么东西,如果站在设计者的角度上分析会设计成什么样子
二、Task 该如何设计
1.第一个想法:为每个 RDD 的分区设置一组 task
会为每个分区都对一个 task,这个 task 来计算每个分区的数据
例如 splitrdd 的 p1 与 textrdd 的 p1,之间会有数据的交互, textrdd 的 p1数据计算好后,会将数据传给 textrdd 的 p1
那么 textrdd 的 p1的数据要找地方存储起来,生成文件再传给 splitrdd 的 p1。
(1)大概就是每个 RDD 都有三个 task,每个 task 对应一个 RDD 的分区,执行一个分区的数据的计算
(2)但是这么做有一个非常难以解决的问题,就是数据存储的问题,例如 task1,4,7,10,13,16在同一个流程上,但是这些 task 之间需要交换数据,因为这些 task 可能被调度到不同的机器上,所以 task1 执行完数据以后需要暂存,后交给 task4 来获取。
2.第二个想法:让数据流动
如果希望避免数据交互,那么需要将一个链条中的所有分区再一个 task 中计算
(1)第一个要解决的问题就是,要为数据常见管道(pipeline),有了管道,就可以流动
//可以把管道想象成河流,将 RDD 的分区 p1 当作阀门,每个阀门的作用都不同
(2)简单来说,就是所有的 RDD 有关联的分区使用同一个 Task,但是关注红框部分的问题
例如需要计算 reduceRDD 分区的数据,则需要计算完成的 tupleRDD 分区中的数据,reduceRDD 拉取数据
//map 将准备好的数据放入文件,reduceRDD 拉取数据
(3)ReduceRDD 的 p1 计算,需要计算 tupleRDD 三个分区中的数据,所以这里不能用同一个 Task
要计算 tuplerdd 中的 p1、p2、p3,这三个分区都要计算,这相当于一个 task 计算了所有链条中的所有分区,task2还要再计算一遍,p2 还会需要三个的数据
这个链条的计算相当于河流,textrdd 相当于河上的一道闸,splitrdd 也是一道闸,tuplerdd 是另一道闸,其中各个闸门的意义都不同,t 第一道闸去掉矿物质,第二道闸去掉更细的物质,第三道闸去掉更细的物质,添加漂白剂,所以将数据看作流动的,经历了这些闸,红框位置不好处理
3.第三个想法:划分阶段
既然在 shuffle 处数据流不动了,那就可以在这个地方中断以下。划分完阶段后,先执行前一个分区,再执行后一个分区
三、总结
Task 如何设计
1.第一个想法:每个 RDD 的每个分区都对应一个 task
2.第二个想法:用一个 task 计算所有 RDD 中对应的分区
3、这两个想法都有问题