00:00
啊,那正常的,对于联表效应是不是有大表小表的问题啊。在MYL当中怎么说的?小表放在。放在前面,也就是小表放在左边对吧?啊,小表放在左边,让小表去正常的去干什么,加载到内存啊之类的,也可以开启这个麦交应,还可以开启麦交应,让它加载到内存当中啊,实际上呢,这块其实到后期发展的时候,什么my have这块呢,它都做了什么。做了优化了,就是说无论大小表,你跟你写的时候没有关系了啊,他自己检测它的一个数据问题啊,数据问题,但是有一个问题在于,那什么叫小表,什么叫大表。对吧,我两张表数据量不一样,小的那个叫小表,大的叫大表,对于计算机来说,它会这样去识别吗?不会啊,对于计算机来说,你就告诉我这个表的数据量,如果说小于多少多少兆就叫小表,不是小于多少多少兆就叫什么,这叫大表,对于计算机来说,他肯定是对于这张表是一个确定值啊,不是说我们因为我们有时候沟通的时候来说,小表大表,大概的我们肯定有一个印象当中的一个概念,计算机它知道吗?
01:16
你告诉他小表哎,写的判断条件,这个衣服这个表小表就怎么做,那他不封了嘛,对吧?啊,所以说是一个固定的啊,所以说是一个固定的啊,这要注意一下啊,这个呢,其实开不开启的都是这个内容啊,小表我记得应该是25兆,如果说你这个数据的话,25兆以下的话,应该是小表啊这个数据啊呃,这个呢,我们也测一下啊,其实现在呢,也测不出来效果,测不出来效果,因为两个差不多这块呢都是,呃第一个默认呢是打开的,我们先看一下这个值对吧。默认是打开的,等会呢,我们去把它打开去关闭,都一样啊,都一样,大不了叫你小表啊这块东西。来一个大表。
02:03
叫big table对吧,这表语句接下来创建一个小表,其实这里面的字段,这两个表的字段都一样。啊,字段都一样,OK导进来,然后数据在哪呢?同样的在这个里边,这有什么。100万条。这个是10万条啊,我们也只能拿到这个数据集,其实在生产环境当中,所以说这100万条啊,也是销量,因为MY搜狗都能处理500~1000万的数据吧,那你害我处理个100万,你告诉我是大标对吧?啊,但是咱们虚拟机真给你十个亿数据怎么跑啊,对吧?啊,也跑不起来,咱也没办法,所以说我们测试的这个东西呢,做一个参考啊,做一个参考啊。呃,同样的把它也导到那个data里面来。先小表small table啊这个数据。然后还有一个。
03:01
Big table。你看这个数据就明显多一些吧,导的时候就长一些啊呃,然后导数据吧,导数据呢,我也就不写了,嗯,这个导数据in pass,这个干掉吧,以前呢,都放在这个S里边的啊,把它拿过来。走。这个大表导的时间都长一些是吧,因为上传嘛,这个是小表小表。小啊,这个时间的短些,因为数据小,它上传还是DS也更快嘛,所以呢,两个表,然后最后呢,我们做一个这个事。创建一个效应的表。啊,就是我们等会写一个思索语句交易之后,因为我们这个时候不能说两个表交易,把它打印到控制台吧。卡刷刷一堆对吧,10万条100万条这一,所以呢,我们用一个中间表去接收一下啊,创建一个交椅,OK吧,等会长的收据呢,给它扔到哪啊,扔到这个表里边啊,扔到这个表这个意思好放电下,然后呢我们写。
04:04
呃,首先呢,我们打开就是这个表啊,先先默认的是什么开启吧,啊默认的是开启这个呢,其实这个功能啊是那个麦join,等会我们要聊到麦join,那我们这样的把它关掉,不开启麦教,因为麦join的话速度能更快一点,因为麦join它是把小表缓存在。内存里边你们之前不是学过。MR当中的map效应就提供吗?对吧?啊在那个去缓存下来吧,啊就缓存下来,在这个地方呢,也直接开启就行了,啊直接开启就行了,我们把它作为for,然后你看一下我们此时做的是in inside overright table,这个是我们中间表达,然后是from小表交应。大表啊,我们先用小表交上大表来跑一下啊,因为他现在已经这两个数据啊都差不多了。速度都差不多,因为它底层做了优化,无论你是小表的钱还是大表的钱。
05:01
但是呢,作为我们养成习惯呢,还是习惯上发行了小表,你写在前面啊,写在前面啊,这个要注意一下就行。我们测一下,测完之后呢,我们记录一个数据,然后呢,把它再测一下,就是这个第二步呢,就是把这个大表写在前面,把小表写在后面啊,写在后面。两个map,一个reducer。OK,这个时间对吧,啊,给他拿过来,这个不要,你看我电脑是真的是对吧。你们可以测一下,看你们的电脑是多长时间,对吧,咱们一样的数据啊,因为我数据放在这嘛,然后呢,我们把这个再测一下吧,啊再测一下。啊,其实呢,差不多啊,其实差不多。
06:01
这个是大表在前对吧啊,小表在后,其实应该是差不多的,但是从之前的数据来看,差不多吧,三十四三十五嘛,啊,但是这次可能被震看一点这个是什么,怎么摘这个。等会呢,我们把这次的数据也给大家拿过来啊。有时候这些东西都是课堂上测的,测的直接就放在这儿,有时候就没粘。你们可以把你们的那个数据也放在这对吧,做完之后。对,这个演示这种东西就比较慢,因为你想想看,咱们数据跑100万,说实话这就两个效应,你看这个大表在前面反而还快一点啊。对吧,啊,反而快点,他本身就做了优化了,本身就做了优化,所以呢,你不用关心这个点,就是那个意思,它本身呢,去做了整个的一个优化啊,整个的优化这个注意啊,这个是麦教育。
07:01
这是我们所说的小米交易代表,但是你在面试的时候可以说这个事啊,说小表在前,大表在后,可以说这个事,但是你也可以跟他聊,这个东西呢,已经做了什么优化了啊,做了优化了好第二个。当我们大小表大表,交易大表的时候。大表交易大表的时候,那这个时候没办法了。对吧,你哪个写在前面都一样。啊,哪个写在后面,假如说他没做优化,你写在前面写在后面都一样,这里面呢,我们更重要的是要关注里边的一个空。空IE啊空IE那什么意思呢?就是说有可能我们教你的数据啊,教育的数据当中有一个表里边正好这个ID有很多为no的,对吧,有很多为档的,那这个时候呢,你要注意呃,如果你不提前过滤,那这个nu将来也会去做匹配吧。也会做匹配,大家知道交你的一个过程吗?
08:03
一行A表教育B表的时候,这边呢,有三条数据。这边呢,有三角数据,它校验的过程是什么样的。的第一行,哎,匹配下,匹配一下,匹配一下。对吧,然后同样的这个干什么。再匹配一下再干什么?匹配一下整个的过程是这样的,那如果说它里面有很多空K,咱们交易字段为空的话,那绝对干什么。匹配不上法绝对匹配不上,那这个时候我们就可以干什么,提前进行过滤啊,在就是我们之前所说的,你不要在效应后面写一个什么V要过滤对吧,提前就把这个东西给它代什么过滤掉啊,过滤掉这个时候呢,我们要开启这个那任务啊,你看去每一个任务的一个呃关系啊,看去每每一个任务的时间上面啊,时间上的一个点,那第一个我们还是同样的创建多张表。
09:03
第一个这个呢是原始表,然后呢,我们创建一个。空ID比较多的表啊,字段也一样的,然后同样的再来一个什么。两张表效应的结果表,那种意思跟刚才大表小表是一样的,对吧?啊,大表小表一样的,然后呢,分别是加载数据,然后测试不过滤空ID和过滤空ID,他们整个任务的一个情况啊,他们整个任务的情况,那我们把它拿出来C。走啊,这是一个表。然后呢,这也是一个表。好,接下来是中间的这个内容表。接下来我们就诶。哦,这个名字还叫叫呃。那就这样吧,你就叫教练table,因为里边的字段是一样的。对吧,里面的字段其实一样的,我们当时设计的就是字段是一样的,所以我还有这张表可以吧,啊就这个呢,不用重新创建了数据,不用我们已经做的O不就完了,对吧?啊做到O好,然后导数据,那这两个数据在哪呢?
10:07
对。这个。那ID的,那ID的这个数据还有一个原始数据啊,原始数据这个内容,把这两个给它导进来啊,我们看一下这个数据。你看这个打开的哦,半天,因为是大表加一大表。打不开了吗?对啊,这一堆数据啊,这一堆数据啊啊啊,这里面呢,都是我们买的或者爬的一些数据啊,买的数据从淘宝买的,淘淘宝十块钱你能买到好的数据。有卖数据的啊,你们要是想测的话,去淘宝自己买一点啊,然后格式啊,这这些东西都会给你啊,都会给你啊,就买一些啊,我们买了好,然后原始数据我们是不是应该也拖进来啊。嗯,在。
11:00
对吧。这个是大表,然后还有一个,还有那么100万条,也是一个大表啊,也是一个大表给他也扔来。然后我们把这个导一下啊,这两个表呢,其实从这个数据量上看一下差不多吧,啊,所以呢,我们要测的是大表交易大表,大表交易大表,然后呢,我们加载一下这个数据,加载一下这个数据load data啊这个应该叫刚才我们看到叫什么名字。原始数据我们要改这个名字命吧,我把这个地方改一下。在这个into到or表啊,漏的数据加载进来。测这种东西就比较麻烦,诶这个多了一个什么空格对吧。Phil。啊,对。给纳丝对吧,给纳斯加在。好,接下来这个内容吧。
12:01
看RC啊,这块也是有一个data s啊,因为以前测的数据呢,都是放在S。对吧。好,然后加载进来,加载进来之后呢,我们先测试无过滤什么。空数据啊,不过滤空数据来这个时候怎么做的,直接两个交应。连接。这个内容吧,空气是不是没有管啊啊空K没管来。做一个查询,其实你看这个时间。这个差十秒以上就能说明问题了吧?这不差十秒嘛,对吧啊对吧,接近差十秒,差刚才我们测的都差个一两秒了,差个一两秒跟我们这个整个任务启动啊,这些东西有关系啊,跟当时的一个资源情况有关系,但是差十秒的话就能说明问题了。对吧,啊,差十秒的话就有。或者如果说你这个任务跑了两个小时,那差十秒,那也说明不了问题了,那总共跑30秒,差十秒是不是说明问题了,对吧。
13:04
所以说差十秒也要看具体的场景吧。好啊。41.743。啊C,哎,这个跟之前差不多对吧,然后我们做一下空气过滤,那我们之前是不是讲到过,如果有空的你要提前过滤的话,是不是用子弹的一个方式把它提前过滤掉,对吧?然后再去做什么效应,我们之前是不是体到过这个点对吧?这个地方也体现出来了啊就我们之前上课当中讲的这块呢,我们会演示一下。这个呢,任务我们看一下它跑时跑的时间啊,正常的情况下来说,应该会差个十秒左右啊,就是你提前过滤啊,所以呢,它是一种优化啊,它是一种优化这个注意啊,它不光是我们说对于这个空气过滤啊,我们之前举的例子是假如说你这个数据集。你这你想加一个V什么n.ID什么大于500万。
14:03
啊,5000吧,是不是你可以把这个V写在子查询里边的,对吧,我们之前讲的这个事你不要看着,哎这块呢,老师讲的是这个cookie,那只应用在空气,不是这样的吧啊。走完了33差不多吧,这次八秒是吧,啊四十一三十三八秒,大概每次都是八秒九秒十秒左右吧,大概这个范围,也就是说过滤提前过滤还是很有差别的啊,还是很有差别的,这个是我们说的啊,大小表的一个交易啊,然后接下来还有一个。空气转化,那这个讲的什么事呢?是这样的。呃,刚才呢,我们是直接把cook k这个数据给干掉了,对吧,但是有时候啊,生产环境当中,虽然这个ID假如说我交音字段这个东西是空的,但是其他的数据是不是可能不为空。对吧,有可能这个数据还要啊,你不能过滤掉。
15:00
是不是有这种可能性对吧,那这个我们要怎么做呢?我们要给他付一个随机值。负一个随机值。啊,付一个随机值啊,因为是这样的,如果说你有大量的空K啊,同时呢,这个数据不是一张数据,你还要要的话,要在交易交易结果当中,对于这种数据呢,最后在计算的时候,如果你不做处理,他这种空K啊会到一个什么。Reduce里边去处理到一个维,因为它都一样P一样的嘛,对吧,进到一个维处理,那这个呢,会带来什么。数据新写,那我们要处理的方式就干什么,给他付一个随机值,你不是闹吗?你本来都到一块,那我把那后面加一个一就平D个一平接二,平接三平接四,那是不是把你能发到不同的reduce去处理呢。能够理解这个事对吧,你本来呢,所有的到一块,现在呢,我把它发到不同的维度的去处理啊处理那这个地方我们怎么看呢?首先要设置什么。
16:04
多个维六色,假如说呢,我们设置成五个啊五个接下来呢,我们同样的还是做这个事。因为这个时候我们说了这个数据呢,那我们还要因为它有用,所以我们不能做刚才那个空气过滤那种操作了,还只能做这个方式啊,但是做这个方式呢,你会发现多个任务基金啊。它数据啊倾斜,数据倾斜,那这个数据倾斜怎么看呢啊。数据倾斜和数据量大。不是一回事吧,数据倾斜会导致任务慢,数据量大是不是也会导致任务慢?他们俩讲的是一回事吧,不是他们俩怎么区分啊?数据量大是慢,但是它是所有任务慢法,数据倾斜也是任务脉,它是某一个两个几个任务慢,大部分都是什么比较快的,对吧?啊所以呢,你要注意收集倾斜和那个内容。
17:12
好,这个跑完了五个两个,那接下来我们来看一下。任务,我们打开这个刷新。这是最后一次我们跑的教育,对吧?啊,成功了点history。然后五个吗,点开。你看五个二十二七。看见了22秒七秒,那普遍的大概十七七对吧,有的呢差距比较大了,这个呢,就是我们所说的数据器械,因为我们只有五个reduce,生长环境当中呢,你的reduce个数大家以大家随便猜啊,你猜一下你觉得生长环境当中这个reduce个数应该是设置成多少个。几十个,十个。个5000个上千个啊的一个个数对吧?啊,要注意一下身上中,因为数量大啊数量大啊,同时呢,要分的越细一点,那就会啊整个的一个加速B行之行嘛,维周色这边也不是并行的对吧?啊几千个都是很正常的啊,上千个啊,不要想着几十个啊这些东西啊,这块呢,我们只有五个对吧,都能看出来22秒和什么。
18:27
七秒和七秒,OK,那我们接下来做一个事情来啊,以前是18秒跟十秒啊,以前的18秒这个还好一点,现在我们干什么事呢?同样的V6的个数我们不用做了,来看我在里边做了什么事,看这个色我们把它粘出来。啊,站在这儿来好看一点。银色的这个table,这个不用看了,看这个查询n.C也不用看,From这个是什么空的那张表,然后教原始表吧,然后什么东西来看。
19:06
应该到这个地方。o.ID是不是这张表,我们说这张表里边是不是有很多空K啊,但是还不能过滤掉,那不能过滤掉它就会产生数据倾斜,因为进到一块去处理啊,那我们怎么做呢?当这个N点如果它被闹,那我们做什么事?拼接一个have和一个随机数。啊,随机的啊,然后接下来如果他不是那呢,那你得用自己吧,因为他还要做教育呢,是不是啊,还要做教育好,而且你在做这种事儿的时候一定要注意,你要保证这个ID不是真的是汉加一个数字啊。能听懂吗?如果说这个ID本身也是看不家数字,那你本来人家空的,本来人家不教你的,你把它交易上了吧,对吧,对吧,你这个意思就是说ID呢,假如说1234,我就来个字母,保证它还是同样的交易不上跟那一样的效果,对吧,那这个东西来做一下。
20:04
啊,那这个呢,它会。总体的时间会加长啊,来看一下这个是不是48秒啊,把它放在这啊,就是整体的任务呢,时间会加长,因为你刚才是闹不做处理,现在我对none干什么。做处理对吧,你中间一一直在转换啊做处理,所以时间上面它会加强。被加长,但是呢,它会降低我们什么数据倾斜的问题啊,数据倾斜问题,刚才不是我们这个数据不是有吗。对吧,二加。诶诶。哎,我怎么我怎么他干嘛呀,对吧,应该要要这个吧,啊保留下应该这等会呢做一个对比,怎么还是呀,这有毒吧啊我真的是他呀,这是他了吧,我就说我刚才不是这吗,这么神奇吗个。
21:09
总体时间刚才48是56是总体时间会长啊,因为你对这个数据做处理嘛,但是我们更关注的是哪块啊。刷新最新的是这个任务吧,45没问题吧,46结束的啊,In history,然后同样的看这个。哦,我知道刚才怎么回事了,这个啊,那有同学说你这个东西啊,我刚才22秒最大,你现在基本上22秒最小了。对吧,这个不好,但是你要注意这个,我们看一下这个三十二十一,这个22跟七解决了什么问题啊。数据倾斜问题啊,因为你里面做了操作嘛,所以每个任务时间都会长,这个是正常的,但是你要注意,在生产环境当中,一旦发生这种数据倾斜,很有可能你这个任务在干什么,跑不了,因为我们还是数据量小,他还能跑起来,数据倾斜带来的问题不是说简单的这个22秒七秒,而是说这个任务。
22:19
很有可能就什么就挂掉了,而且我们知道MR任务来说,你一个任务挂掉了,你整体这个任务能成功吗。用不了的对吧?啊,所以呢,一定要在解决什么数据倾斜问题啊,数据倾斜问题这个呢,我们是解决了数据倾斜的问题,虽然总体时间会加长了,但是呢,时间长了,我们能保证这个任务能安全的执行完,因为当前每一个任务里边的东西都发到不同的任务里面去执行了吧,啊之前有一个任务是干的,现在呢,发到不同的任务里面去做啊,这个是是这个事啊。这个时候我们大表交易小表以及大表交应大表。
我来说两句