00:00
任务呢,之前我们已经给大家讲完了,接下来呢,我们准备给大家讲一下沙否,这个沙否呢,我们之前呢,其实给大家介绍过啊,咱们这里呢,咱们来再来看一看,呃,比方说我们现在呢,有一个我们的RDD啊,咱们来给它一个RDD我们放过来啊,放到这儿,这是一个RDD,好,然后呢,我们再来啊两个RDD,那我觉得这个是不是我们可以写个RDD啊,然后呢,给它放过来啊。好了,那同样道理,那这个先删掉吧,那我们这里来给它一个颜色,咱们这里画一个红色,然后呢,我们这里呢,来给它复制,然后复制一下放到这边给它一个绿色啊,咱们的两个RD,两个RD,当如果有沙的话的里面应该会有一个我们的分区对吧?诶咱们分区好,那么我们说沙否啊,其实就是打乱重新组合嘛,所以这里给它一个蓝色啊,同样呢,再给他一个我们的紫色啊,给他一个紫色好,然后呢,我们在默认情况下分区,咱们的不变对吧?诶咱们不变,然后呢,在这个当中啊,我们这里面比方说有数据啊,咱们里面有数据,呃,这个数据呢,我就随便拿一个吧,比方说A啊,然后呢,我们下面呢,也有一个A,对吧?诶,OK,然后呢,再来这边有一个B,嗯。
01:12
好了,然后呢,我们把这个呢放过来,哎,我们这有一个B,那么有了B之后,那么这样的话,我们上游的RDD当中一个分区的数据被下游的多个分区所共享,这种方式就称之为叫一对多,就是一种宽依赖,那么宽一赖我们一般会有沙否,对不对?诶,所以我们的箭头呢,我们是这个样子的啊来嗯,好放过来,然后呢,我们这里呢,给它拷贝,咱们往下放,那这个时候呢,我们的A就会放到我们的这个位置,我们的B就会放到这个位置,对不对,然后呢,我们下面这个分区呢,也被下游的多个RD共享,所以我们这里拷贝,然后呢,我们这里呢,给他来啊,咱们复制一下,然后往上走啊往上走,往上走以后我们的A,诶放过来,相同的,诶,我们的A就放在一块儿,相同的B咱们就放在一块儿,那这个时候大家会发现它中间是不是数据被打乱,重新组合了,这个过程我们就称之为叫做什么杀uffle,诶咱们就称之为叫杀uffle就放到这。
02:13
啊,那么我们这个叫做沙,这个本身其实没有什么太多的问题,对不对,但是我们这么画图可能会有点问题,为什么呢?因为我们当打乱重新组合以后,如果咱们举个例子,后面还有别的分区怎么办?那么是不是意味着当你把这蓝色和紫色分区处理完毕以后,是不是可以往下执行了呢?不行。为什么不行?因为你还有别的分区没有处理完对不对?所以啊,我们要等待上一个我们的RDD的所有的分区全部执行完毕之后才能够往下走,那么就意味着你前面的两个分区,它的数据放过来的时候,是不是应该在内中等待啊?可是大家想想,你能在内存中等待吗?内存中是不是有大量的数据会积压起来,那么这样的话,我们的内存是可能不够用的,对不对?因为在分组过程中,或者说在我们聚合过程当中,你可能啊,这个数据非常多,那你的内存可能根本就不够用,所以在这种情况下,你在内存中等待是不合适的,那我该怎么办,我们是不是应该落盘呢?所以说大家看到我把它拉远一点,拉远一点以后干嘛呢?我们中间是应该落盘呢,所以啊,咱们把这个箭头呢,往回拉一拉啊,往回拉一拉,把这个箭头也往回拉一拉,啊,咱们来把这个箭头拿过来,拿过来以后,诶,我们现在就有一个什么我们的磁盘文件,诶就是这样的,然后呢,有个磁盘文件以后,把它放过来,就意味着我们的这个数据可能就变成了我现在给他画的这个图。
03:43
这个呢,就是一个我们的file啊,咱们的一个磁盘文件对吧,那这个呢,也是一个我们的file啊磁盘文件,然后那么你落完盘之后,那就意味着同们看我的这两个A干嘛呀,它应该是在哪啊,应该是给他在这个位置对不对,应该是在这儿,同样道理,这两个B呢,应该干嘛,应该放到咱们的这个位置,放完了以后,你再想办法从它里面干嘛呀,给它读过来对不对,这才叫真正的沙风。
04:11
那所以呢,这个A啊,就被读到了什么,我们的这个地方,诶过来,然后这两个B呢,就被读了过来,对不对,哎所以哎不对,应该是拷贝一下复制。好,放过来,所以啊,我们真正的一个杀Le过程呢,其实应该是现在这样的一个过程,对不对,诶就是这样,所以啊,大家可以看到我这里就可以模仿分组的概念嘛,相同的数据放在一个组当中,那么A放一块儿,B放一块儿,这个不就是沙否吗?所以沙否一定会有落盘,这个咱们之前讲过对不对?所以啊,咱们说一下沙否它一定会有落盘,嗯,他一定啊会有落盘。只不过这个落盘的数据量是多还是少的问题,对不对,诶正好说到这儿以后这个沙Le啊,它慢还要落盘,那我如何能够提高它的效率,让它快一些呢?其实我们说它肯定要落盘,那么你如何来提高它的效率,那么也就意味着你首先你落盘的数据量越少的情况下。
05:06
那是不是快一些呢?什么意思啊,因为如果我们沙否它落盘的数据量少,它就会提升它的性能,速度就会变快,这个大家能不能明白。因为你往一个文件里写数据,你写100个跟写一个它能一样吗?它不一样,所以说你想提高效率,在必须落盘的情况下,是不是减少磁盘交互次数,以及减少数据量是不是就能提高效率了,诶就是这个意思,那同样道理,你数据量减少的情况下,是不是你读取数据它也快了很多,所以啊,这是我们提升杀Le性能的一个关键的一个要素,所以呢,我们说一下来,如果啊,我们说一下,如果我们落盘,咱们叫杀过程。杀Le的过程中,我们的落盘啊,落盘数据量我们叫做减少,那么可以提高性能啊,咱们刚才说过原因了,因为你数据量减少的过程当中,你就减少了磁盘的IO次数,并且我们可以什么呢?把更少的数据写入磁盘时间就变快了,你在读的时候时候也变快了,对不对?但是啊,我们说了你如何能够将数据减少啊,诶之前咱们讲过一个叫reduce by key,还有那个叫combine by key和那个叫做什么呢?我们的for key aggregate,对不对,他们都有个什么功能啊,叫聚合功能,什么叫聚合功能啊,同学们,其实就是在我们沙Le之前,我事先把数据聚合吧,诶,这是一个聚合功能,它可以提高我们沙Le的效率,所以啊,我们的reduce和group key,我们说了他们是有区别的啊,所以呢,我们说来,咱们说算子,如果啊,它存在我们的豫句盒啊,咱们的豫句和。
06:49
能那么可以,咱们就要提高我们Le的性能,对不对,诶这个我们之前给大家稍微的诶说了一下,所以啊,咱们整体上算是一个回顾吧,把这个沙做一个回顾好不好,同学们。
我来说两句