RDD是spark最底层的核心抽象,叫做弹性分布式数据集。
特点:不可变,可分区,里面的元素可以并行计算的集合。
RDD与RDD之间的依赖关系,依赖的就是血统。
本质上描述的就是RDD的执行流程。
一个appliction=一到多张DAG有向无环图
从创建第一个RDD开始,到遇到第一个action算子结束,形成一张DAG有向无环图。
一个application当中具体有几张DAG有向无环图, 取决于有几个action执行算子。
在spark当中,依赖关系分为两类:一类是窄依赖(NarrowDependency);一类叫做宽依赖(ShuffleDependency)。
窄依赖:父RDD当中的一个分区只能被子RDD当中的一个分区所依赖。类似于独生子女。
宽依赖:父RDD当中的一个分区会被子RDD当中的多个分区所依赖。类似于超生子女。
local:表示本地开启一个线程模拟集群运行。
local[N]:N代表的是一个具体的数,表示本地开始N个线程模拟集群运行。
local[*]:表示本地有多大资源就用多大资源去模拟运行。
map:映射。针对列表当中的每一个元素进行操作,操作完成后返回一个新的列表,操作之前是多少个元素,操作之后还是多少个元素,不会增加,不会减少。
spark当中一共有两种分区方式:一种是hash,一种是range。
非key,value对的数据分区方式为None;key,value对的数据分区方式默认也为None,但是可以指定分区方式。
spark搭建yarn模式一共有两种:一种是yarn on client模式;一种是yarn on cluster模式
yarn on client:driver运行在当前节点。一般学习测试使用,容易造成网络流量激增的问题。
yarn on cluster:driver运行在集群当中某一台节点上,一般生产环境使用,不会造成网络流量激增的问题。
根据RDD的执行流程构建DAG有向无环图,构建好后,采用回溯方法,从后往前推,遇到窄依赖包含到当前stage中,遇到宽依赖断开形成stage。
一个DAG有向无环图=一个Job
一个DAG有向无环图=一到多个stage
一个stage=一个taskSet
一个taskSet=多个task
一个Driver=一个main函数+SparkContext程序入口
RDD算子大体一共可以分为两类:一类叫Transformation(转换算子);一类叫Action(执行算子)。
转换算子:惰性计算,只做连接不运算,只有遇到action执行算子才会运算。
执行算子:带动转换算子运算,并将结果输出或保存到指定地点。
转换算子:返回值类型是RDD的就是转换算子。
执行算子:返回值类型不是RDD的就是执行算子。