00:00
好,那接下来我们看一下grow back这边的一个优化,那有同学说那grow back这个东西。还是优化啊,它也可以对它进行优化,因为默认情况下,我们来看一下。你勾BY一个字段,假如说勾BY一个name。对吧,公办一个内,我这个内幕里边呢,有张三有李四有王五,我张三有10万条,李四五条,王五的十条。这是不是产生什么数据倾斜啊,数据倾斜是这个意思啊,当然呢,你可能除了这三个名字之外,还有很多的一个内容啊,它会产生数倾斜,因为他这样他会将。同一个P发给同一个维周,当某一个P过大的时候,就会产生什么数据清斜啊,说新引啊是这意思,第一个就是说还有什么东西呢?因为第一个就是有很多这个操作,并不是说非得在阶段才可以去做的,所以在这个过程当中呢,我们可以开启。
01:02
迈单去和啊,这个呢,默认就是开的,也就类似于假如说我们求一个count,它其实就类似于加了一个com,这个组件能听懂。Com组件干什么事了,是不是在map端做预聚合对吧,它默认就是开启了啊,就默认就开启了,因为像类似于我们刚才所说的,呃,求和求一个数量。com。对吧。你在阶段去聚合和在map阶段聚合会影响最终的业务逻辑吗?不会了啊,所以就不用这样做,那但是如果假如说这个句子函数我写的是。求平均值呢,那你就不能做这个合了,也就说了,这边说了,并不是所有的聚合操作都必须在什么维完成,很多操作呢,都可以在外端完成,那开了处啊,它自己去判断哪些东西是可以的,这个默认呢,就是开了啊,默认这开了,那第二个还有一个点在于这这个是map,因为global是不是global里面带来的问题啊。
02:04
对吧,啊,把它打开,它默认的就是开的,我们可以看一下这个值属性。出版,哎,默认它就是开的啊,默认开的好,那接下来是这个问题。这个东西。啊,这是两套啊,这个是脉搏教育啊,不是这不叫脉搏教育,什么叫脉搏教育,这脉搏单一聚合。Ma单一结合啊,那这里是两个表在一块操作的时候要开的吧,键默认也是开的吧,OK,那接下来是这个。他说有数据器写的时候进行负载平衡,也就是说假如说你感觉到这个数据啊,或者说你跑了任务测试之后,你发现这个数据器血有一个任务呢,跑不通啊,或者你抽样查看了一下,这里面的一个K,某一个K呢,确实比其他的要高很多,他一个人呢,就占了60%。对吧,其他的所有的K加在一块占40%啊,这个数据倾斜了啊,这导致任务完成不了,那你就把它打开,把它打开之后,它会怎么工作呢,这样。
03:04
它会将往的第一次整个的任务呢,生成点来吗?啊,假如说针对于group,当然没有什么其他的查询,抛开那个之外,就针对于当前这个公这个语句,它会生成两个任务,刚才我们不是说假如说张三这个内容,它有50万条数据。是不是如果说假如说我们会派它,它是不是会把张三这个东西内容发到同一个位置,怎么去执行啊,因为你要做聚合操作嘛,们group by对吧,不内张三好,那接下来如果说我们看到它之后会生成两个任务,第一个任务过程当中,它会将张三这个东西啊。随机的,就是说所有的K随机的。发送到不同的video。就类似于我们自己给他后面加了一个随机数,这种感觉一样能听懂啊,这个但是不是我们加的随机数,它自己随机的去做这个事,一旦你这个开启的话,接下来。
04:01
他会把这个随机分布到的东西再次做一个什么。聚合啊,两个任务,第一个任务呢就随机分配,第二个任务呢再做聚合,那这个我们用随机数来解释一下啊,假如说它里边默认的,假如说它是按照随机素这种方式,第一个呢,它是张三。本来对吧,张三啊,假如说呢,有十条吧,啊我就举个例子,有十条十条张三按照默认情况下,如果说只有一个任务的时候,这十个状态是不是进到一个维度方法里面去处理。对吧,进到一个维六三,一个维六方里,现在他生成两个任务,他会干什么事呢?假如说诶,他随机的第一个张三,我进到一个维六。哎,这里边有个张三,诶第二个呢,我就不放在这个,我放在这个。然后第三个我又放一个对吧,第四个我又放一个,好到了第五个我又放到这里了,因为是随机的嘛,放在这里了,好现在十个张三是不是分散到不同的里。那这是第一个任务结束,但是你分散到十个不同的,四个不同的里边,这是我最终要的张三的结果。
05:06
不是吧,哎,这个不是我们要的最终结果,那我们接下来干什么?再把这个东西用一个用一个任务给它聚合在一块。啊,再来一个任务,那这个东西是不是很像我们所说的那个map端聚合。是不是提前相当于把脉搏端聚合一下,先做一次聚合,然后把聚合结果,因为假如说我们就举波抗的这个例子啊,啊,你本来是这样四个20个吧,啊,我们举例20个,假如说前面有20个张三,本来你传的东西是不是张三一,张三一张三一二十个全部传到一个里面去做处理啊,现在我把五个传到一个,传到一个,再把五个一个,再把就每一个出来的一个,什么张三五,张三五张三五。再把这四个张三五做一次什么合并啊,再做一次合并,那有同学可能他法,那你这么麻烦吗?你甚至两个他妈叫我,那我就。
06:06
脉络单一结合不就搞定这个事了,我不说了。并不是所有的都可以在维生素上完成,这里面有两层含义,就有的东西是必须在什么。V64这边完成的吧,啊,必须在V64这边完成,也就这个意思啊,所以呢,这两个你都给,假如说你发现输入清洗的时候,你把它开启啊,它会生成两个,我们看一下生成呢两个MR任务。两个85,然后第一个麦阶段的输出,第一个M82输出的会随机分不到一个。每个呢做部分聚合并输入结果,这样的处理结果呢是相同勾Y可以有可能被分到不同的里边,我刚才说了,张三是不是分到四个里边,接下来这个呢,就是主要打造一个负载均衡,因为你张三太多了,我希望把张三给它分开。第二个。按照预处理的一个结果,再做什么一次reduce,这一次呢,就会按照这个Google key啊放到一块,就类似于我们刚才所说的那个点啊,去做这个处理啊,去做这些事情的处理啊。
07:10
它呢,就很像我们刚才所之前代表这是代表对于空气的那个加随机数的那种方式的一个处理。对吧,空K默认情况下,是不是进到一个,假如说你这个数据还要的话,是不是进到一个video去处理,但是进到一个video,因为空K过多这个。就会执行的很慢嘛,那我们加上随机数,让它进到不同的维啊不同的,那接下来呢,我们假如说这个空气呢,我还是希望进到一个进到一块去做处理,那我接下来这是什么。对随机数,我把随机数给它去掉,然后再进行什么。一下对吧,按照这个内容进行一个分组就OK了啊就OK了,这块大家理解一下,接下来这个内容,其实我们在之前讲那个案例的过程当中,比如课堂练习当中就提到。
08:00
看distinct的这种去虫的一个统计。这种要怎么做?要用go by来代替它啊,Go来代替它,因为呢,别人说了数据量小的时候无所谓啊,大家写的呢,都没有问题,这个对吧,执行呢都没有问题,因为咱们数据量小啊,放到一个reduce就放到一个reduce,那如果说它虽数据量大的话。那你同一个reduce里面去做,那这个video就处理的业务量就太大了,对吧,那我们就可以用group去代替。啊代替,因为呢,它是按照什么。我们后面的一个字段,将我们数据发到不同的video里面去处理的,对吧?啊发到不同video,那这个呢,会整个的任务可能会变慢,但是呢,它一定能保证我们任务的什么。顺利完成啊,如果说你这个数据量太大,你用distinct很有可能就会把OM存出啊,导致这个内存整个一个不够啊,整个一个不够。
09:05
那要对比一下,就这个里边呢,呃,23秒到50秒,因为这个里面用到了查询就两个阶段没。对吧,用到了发裙,因为不是先。就是如果说我们select select的一个什么内,按照那进去。按照内系种,然后呢,浮装每张表对吧,这个呢是可以求出来的啊,可以求出来的这个没问题啊,它的它的速度呢,因为我们数据量比较小,它的速度呢也会比较快,也比较快,如果说我们波还记得当时我们怎么写呢。的新from一个什么括号查询表吧啊。Name,然后from,假如说这个A叫A表,然后group a bad name是不是这样一个操作对吧?啊,这里面多了一个子量型,所以呢,你数量小的时候执行任务呢,肯定会慢一点,但是呢,它一定能保证我们任务干什么正常的去执行啊,正常执行是这个意思啊。
10:09
这个呢,我们我们测一下啊,我们测一下,嗯,Big table,我们已经这张表有了啊,已经有了,然后呢,数据也导了,然后呢,我们设置多个reduce,因为如果说你reduce的个数是一个的话。那你用和是不是效果也一样啊。对吧,啊,效果也一样,这意思啊,来设置一下多个啊,发到不同的维生素里面去处理,这样呢,就增加了它一个变形度啊,增加变形肉,一定程度上呢,还能提高它这个效率啊,提高它的效率,然后我们虽然表一下这个ID啊,做ID的一个驱虫。其实这里面应该没有相同的ID,当然我们的数据应该是没有。看了啊,这个呢,因为在数量小的时候,它可能会更快一点啊,反而会更快一点,这都是有可能的,然后另外一种方式,我们看一下谁来给它考ID,或者说写卡西都可以用from来自于让子查询的表,子查询表里面呢,Select ID from table group ID啊ID是这意思。
11:17
等大家执行完成,执行完成之后呢,我们把它也测一下。三是九点。39啊,就是这么多。诶,这个前后差这么多。无所谓了啊,然后呢,这个估计,那那这个是不是会标到一分钟了。
12:00
这个五个就对吧。刚才你看,虽然我们设置了五个维列色,但是它只有什么。一个你从这边这一个啊,这是一个。直接到100%吧,啊,因为它只有一个就一个啊,就算设置了五个没有用,因为你第这个驱动它只能放在一块去驱动嘛,而且呢,这块做了什么。两个肉对吧,两个肉。好,第一个任务看。因为我们用到了group be了,是不是分成了五个对吧,第二个任务是不是count的心啊,Count的新,你说能放在五个里边去做吗?一个吧,所以其实这块也能看出来啊,两个任务啊,这个呢,争超了一分钟对吧,因为按照这个电脑的一个损耗程度来说,差不多呢,这边加十几秒,这边也加个十几秒。对吧,啊应该是差不多的,也就是说这个呢会呃,速度会慢一点,但是呢啊这种情况我们这边就说了,虽然多一个角来完成啊,速度上面呢,可能会慢一些,但是在数据量大的情况下。
13:05
你这个就成功不了了。对吧啊,而我这个呢,是可以成功的啊,是可以成功的,虽然慢一点,但是呢,保证任务先优先执行吧,我们当时就说了,优化呢,不是说有50秒到40秒,这个叫优化,由不成功到成功是不是也是优化,对吧?啊不是说不成功到成功,是你之前思维写错了,这个叫句化啊。对吧,你之前说写错了,然后调调把调对了,说执行成功了,这个不叫优化了,优化是你这个搜索没问题对吧,搜索没问题,然后他执行不了,由于资源啊,各种情况执行不了,然后再合理的再少用一些资源的情况下,哎,给他完成了,这个才叫优化对吧。
我来说两句