开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段:Spark 原理_逻辑图_HadoopRDD 的生成】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/689/detail/12009
Spark 原理_逻辑图_HadoopRDD 的生成
内容简介
一、了解 Spart 原理
二、明确逻辑计划的边界
三、HadoopRDD 的生成
四、Textfile 算子的背后
接下里继续了解 spark 原理,在整个 spark 研究中,有 rdd 如何生成,数据间如何流转,如何去运行 rdd 链条,如何把物理执行图放在集群中,spark shuffle 原理。
了解逻辑执行图分为:明确边界、RDD 如何生成、RDD 之间有哪些依赖关系
一、Spark 原理
1.逻辑执行图(RDD 如何生成,数据之间如何流转)
2.物理执行图(如何去循行 RDD 链条)
3.如何运行(如何把物理执行图放在集群中)
4.Spark shuffle 原理
二、明确逻辑计划的边界
1. 明确边界//才能知道逻辑执行图是什么,怎么应用,与之前相同的代码,包括 todebugstring
Val sc =...
Val textRDD = sc.parallelize(Seq(
“Hadoop Spark”,”Hadoop Flume”,”Spark Sqoop”))
Val splitRDD = texrRDD.flatMAP(_.split(
“ ”))
Val tupleRDD = splitRDD.map((_,1))
Val reduceRDD = tupleRDD.reduceByKey(_+_)
Val strRDD = reduceRDD.map(item=>S
”${item._1},${item._2}”)
Println(strRDD.toDebugString)
strRDD.collect.foreach(item => println(item))
通过下图可以知道上述代码中的一些列 RDD 是怎么来的
2. 在 action 调用之间,会生成一些列的 RDD,这些 RDD 之间的关系,其实就是整个逻辑计划,例如上述代码,如果生成逻辑计划的,会生成如下一些 RDD ,这些 RDD 是相互关联的,这些 RDD 之间,其实本质上生成的就是一个计算链
TextRDD 通过 flatmap 生成了 splitRDD,splitRDD 通过 map 生成了 tupleRDD ,tupleRDD 通过 reducebykey 生成了 reduceRDD,reduceRDD 通过 map 生成了 strRDD
逻辑执行图就是这样的一个链条,这个链条就是数据的流转方向,从左到右 流动、执行、运算。
数据从左方来,变成 textRDD,经过 flatmap 的处理对 textRDD 当中的每一条数据进行拆开,变成单独的数据进入 splitRDD,这个链条就是逻辑执行图。
逻辑执行图里研究的就是数据的流转方向,数据从哪来,怎样计算
数据的形成是通过 textRDD 和其中的算子 flatmap 去表达,例如 textRDD 中存放了一万条数据通过,faltmap 形成了 splitRDD,flatmap 就是它的计算方式,由 textRDD 计算
注释:
Flatmap 通常称之为 split RDD 的计算函数
textRDD split RDD 的父 RDD,依赖
接下来要去看 splitRDD 是如何生成的,只有知道 rdd 是如何生成的,才能表现成图像,生成 rdd,无非就是去创作 rdd
三、HadoopRDD 的生成
1.进入 源码 中,如图
2.将 parallelize 改成 textfile(path=”...”)
按 ctrl 点开 textfile,可以看到 textfile 的方法中接收了 path,以及分区数 minpartition。
如图:
3. 点开其中的 hadoopfile 方法,可以看到创建了一个 hadoopRDD,如图:
说明原本的 textfileRDD 中 //textfile 算子作用是创建一个 hadoopRDD,hadoopRDD 就是它生成对象 textfile 的类型。
TextRDD 其实就是一个 hadoopRDD 类型的,回到 sparkcontext 中
4.点开 hadoopRDD,可以看到 hadoopRDD 其实是 RDD的一个子类,如图:
5.为什么要叫 hadoopRDD?
在整个 spark 当中,RDD 有五大属性,分区列表、计算函数、依赖关系.HadoopRDD 继承了 RDD 的这五个属性,hadoopRDD 的这五个属性有自定义,在 hadoopRDD 的方法中,可以找到 compute 方法,这个方法是一个 override 方法,
也就是说,computer 是在 rdd 类中去定义的,在 hadooprdd 的父类 rdd 中
注解:compute 方法是 RDD 的方法,hadoopRDD 复写了这个方法,改变了rdd 对象的计算方式
6.在下面中可以看到还存在 hadoopRDD,inputFormat 对象
//在学习 hadoop 中,再进入hadoopmap_ computemap 之前,通过 inputFormat 对象读取数据,这里的 inputFormat 就是 hadoopRDD 中的 inputFormat
在这里的 compute 方法中,就是通过hadoop 上的 jiawa 组建去读取 inputFormat 上的文件,如图:
四、Textfile 算子的背后
在笔记中介绍了读源码的一个步骤,包括那个地方需要注意
研究 rdd 的功能或者表现的时候,其实本质上研究的就是 rdd 中的五大属性,因为 rdd 透过五大属性来提供功能和表现。
所以如果要研究 text field 这个算子,应该从五大属性着手那么第一步就是看看生成的 rdd 是什么类型的 rdd。
1.textfile 生成的是 hadoopRDD
2.HadoopRDD 的 Partions 对应了 HIDFS 的 blocks,hadooprdd 上的分区列表,每个分区就对应了 HDIFS 上的文件的一个 block,如图b1 就对应了 p1
3.HadoopRDD 的 compute 函数就是在读取 HIDFS 中的 block,如图 compute 函数就是计算p1 是从 HDFS file 的b1 中读取出来的
// rdd 的五大属性:1.分区列表2.计算函数3.依赖关系
4. 整个逻辑图的生成描述数据中的计算从哪来?
总结了解二点
1. 整个逻辑图的生成,就是在描述数据如何计算,其实 RDD 的生成,通过算子在算子内部拗出来的,拗出来的 rdd 可能是 rdd 最外侧,最父类的子类,例如 hadoopRDD 就是 rdd 类的子类
2.HadoopRDD 同 RDD 中的其他子类一样,重写了 RDD 的五大属性,根据这五大属性来实现不同的功能。例如HadoopRDD 的 Partions 对应了 HIDFS 的 blocks,HadoopRDD 的 compute 函数就是在读取 HIDFS 中的 block 中读取数据到自己的分区当中