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数据较大的情况)



猜你喜欢

转载自blog.csdn.net/qq_36968512/article/details/80667354