spark学习笔记1——rdd、宽窄依赖、DAG

弹性数据集RDDs

RDD是Spark最基本的数据抽象,具有以下特性:

一个RDD有一个或多个分区(partitions)组成,每个partition会被一个计算任务所处理。用户可以在创建RDD时指定其分区个数,没指定则默认采用程序所分配到的cpu核心数

宽窄依赖:RDD和它的父RDDs之间的依赖关系分为两种不同的类型:

  • narrow dependency:父RDDs的一个分区最多被子RDDs一个分区所依赖
  • wide dependency:父RDDs的一个分区可以被子RDDs的多个子分区所依赖

 区分这两种依赖是很有用的:

  • 窄依赖允许一个集群节点以流水线的方式对父分区数据进行计算,例如先执行map操作,然后执行filter操作。而宽依赖需要计算好所有父分区的数据,然后再在节点之间进行shuffle,这与MapReduce类似。
  • 窄依赖能更有效地进行数据恢复,因为只需重新对丢失分区的父分区进行计算,且不同节点之间可以并行计算;而对于宽依赖而言,如果数据丢失,则需要对所有父分区数据进行计算并再次shuffle。

生成DAG

Spark根据依赖关系的不同将DAG划分为不同的stage:

  • 对于窄依赖,由于分区的依赖关系是确定的,其转换操作可以在同一个线程执行,所以可以划分到同一个执行阶段
  • 对于宽依赖,由于shuffle存在,只能在父RDDs被shuffle处理完成后,才能开始接下来的计算,因此遇到宽依赖就需要重新划分阶段

ps:Spark中产生宽窄依赖的依据是shuffle,当发生shuffle时,会产生宽依赖,基本上shuffle算子都会产生宽依赖,但是join除外,在执行join算子之前如果先执行groupByKey,执行groupByKey之后,会把相同的key分到同一个分区,再执行join算子,join算子是把key相同的进行join(只是对于k v形式的数据可以使用),不一定会产生shuffle ,有可能发生shuffle,也有可能不发生

常用的产生shuffle的算子
distinct
聚合
reduceByKey
groupBy
groupByKey
aggregateByKey
combineByKey
排序
sortByKey
sortBy
重分区
coalesce
repartition
集合或者表操作
intersection
join
leftOuterJoin...................

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值