Spark基础必会知识总结

1、RDD是什么,RDD的五大属性

RDD是弹性分布式数据集

五大属性:

  1. 分区(指定数据是哪个分区的)
  2. 分区内的计算逻辑
  3. 分区器(如果有键值对可以控制分区的数据流向)
  4. 血缘关系
  5. 移动数据不如移动计算

2、RDD的弹性体现在哪里

存储弹性:内存磁盘一起用

计算弹性:重试机制

分片弹性:分区可以改变

容错弹性:可以基于血缘关系,也就是上一个RDD重新进行计算,恢复当前RDD的数据

3、Spark的算子

1、转换算子

1)单value (rdd2 = rdd1.算子)
  • **map:**一次处理一条数据
  • mappartitions:一次处理一个分区的数据(效率更高)
  • flatmap:一进多出 groupby:分组
  • **coalesce:**选择是否执行shuffle,一般用于缩小分区
  • repartition:在coalesce基础上实现,选择是否执行shuffle,一般用于扩大分区
2) 双value( rdd3 = rdd1.算子(rdd2) )
  • 交并差(intersection、union、subtract)、zip拉链
3)key-value
  • reduceByKey:有预聚合、重分区,聚合计算

  • groupByKey:没有预聚合,重分区但是不计算

2、行动算子

  • Collect(把数据拉回driver端做展示)、foreach(一条一条的触发计算)

4、Spark中的血缘,以及宽窄依赖

血缘说的就是宽依赖和窄依赖。有shuffle的是宽依赖

宽依赖:父RDD 的一个分区的数据会被子 RDD 的多个分区依赖,涉及到 Shuffle

窄依赖:父RDD 的一个分区的数据只会被子 RDD 的一个分区依赖

窄依赖的多个分区可以并行计算;宽依赖必须等到上一阶段计算完成才能计算下一阶段

5、Spark的任务划分

1、一个sparkcontext,也就是main中的一个上下文,生成一个Application

2、一个行动算子生成一个job

3、stage等于宽依赖个数+1

4、Task,数量=最后一个RDD的分区数(即这个stage中经过一些列的rdd后最后生成的文件个数,看最后一个RDD输出多少个分区,一个分区一个文件,也就是一个task

在这里插入图片描述

6、Spark为什么比MR快?

1、磁盘使用较少,排序少

MR过程中频繁的将数据写入到磁盘中,reduce阶段再从磁盘拉取数据,消耗大量时间。Spark不需要将计算的中间结果写入磁盘

2、使用spark DAG

减少了不必要的shuffle,对于mr来说下一个job依赖于上一个,但是每一个job又会落到磁盘,对于spark来说,每一个job结果都可以保存到内存中,供后续的job使用

7、Spark shuffle和Hadoop shuffle的区别

1、内存缓冲区

​ Mr是圆形缓冲区,spark不是

​ Mr的缓冲区是固定大小的,但是spark是动态扩容

2、排序

​ Hadoop的shuffle的必须排序的,map和reduce都要求分区内有序,但是spark不要求这一点

3、执行顺序

​ Hadoop不用等所有的maptask都执行完了才可以开启reducetask

​ Spark必须等父stage执行完才可以去抓取数据

8、除了RDD,你还了解Spark的其他数据结构吗

累加器和广播变量

  • 累加器

​ 在driver端定义的变量在executor端的每个task都会得到这个变量的一份新的额副本,每个task更新这些副本的值后,传回driver端进行合并

  • 广播变量

广播变量就是分布式共享只读变量,简单说一下它的原理:用来高效分发较大的对象。向所有工作节点发送一个较大的只读值,以供一个或多个Spark操作使用

  • 16
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值