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

最后就是:Transformation   Action

Transformation:代表的是转化操作就是我们的计算流程,返回是RDD[T],可以是一个链式的转化,并且是延迟触发的。

map
filter
flatMap
mapPartitions
mapPartitionsWithIndex
sample
union
intersection
distinct
groupByKey
reduceByKey
aggregateByKey
sortByKey
join
cogroup
cartesian
pipe
coalesce
repartition
repartitionAndSortWithinPartitions

Action:代表是一个具体的行为,返回的值非RDD类型,可以一个object,或者是一个数值,也可以为Unit代表无返回值,并且action会立即触发job的执行。

reduce
collect
count
first
take
takeSample
takeOrdered
saveAsTextFile
saveAsSequenceFile
saveAsObjectFile
countByKey
foreach


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章