Spark shuffle --------- MR shuffle

1.复习:MR的shuffle

在MR中,shuffle分为两个阶段,分别为shuffle write 和 shuffle read
shuffle writer阶段,会有 写数据-聚合-排序-写磁盘(产生磁盘小文件)-归并排序,合并成大文件
shuffle read阶段,拉取数据写入内存-排序-溢写-合并分组

在MR中,排序的是强制的,为了后续的分组

在这里插入图片描述


2.Spark shuffle:分为两种,HashShuffle和SortShuffle

2.1HashShuffle:
在这里插入图片描述

特别标注:
1.磁盘核数问题:
未启用合并机制的时候:
产生的磁盘小文件个数:M(map task num)*R(reduce task num)

启用合并机制之后:
产生磁盘小文件的个数:C(核数:core)*R(reduce)

2.磁盘小文件过多带来的问题:
write 阶段需要创建大量的写文件打的对象
read阶段就要进行多次的网络通信
read阶段要创建大量的读文件的对象,由此会造成JVM内存不足

3.CR MR 哪个大?(C M 哪个大)
一般一个Core分配2到3个task。
例如:有三个核(A B C),每个核上有3个task。
因为性能差异问题,A B性能好,3 个task都执行完了。而C 性能比较差,只执行一个task还没执行完成, 这时,A B会拉取C上没有执行的task帮助它执行,提高效率


2.2.sortShuffle

1.sortshuffle的运行机制(两种):

  1. 普通运行机制
  2. bypass运行机制(合并机制)

普通运行机制:
在这里插入图片描述补充知识:
1.spark只是一个软件框架,executor是一个JVM进程,spark不能严格控制JVM的资源情况

当5M内存中存满时,如5.01M。有一个监控对象,一直监控这块内存数据结构的情况,一旦满了,它会向EXecutor再去申请资源:(5.01*2 - 5)M的资源,如果Executor的资源充足,会给出。
此时,如果没有申请到资源,就会进行溢写。申请到了,内存充足,不进行溢写。

2.为什么要有这么监控对象:
因为spark无法控制,只能通过一个线程进行监控

3.产生磁盘小文件的数目:
2*M :一个Map task 产生两个(索引文件和磁盘的大文件)

4.小文件合并的实际运行:
当第二个小文件进行溢写时,已经开始和第一个小文件进行合并操作了。不是等全部执行完毕才进行合并

bypass机制:
在这里插入图片描述bypass运行机制的触发条件如下:
shuffle reduce task数量小于spark.shuffle.sort.bypassMergeThreshold参数的值。(默认值:200)

2.两种运行机制的区别:bypass比普通机制少一个shuffle的排序


2.3: shuffle过程中,磁盘小文件的寻址问题

在这里插入图片描述文字说明:
当map端执行完毕后,会把执行的结果信息(磁盘小文件的位置,最终执行的状态等)封装到mapstatus中,然后会调用MapOutputTeackWorker向MapOutputTeackMaster上,此时Master上有所有磁盘小文件的信息,其他task想用这些数据,调用自身的MapOutputTeackWorker向主节点申请位置信息即可

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值