00:00
好,同学们,我们这个Spark samplele呢,我们把课件呢,咱们过一下啊,首先这有两个阶段,一个叫stage,一个叫Le map stage啊,它分成两段,其实我们给大家画图的候,稍微的跟它有点不同,为什么呢?因为我们画图的时候,我们体现的其实是一个什么呀,是一种的概念,对不对?嗯,码当它也是一种包含嘛,所以这个其实倒也无所谓啊,呃,而且呢,这种包含恰恰可以体现一种上下级嘛,你还记得吗?咱们的父子对象,子类对象是不是就包含父类对象啊,所以也是一种包含啊,所以这个倒没有什么错误啊,有的同学会误会说,老师你看你这个图,这个图是这么画的,那你这个图是这么画的,好像不太对,其实啊,大同小异啊,它只是把它分的更开一些啊,他们两个阶段中间其实就是沙uffle,沙uffle就要落盘,那么我们只有最后一个阶段呢,我们称之为叫stage啊,叫做结果阶段,前面的每个阶段都叫沙Le map啊,都这么称呼它,然后呢,这边有一个什么呢?我们的哈希沙Le,这个是早期的那个沙。
01:00
后的呃方式,那么这个是怎么回事儿呢?它家首先第一个叫未优化的哈希沙,大家看我们下面这张图,这张图形当中大家有没有发现,其实就是我们早期当中的下游的task对应于每一个文件吧,就是每一个我们的CP的执行的时候,一个task就有三份文件,一个task就有三份文件,这样的话小文件过多对不对,这就是早期哈希沙Le的方式,然后呢,我们再来往下,下面呢是优化后的哈希沙Le,那么优化后的这个哈希沙Le大家可以看到其实就是我们这个样子的,它是每一个核三个文件,所以这样的话有效的减少了咱们文件的数量,对不对,同学们,所以这个呢,效率就能够得到提高,这就是一种优化,但是我们说当你的任务过多,当你的核数过多的情况下,你这里的小文件依然过多,所以在我们新版本当中,我们采用的是什么叫salt沙uffle啊,就是要排序的这种shuffle,其实说白了,排序的目的就是为了有索引呢。好,我们。
02:00
再来往下,下面呢,我们有张图,大家可以看到,就是我们跟之前的图大同小异了啊,就是我们这里呢,会根据我们下游的这个task呢,形成一份数据文件,但是要加上那个索引,然后呢,这个中间呢会有排序,排序会生成临时文件,对不对?诶就是这么一个过程,这就是我们当前的什么sortt沙uffle啊,但是呀,咱都明白你salt的时候性能是比较差的吧,它的排序嘛,所以在某些情况下,其实什么是可以不用排的,就是你不排也能做到,比方说哈希定位你的排序目的不就为了让它有规律吗,好去找吗?那你如果你哈希定位的话不也行吗?对不对,所以啊,它其实有个叫bypass,这个咱们之前看到了这个bypass的这个操作,其实是可以完成一些简单的操作,它能够提升性能,为什么呢,不需要排序这个呀,咱们给大家呢,再去看一看好不好,同学们来,咱们在这个地方咱们找一下,咱们这里面有一个什么呢?叫bypas墨子。
03:00
Writer咱们可以拷贝啊,拷贝拷贝以后咱们拿过来,咱们搜索一下好了,我们这里呢,给它点一下啊,咱们点一下,呃,点完以后咱们往下看,这个里面应该有一个什么呢?我们找一找啊,咱们叫做right,这个right大家可以看到这个里面咱们往下看啊,它里面干嘛呢?有个for,这个four呢,有个number parts,就是分区的数量,这个分区数量你往下看,你会发现它每一个分区会干嘛,会创建一个partition writers。你想想他在干什么,是不是意味着每个分区会形成一份文件呀,所以呀,其实这个bypass的操作恰恰跟我们前面的什么,我们的这个操作是差不多,就跟我们优化后的这个哈希沙差不多,它会对下游的每一个分区创建一份文件,否则它怎么可能会有一个数组呢,对不对,你看这不是一个数组吗?这不是partan writers嘛,对不对,就是它了,然后呢,往下它下面呢,就会干嘛呢?Write就是每一个分区的文件,它会把这个给他写,对吧?给它写就是干这个事情用的,然后呢,你写完以后,咱们往下看啊,咱们往下看,下面这个地方呢,咱们看看啊,来,它有一个叫right partan date啊,我们然后点一下点点完以后呢,往下走,往下走啊,往下走,它里面会拿到我们的segment那个file啊,就是它,然后最后。
04:26
最后有个什么东西啊,叫right part date with这种流啊,然后呢,再往下,往下大家看有个什么东西啊,叫做commit or partition,什么意思,提交所有的分区,我们点。点完以后拷贝,拷贝以后往下走就一个它呀,它以后再往下走来,同学们看往下走以后,你看怎么了,是不是又回到了之前那个地方,叫right in that file and commit,所以也就意味着呀,它其实最终是不是还是给它合并成了索引和咱们的那个数据文件,只不过他在前期的时候是每一个一个文件对不对,就是每个分区一个文件,然后到最后把他们合二为一啊,也不叫合二为一,就把他们合到一块儿对不对,所以啊,它这个意思,这个就没有什么排序的概念了,所以它的性能就可以得到提高,这也是我们需要在课件中咱们描述的概念啊,就是说我们要知道它的目的何在啊,目的何在就是为了不排序能够提高效率,但是它有限制,什么限制呢?首先它不能是聚合类的那个算子,如果是需要预聚合的算子的情况下,它这个所谓聚合类应该是那个预聚合啊,这小点问题了,还有一个就是那个s reduce task个就是下游。
05:39
的分区数量它应该小于等于200吧,对不对啊,就是你太多了肯定不行,你少了没问题啊,就是这样的,好,这个呢,我们就说到这里啊,然后其他的其实就没有什么可说的了啊,这就是我们沙的那个内容。
我来说两句