spark的一些难以理解和一些冷门知识的解读(面试可能会问!!)(Unit1)
这篇文章是对于还没有入门和刚刚入门的spark小白提的,大佬可以给出意见,本人接受!!!
关于RDD部分,首先你要知道什么什么RDD
RDD字面意思就是弹性分布式数据集。。。。。。。(百度一下都是这种字眼很让人反感)
个人感觉应该要分开理解
1。弹性
1. RDD可以在内存和磁盘之间手动或自动切换(后续会仔细讲解)
2. RDD可以通过转换成其他的RDD,即血统(就是转换操作一些算子)
3. RDD可以存储任意类型的数据(不仅是文本数据还可以是音频视频等。。)
4.RDD持久化方式非常多种多样,而且RDD本身就很聪明
这就叫弹性就是什么数据都能玩,而且是想怎么玩就怎么玩!!!
2。分布式:
1.数据可以分散在好几个机器上
2.,一个RDD好几个分区
3数据集
1.初代RDD: 处于血统的顶层,存储的是任务所需的数据的分区信息,还有单个分区数据读取的方法,没有依赖的RDD, 因为它就是依赖的开始。
2.子代RDD: 处于血统的下层, 存储的东西就是 初代RDD到底干了什么才会产生自己,还有就是初代RDD的引用
这就本人眼里的RDD它是看不见摸不到的!!!
什么是宽依赖什么是窄依赖
窄依赖:多对一或者一对一
宽依赖:一对多或者多对多
rdd在进行宽依赖的时候,spark会将中间结果物化到父分区的节点上,可以简化数据恢复的过程,这句话的意思你可以觉得一旦出现宽依赖spark会将一些dataset进行持久化以方便spark运行,这样的好处就是能够极小程度的降低磁盘IO
调度阶段个数等于宽依赖出现次数
对于失败的任务只要对应的父调度阶段信息可用,那么会到其他节点上继续执行,有时候作业执行缓慢系统会在其他节点上执行该任务的副本,先取得结果的结果作为最终结果
rdd三种持久化策略:
1.未序列化的java对象存在内存中 (最优可以直接访问jvm内存里卖弄的RDD对象)
2.序列化的数据存在于内存里面 (比第一种有效但是降低了性能)
3.序列化的数据存在于磁盘 (通常用于RDD数据较大的情况)