00:00
好,那接下来我们继续看一下那个排序啊呃,那排序这块呢,之天其也聊过啊,就在买so当中,首先呢,有一个奥特派,我们可以按照什么来排序?呃,对于我们的这个MR任务来说,如果说我们用out,那全局呢只会有一个videor了,尽管在have里边,其实我们可以设置video的个数,就类似于在MR里边我们最后封装那个driver一样,是不是可以最后写我们要运行多少个radio赛呀,对吧?啊,那只要你用auto派,就算你设置的这个属性不会生效,它优先级最高的还是最后奥,因为奥是相当于写在so里边的,就相当于是代码的最后一层,对不对,对吧?它会根据这个内容呢来选择它的一个all派,因为all派就是做一个全局排序。啊,当然它有默认的就A。升序对吧?呃,还有一个DC就降序啊,就降序好,那我们来看一下啊,在这个当中,我们可以按照这个薪水进行一个排名,对吧,那正常的排名的话,那我们这样写来的,呃,1NAME吧,然后salary from这个ERP这张表我也不要那么多了,因为那么多的看着不好看,对吧,All the by salary啊这个就按顺序正常去排的。
01:27
这是做了一个全局的一个排序啊,全局的排序其实在MR里边啊,它这种排序呢,其实是不好啊,其实是不好的,就是只有一个reducer,因为它的分区规则不允许他去,就是他的一个part的默认的,对于MR来说,默认的一个分区规则是不是那个叫哈希分区啊,对吧?哈希分区,呃,因为哈希分区啊,它不能做到,如果说你想做整体所有数据的一个排序,是做不到在每个分区当中去独立排序的,而对于后续的,像你们后学的后面Spark框架当中,它除了哈希分区之外,它还有另外的分区规则。
02:14
啊,那那个分区规则呢,就可以让多个reducer同时对内部数据进行排序,其实那个原理也比较简单啊,它那个分区规则呢,用的是叫range分区,叫范围分区啊,叫范围分区,他怎么做的呢?它不是按哈希值来的,它直接呢就比较你这个值。就相当于本来我们这个数据可能是乱的,对吧,比如说这样啊,我们不排本来这个数据是乱的,他会对咱们这个数据呢,先抽样啊,咱们可以了解一下这个事情,也是未来我们写那个的一种思路啊呃,那先抽样,然后干什么事呢。做范围分区,假如说我们分三个区,分三个区啊好,那看到我们数据最小的是候800,最大的5000嘛,对吧,它分出来的三个区有可能是什么样的呢?哎,负无穷到一个2000,然后2000到一个什么4000,然后4000到什么到正无穷,哎,它分出来的区呢,是这样子,然后它把这个数据一变立比较。
03:25
那就知道大家怎么放的了,对吧,800是不是进到这个区啊,一千六还是这个区吧,呃,2975是不是这个区,好,那这样的时候,他最后只要区内是有序的,全局就是有序的,对吧?啊,他这种思想啊,用了这种思想叫范围分区啊,在MR当中呢,没有这种分区的一个规则,所以那你要想做到全局分区的话,它只能用于什么。只能用一个reducer做全区培训,因为多个reducer我按照哈希分区,最后我区与区之间不是说严格的有序的吧,对吧,这没办法做到,但是Spark里边都实现这种功能啊呃,这是我们所说的全职的一个一个啊,就就是你无论怎么设置来我们看一下,其实这边可以设置啊,是这个参数在下面一个在S里边,因为S它就跟分区有关系啊呃,我们看一下它默认的是负一。
04:24
那不可能为负数,大家知道对吧,那负一代表什么意思啊,根据你自己来定的。你斯克应该是什么样子就定成什么样子,对吧?那当然了,我们可以干什么设置成三改了对吧,我们再跑一下啊,看这我是不是已经设置为三了,对吧?刚才我们查了一下三我也没有关掉,当之前说过在这里边设置的参数是不是当次有效呀,对吧?它的reduce个数还是怎么样,还是一个啊,只要你用auTo Bet,它reduce的个数只有一个,因为它要做全局排序,它没办法用多个啊,这个要注意一下,当然了,还有另外一个,我们来看一下吧,还有一个DC对吧?啊,就是。
05:18
降就5000方最前面呗,对吧,一般的有可能我们求top n的时候,可能就要用到DC啊,因为在生场环境当中,更多的我们可能就求top n嘛,对吧,不会关注最小的最少的什么样子的,那我们肯定看什么最大最多的啊,看这种数据啊,一般的会加一个DC啊,这个跟马斯管没什么区别,主要是有个点,就是刚才我们说的,它全局只运行一个reducer,这个点要注意一下,你改reducer个数是没有意义的。
我来说两句