spark学习(五):shuffle以及内存管理机制

目录

1. shuffle详解

1.1 那么到底什么时shufffle?

reduceByKey的含义?

问题:

如何聚合?

1.2 Shuffle分为shuffle和sortShuffle

1.2.1 shuffle普通机制

1.2.2 shuffle合并机制

1.2.3 SortShuffle普通运行机制

1.3 shuffle文件寻址

1.4 shuffle调优

2. spark的内存管理机制

2.1 静态内存管理机制

2.2 统一内存管理机制

2.3 spark关于内存分配的参数


1. shuffle详解

之前说RDD宽窄依赖,划分stage时说到一个RDD是否有多个子RDD判断其是窄依赖还是宽依赖,这其中宽依赖:一个RDD有多个子RDD,这个过程中有shuffle过程;

Stage中pipeline计算模型时提到数据什么时候落地:shuffle或者checkpoint

1.1 那么到底什么时shufffle?

我们之前说到reduceByKey会有shuffle过程,那我们从reduceByKey为例开始

reduceByKey的含义?

reduceByKey会将一个RDD中的每一个key对应的所有value聚合成一个value,然后生成一个新的RDD,元素类型是<key, value>的形式,这样每一个key对应一个聚合起来的value

问题:

每一个key对应的value不一定都在一个partition中,也不太可能在同一个节点上,因为RDD是分布式的弹性的数据集,他的partition很可能分布在各个节点上

如何聚合?

  • Shuffle Write:上一个stage的每个map task就必须保证将自己处理的当前分区中的数据相同的key写入一个分区文件中,可能会写入多个不同的分区文件
  • Shuffle Read:reduce task就会从上一个stage的所有task所在的机器上寻找属于自己的那些分区文件,这样就可以保证每一个key多对应的value都会汇聚到同一个节点上去处理和聚合

1.2 Shuffle分为shuffle和sortShuffle

1.2.1 shuffle普通机制

shuffle 普通机制运行原理图

一个executor中的每个task都有属于自己的buffer缓冲区

执行流程

  1. Map task 处理完数据后,将结果写入到buffer缓冲区(与reduce task数量一致),每个buffer默认32k
  2. 满了之后溢写到磁盘,每个buffer对应一个磁盘小文件。
  3. Reduce task到不同的节点去拉取数据自己的数据

产生的小文件的个数:M(map task) * R(reduce task )

问题:

产生磁盘小文件太多

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值