RDD宽依赖、窄依赖&DAG

窄依赖:

每个父RDD中的partition最多被子RDD中的一个Partition所使用;子RDD中partition的个数大于等于父RDD中partition的个数

  1. 父RDD与子RDD是一对一的依赖关系(OneToOneDependency):map、filter、join with inputs co-partitioned;
    注:子RDD只依赖父RDD中相同partitionID的partition
  2. 父RDD与子RDD是一对一的范围内依赖关系(RangeDependency):union

宽依赖:

一个父RDD的partition会被多个子RDD的partition所使用,会导致计算中产生shuffle;

  • eg:groupByKey、join with inputs not co-partitioned
  • 存在问题:由于一个父RDD的一个partition对应子RDD的多个partition,会出现部分计算结果丢失,单一计算丢失的数据无法达到效果,便重新计算该步骤中的所有数据,从而导致计算数据重复。

注意:

宽依赖一定有shuffle,有shuffle不一定是宽依赖; 
两个要join的rdd的partition数相同,这种情况是窄依赖,其余情况的join都是宽依赖

DAG

生成重点是stage划分,划分依据是RDD之间的依赖关系;
程序提交后,高度调度器将所有RDD看成一个stage,对此stage从后往前回溯,遇到shuffle就断开,遇到窄依赖则归并到同一个stage,等所有步骤回溯完成,则形成一个DAG图

  • 窄依赖:RDD之间的数据不需要shuffle,多个数据处理可以在同一台机器的内存中完成,所以在spark中被划分为同一个stage;
  • 宽依赖:由于shuffle的存在,必须等到父RDD的shuffle处理完后才开始接下来的计算,所以会在此处划分stage;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值