00:00
好,那关于这个表的优化,那无非就是说表跟表之间去做招引的时候,我们要考虑它的一个优化,如果单表查询,其实那你要注意一下,后面呢,我们也会有单表查询的时候,现在我们是两张表做照应的时候,如果说我们现在的表呢,是一个大表一个小表做正。那我们肯定希望用什么map,所谓的map是不是它会自己把小表缓存到内存里边,然后慢慢的去加载大表的数据,在map里边去找我们的什么?找我们小表当中对应的那个数据嘛,对吧?啊,它这样子的好,那其实在之前的写法当中,我们应该用小表驱动大表,也就是小表放左,大表放右对吧,但现在其实内部它已经做了优化了,你放在左边右边都一样,等会我们可以通过执行计划去看一下对不对,对吧?好,那我们呢,做测试啊,首先呢,要测两个表的一个效率对吧,照应的效率,呃,开启map默认就是开启的。
01:10
默认就尾数对吧,所以说底层做了很多的优化嘛,好,那接下来呢,还有一个,呃,那我们所说的大表照应小表,把小表还内存。那我们写的circle是不是应该让我们have,或者说执行任务的这个人知道什么叫小表,什么叫大表?计算机他知道你告诉他说小表大表,他他知道他怎么知道这个是小表还是大表啊,所以他一定有一个配置信息,哎,就是这个内容就是它此节数其实近似的就25兆对吧,当然25兆肯定带了后面的一啊,其他的一个小数啊,这这些位置都有对吧,就近似的25兆,当然这个参数既然我们可以设置出来,能看到是不是可以调,那我们如果集群资源足的时候。
02:05
我们是不是可以把这个值调大一些啊,你缓存进去,如果说值不足,你不要调大啊,你调成250兆,呃,假如说我们整个机型资源只有什么500兆,你非得说把这个调成400兆,就缓存一个400兆的表,你觉得任务还能跑吗?把400兆表已经缓存到那了,就硬生生的吃了400兆内存了。对吧,然后你百兆就跑任务,这个不太靠谱吧,所以说这个东西参数设置是不是根据集型资源来的,这个没问题吧,好,那他既然开启了,那我们呢,接下来去创建表机制,我们就不聊了,其实就是说大家在MR当中都写过麦状的一个代码,对吧,就是说把一个小表呢,缓存下来啊缓存下来啊好,那接下来呢,我们看这个好,那这个地方呢,我先把这个关掉啊,嗯,把那个关掉呢,把这个关掉。不让他用什么本地模式啊,因为生长环境当中数据量大嘛,肯定用不了本地模式啊,所以呢,我们先给它关掉,呃关掉好了以后呢,我们来创建几张表啊,第一张呢,创建一个大表,一个table啊,这里边的一个字段,等会呢我们会有数据啊叫big table,这张表创建,然后呢,我们再创建一个small table小表啊,就25兆以下的,这个是大于25兆。
03:26
接下来呢,我们还放一个什么东西呢?创建一个转移表,这个表呢,是将两张表转移之后的结果放在里面了,因为我们不能说转移之后把数据导到控制台嘛,因为等会我们大表是100万行数据啊,这个是10万行,那你如果打印到控制台刷多久啊就不好了,我们就写到表里边,对吧?啊,就这张表是做最终的写入数据的一个操作的啊走一下,之前我们说了,他把左边跟右边呢,现在没区别了,那我们主要看一下这个S语句啊,S语句然后呢,我们把这个数据导进来啊,数据在哪呢?在这啊,还是在data塔里边,这边呢有一个什么big table,它呢是100万行的这个数据我记得应该是120多张了。
04:10
123兆,这是大表,然后下来呢还有一个小表,小表呢是九万多行。啊,它呢,就是12兆左右呗,少了一半对吧?啊,不是少了1/10啊,就是它的1/10啊,OK,这是两张表的数据,我都给他干什么,拖到咱们的集群里边来,然后还有一个大表的数据,这100万啊,你也可以打开看一下,别说我好像在骗你是吧。应该我记得是不到199万多啊,99万多,这前面正好这个撒烂呢,可以给我们显示。行号啊往下拖。999998啊,就是差两行嘛,无所谓了,对吧?啊无所谓了啊,这是搜索日志啊,就是说这是平台当中去,呃,买了一个数据,就是说在那个平台上去搜索的内容,就是在那个百度啊,或者说谷歌搜索框里面查询的东西啊,搜索日志啊,行,这个东西我们看一下确实是100万对吧,那接下来呢,我们是不是应该把这个数据导进来啊。
05:14
对吧,数据呢,我是放在这个OB比0MO6电塔底下的,是别放错了啊,没问题啊,行,那我们把这个导数据倒过来,哎,错了,在这啊,在这漏的进来,好,那接下来呢,我们再把这个漏了进来,小表的数据也加载进来,一个是100万行,一个18行,当然是少两行,对吧?无所谓的,不能说100万行差两行是无所谓了,对吧?啊,那接下来呢,我们就看一下它左边放小表跟右边放小表的区别,我们就可以用X plan来看了,对吧?呃,这语句呢,我先不往这里面放啊,因为它要执行一会,因为只要看执行计划,如果两个是一样的。那你执行的内容,你这个时间能有多大差别吗?肯定不是的,对吧?好,那我们看一下他做了那状语,它是怎么做的,对吧,我加一个X,然后呢,把这个so放在这好130多行,这还比较长是吧。
06:13
这个只能摘出来看了,好先摘出来对吧?呃,然后接下来呢,我们再去爱一个看刚才呢,我们是把小表放在什么前面的啊,取别名S对吧?大表放在后面两个交易计段呢,放在ID的位置啊,然后接下来呢,这个查询把大表放在前面左边对吧,小表放在右边啊,然后呢,我们就看一下它的一个中计划,我们先呢去拿一下对吧。这个到我看一下,这个是大表放在前面的,对吧,把它拿来。嗯。好,那看一下,首先呢,我们这个是小表噪音大表,这个是大表噪音小表没问题吧,好行,那我们看一下它里面阶段还蛮多的是吧?啊是跟阶段啊,然后呢,它是一个混合操作,就是说有两个操作,就是说这两个呢,它互为备份的关系,大家看我对吧,所以我们就不用管了啊,那么接下来呢,我们看这里边它是怎么做的,首先天看这扫描的是SS,是哪张表,小表S对吧,取得别名好,那么接下来呢,它里边还自动组了一个过滤,就是有一天有同学当时问我,他说两个,那能不能连接在一块,其实你做状语的时候,他会把你这个now给他干什么。
07:44
自动过滤掉nu值就不要了,Nu值去连接,连接什么呢?对吧,所以它自己相当于做了优化啊,不用你写了啊,直接把nu值干掉了,所以有的同学直接问,哎,两个nu能不能照应,那你看这个能不能照应,肯定不能直直接查询的时候就给你过滤掉了,都没有囊数据的,对吧?啊,所以它不能照应在一起啊好,那么接下来呢,他做了一个什么事呢?做这个事。
08:08
他并没有去启用什么MR任务,对吧,他是一个抓组操作,然后呢,叫哈希把我们数据放在这,那我们先放一放,知道一下这个事情对吧?他做了一个哈希table,等会呢,我们来介绍他是干什么用的啊,其实他就在给麦呢做准备啊做准备,那这时候只是一个MR整个任务当中的一个什么,再去操作啊好,那接下来我们看这在扫描谁了,大了了,然后接下来看啊。我们去找一找我们要的东西啊,嗯,查询的操作还是里边的字段对吧,这是我们最终要写的那张表的字段,看这。嗯。他启用了什么对吧,用到了那啊,因为他把小表呢,缓存到内存了,刚才呢,先去抓取小表,在那大表去操作的时候,是不是要做join了,而且这个照是一个什么照是一个map。
09:18
啊,启用了一个map,好,那这个时候呢,我们再给大家测一个东西。来我把谁呢?我把他的一个这个东西啊,给他干什么关掉对吧,然后我再去执行刚才同样的一个排。你注意观察这里边的一个变化,对吧,还是用小表什么。赵一文的大表就是66了,明显少很多了,对吧,这里面呢,看一下啊。好,刚才我们看到的那个任务,我们做一个对比啊,来把这个放在这这个呢,它是不是分为两个不同的阶段嘛,就是两张表扫描放在两个不同的阶段里面,先去扫的小表对吧,然后扫的大表,然后启用了什么。
10:17
Map,那大家想啊,如果说我不用map,你再想一下你之前所写的MR任务video,你扫描数据的时候,对于这个map任务而言,是不是两两个文件一起扫?对不对,来看写到这来,它是统一的,只有一个stage啊,第二个就是抓取了,就最后呢,就恢复数据了,对吧,然后呢,Map map操作里边看啊注意这是大的一个标签对吧,这盖小表盖大。因为它是没有那个所谓的什么map照应的,在哪去照一的维阶段照应的,在map阶段是不是把两张表都加进来,对吧,那这种效率肯定怎么样,第一因为它用的是re resource join啊,那所以我们是不是通过执行计划也能看出来一点东西啊,对吧,确实启用了诶map join之后呢,确实生效了,先呢扫我们的什么小表的数据,然后呢,在读大表数据的时候启用的是什么map脉不着好,那接下来这个地方啊。
11:25
阶段是一样的,这个还记得我们是哪个执行计划吗?是不是把大表放在前面,小表放在后面没问题吧?好,来看一下。它执行计划里边扫的先扫的还是这个小表,然后又一个阶段在那边扫描大表的时候用的是什么,明白不着,是不是跟刚才一样对吧,所以我们刚才说了,现在他只能做了一句话了,你把小表跟大表。放在左边右边有什么区别吗?没有区别啊,这这法都一样的,它是根据那个25兆去判断谁是小表,然后就开始是。
12:06
把小表加载到内存,然后启用我们的map中,当然这个前提啊,能用map,你肯定要把咱们这个什么,就刚才我们那个属性。设为处对吧,而且这个属性刚才我们是不是看到了,默认的它就是什么,就是触,所以说关于大表跟小表造影的时候,是不是也不需要我们去做什么事,对吧?因为它底层已经做了优化了啊,已经做了优化了,是这样的,那以前写的时候呢,一定要注意了啊,啊小表,所以说你到工作当中会发现,呃,有一些员工呢,还是一样的,你的同事啊,还是一样的,习惯上。自己写的时候把小表写在什么,写在左边啊,先写左边小表啊,那是因为它习惯了,因为老版本当中呢,是我们要手动了,对吧,你得手动去放了,现在呢,不用了啊,他已经做好了优化了,对吧?这是我们所说的大表跟小表的一个照语,启用mapb join语,那能用mapb join语,我们肯定用mapb join语,对吧?啊,效率会高很多啊,是这样的一个情况啊,行至因为执行这个搜索语句呢,嗯,可以大家自己去执行一下啊,因为他要跑mmr嘛,我们看执行计划就知道了,对吧?所以也不用去执行了,因为执行计划都一样的,那你跑出来东西还能有什么大的差别嘛,对吧。
我来说两句