开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段:Spark 原理_物理图_案例总结】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/689/detail/12024
Spark 原理_物理图_案例总结
内容简介
一、数据的流动过程
二、DAG 和 Stage 的生成
在此之前我们学习了阶段如何划分,接下来会运行一个小案例,对之前的内容进行一个总结,首先我们会了解数据是如何流动的,以及分析一个小案例,在集群运行完以后,会有怎样的结构。
一、数据是如何流动的
Val sc = ...
Val textRDD = sc.parallelize(Seq(
“Hadoop Spark”,”hadoop flume”,”spark sqoop”))
Val splitRDD = textRDD.flatMap(_.split(
“ “))
Val tupleRDD = splitRDD.map((_,1))
Val reduceRDD = tupleRDD.reduceByKey(_+_)
Val strRDD = reduceRDD.map(item => s
”${item._}, ${item._2}”)
strRDD collect.foreach(item =
》 println(item))
// 调用了 strrdd 的 collect 方法,通过 action 算子获取数据
在 str 中调用了 collect,说明 collect 只是从 str 中获取数据
Collect 获取的数据称为 result,观看一下整体的流程
上述代码是这个章节一直使用的代码流程,如下是其完整的逻辑执行图
1.过程有两个
(1)从右到左,rdd 数据的索取
(2)从左到右,rdd 数据的给予
首先从 srerdd 出发,调用它的算子去获取数据,相当于在向 strrdd 要数据,由于 strrdd 重视没有数据的,所以 strrdd 要获取数据计算,StrRDD 通过 reduceRDD 获取数据,经过 map 计算,变成 strRDD 中的数据
ReduceRDD 是通过 tupleRDD 获取数据,经过 reducebykey 过程(shuffle 过程),变成 reduceRDD 中的数据
Stage0是一个单独的阶段,要保证 tuplerdd 中是有数据的
2.总结
(1)数据的计算发生在调用 action 的 RDD 上
(2)ResultRDD 是没有数据的话,找父类 RDD 获取数据
(3)父类 RDD 再向上获取数据
Textrdd 先拿到数据,两个过程,从左到右,一步步传递数据,从右到左,一步步向前要数据
数据的计算发生在 strRDD 上,最先获取数据的为 textRDD
Stage 的划分,是从后往前,stage0、stage1
以上就是整个 stage 的划分,可以将它想象成水流,打开水龙的的时候,需要 result,水从源头处 HIDFS 流过来,是 result 先需要水,这个时候水就从源头处流过来,经过 textrdd 的处理,splitrdd 的处理,tuplerdd 的处理,在tuplerdd 和 reducerdd 之间建了一个水库,将数据传入水库在进入 reducerdd,后经过 strrdd ,进入 result,整个流程
二、DAG 和 Stage 的生成
1.编辑代码
复制上述代码
输入
Scala>:paste
// Entering paste mode(ctrl.D to finish)
粘贴到此处
2.按 ctrl +D 执行
结果如下
查看划分的 stage
3.打开浏览器,输入 node01:4040/jobs/
4.点击 collect at <console>:32
5.点击 DAG 可视化
可以看到 stage0 和 stage1 与之间说的相反,在后面会将讲解到。
总结
数据计算发生在需要数据的地方,FinalRDD
第一个获取数据的 RDD 是 FirstRDD
通过案例查看了 DAG 的生成,stage 的生成