00:00
好,那我们昨天呢,其实主要讲的就是这个压缩啊,存储啊,优化呀,这块内容,对吧,这块内容呢,是大家需要去理解了之后去记一记啊,尽量的就是因为就说实话,你现在当然现在大家也知道你把它记住了,到面试之前肯定也忘了,但是呢,你多记几遍,你不要指望那个面试之前记一遍,你现在就算你背的苦瓜烂熟啊,你到面试之前,如果说你后来不看的话,你肯定会忘,你肯定会忘,那有的人说是不是这时候,那我就不记了呗,反正也会忘,对吧,但你多记几遍效果是不一样的,你记熟了,你肯定会有一些印象,你再回过头来看的时候,当时理解就会记得更清楚一些,在面试的时候都会发挥更好一点,因为呃,之前就提到过,面试的时候你是比较紧张的,对吧,你准备的东西越多越好,你就准备那一点东西,说面试当中问问这么多,我就就准备这么多。
01:00
那这不可能的,那你不可能能面的好对吧,因为你会面试的压力比较大,然后会忘忘掉很多内容啊,所以你要多准备啊,而且呢,后面我们还还会去带着大家呃,复习好几遍啊,就是整个的做项目啊,我们所谓的项目呢,第一个是把我们所学习的框架要串起来。因为现在我们学习的时候都是单个框架,单个框架的,那我们在生产环境当中肯定是结合在一起去用的,对吧?那就是项目所做的一个事情,把它串起来,第二个呢,就是复习,那学了一段时间框架了,那我们要去用一用,嗯,已经过了很久了,再用的时候你自己也会,诶,遇到不太熟的地方,你自己也会去复习,那么课堂上呢,我们在讲一个项目涉及到的之前的一些知识点,我们也会带着他复习,对吧,这是用项目去复习,那我们还有好几个项目呢,涉及到的这些框架的时候,我们都会去提一提啊,带着大家把这些东西去串一下啊,到了最后的阶段呢,我们还有专门的这个面试题课。
02:06
啊,就包括那个咱们常规的这些面试题,以及关于项目的面试题,还有关于你那个工作经验,其他的这些东西的面题啊,都会带大家去看一下,所以我们在课程设计上也是分多次的,对吧,去去反复的去复习,因为大家都知道一个东西不是记一次就够了啊,特别像这些东西对于大家来说,就现在来说是陌生的啊,所以你自己在这方面呢,就是我们提到了要去记,那你就记就好了,不要就丢到最后一次,非常痛苦,之前也把那个面试题给大家看了200多页,你说全部放在面试之前那一周,那两周去背去记。啊,当然死记硬背也能记下来,但是呢,肯定效果不好啊,肯定效果比较差,所以呢,前面要去记一记啊,这里面昨天所讲的东西呢,基本上都是要大家去记的,因为偏理论,昨天早上我就说了,昨天内容会比较枯燥对吧,因为它是偏理论的东西啊呃,之后呢,是我们先聊的这个压缩和存储,其实这块呢,我们做了很多的一个测试,最后得出来的结论就是说,呃,对于汉堡言,其实我们使用orc加snap对吧,用orc的存储。
03:20
格式以及用sta的压缩方式,用这两种结合是最优的啊,所以生产环家当中可能用的会多一些,对吧?那当然呢,也会用到其他的啊,不是说有的公司就是说虽然你可能相对于来说优化一点,但是呢,有可能这个数据不光要给这个,还不要用,我Spark也可能会用,那我们可能再直接用。啊,因为在Spark里边,它默认的认的这种格式呢,是这种格式啊,对于Spark来说,而且是Spark搜克里边,这是后期大家群的,那也就是说看你公司当中具体的应用场景了,应用场景了好OK,如果说你进到了一个公司啊,它已经是一个比较成型的公司了,那么这些东西就跟你没关系了,其实人家都已经定好了。
04:07
对吧,除非你去的是零到一的一个规则,就是说你去了可能是第一个第二个人,整个整个团队的,那这个有可能你来决定,那到时候呢,你就根据咱们所讲的那个内容,对吧,从效率啊,压缩比啊,呃,查询啊等等这些方面去做一个处理就好了,呃,那之后呢,做的对比实验对吧,这个是你我当时也说了,你你要想去测,你就测一下,如果说你觉得晚上时间本身就不够了,你也不用测了,因为课堂上测的,测出效果肯定跟我这还一样的。对吧,那你就记一下啊,把那些对比的记一下就好,大不了把那个里边的一个,呃,文件大小你都摘出来,对吧?啊,专门的去记一下就好了,呃,之后呢,是我们第十章的一个优化这方面啊调优,呃,那调优呢,还是要去记的第一个X代这个东西啊,呃,这个东西呢,是我们看执行计划用的,一般在生产环境当中,特别是那种就专门做这个嗨客开发的人,他们是必用的一个工具。
05:07
啊,必用工具,因为我们之前就说了,在生产环境当中,我们有时候一个色呢,一跑起来动不动就几个小时,那我们优化完之后,你从的直接跑一遍,这个事情不那么靠谱,对吧,你要拿到结果就太反了,一般呢,我们就可以看执行计划,看我们优化之后,这个执行计划变成什么样子,一般是做这个事情对吧?那假如说我们把这个ma给它打开了啊,跟不打开,你可以去对比,去看一下之前我们是不是做过对比,没有照的时候,它是不是无论你把那个小表写在左边还是写在右边,它都会去先去扫描这张表,然后我们能看到执行计划当中用的是fto。对吧,啊,如果说我们把那个属性关掉,然后去看两个表的执行计划。哪怕你是大表跟小表,哎,小表写在前面,但是不是走的还是reduce照对吧?啊昨天我们测过这个内容啊,那这个就是说那明显的呢,我们肯定用never join这种相对来说更更优一些,对吧?啊是这样的一个意思啊,就是说plan这个东西呢,如果说呃,在工程当中,你真的只是负责写开克的话,那一定会用到的,包括my circlel myql当中呢,它也有这个关键词,X看直行吧,啊在买S当中呢,因为对于做优化的时候,我们可以去建索引啊,建其他的一些内容,那我们就可以通过这个执行计划去看一下当前我们这个S,你见了索引之后有没有用到索引。
06:38
啊,能看到这些事情,如果你见了索引之后,你由于你写的所有问题,可能会导致索引失效。啊,没有用到索引,类似于这样的一个情况,对吧,这是在工作当中专门做这个开发的人一定会用到,好那之后呢,是我们所聊的泛制抓取,那我们想一下泛抓取是指的什么意思。就是有一些访问这个SDF数据的circle考可以不执行MR任务。
07:12
对吧,可以不执行他妈任务,效率比较高啊,这是所谓的flash抓取,默认的呢,它就是最优最优的状况了吧,就是默对吧,所以呢,我们不用调了,然后本地模式呢,讲的是什么事。对不将对,数据小的时候,我们不使用雅安去帮助我们调度任务,而直接在本地去取,它就少了中间跟雅安那些乱七八糟的通信流程,而且呢,它是数据小的时候啊,默认情况下呢,它是128兆文件以下,呃,然后呢,总共的文件数不能超过四个啊,当然这个值可以调,一般的呢,呃,也不会去太去调,对吧?如果说你超过128兆,那我们放在集群当中运行也可以。
08:00
是是这个意思,那注意啊,这个本地模式跟我们的。提交就是MR的运行环境有关啊,到底是提交给雅安还是本地啊,指的是这个意思,就跟大家在idea里边运行的那个任务是一样的,所谓的本地模式就local对吧?呃,那表的优化当中,小表跟大表进行一个转引。默认情况下map是不是已经开启了,对吧,所以不用管了,但是我们要关注一个点,就是说这里边有一个参数。什么叫小表,对吧,默认是不是25兆以下它就是小表,那生产环境当中,如果说我机器性能比较好,假如说我一台服务器是128个G的一个资源,那我可以缓存更大一点吧,对吧,我可以把小表的一个限制,把它调高一点,那是不是有会有更多的。状语语句可以启用,可以用到咱们的map啊,因为一旦用了map,它比这个效率要高很多的,对吧?啊是这样的个情况,这是我们所说的map,而现在呢,我们测试发现,当然了,我们没有去运行,对吧?我们当时是看执行计划的,是不是把小表写在左边还是写在右边,没有什么区别,他都会找到那个小表去缓存,然后对大表去进行map draw,对吧?啊,这是我们昨天看到这一计划,这是小表跟大表的一个join,那接下来大表跟大表状移呢,想一想分为两大类,有空K跟没有空。
09:32
对吧,啊,有空K跟没有空K好,那如果有空K的情况下,而且呢,我前提是我们得用的是level draw,类似于这样的不能是in the draw,如果in the drawing,那你有空气的话就无所谓,你不用处理,因为他自己是不是会做优化,把空气给它干掉,对吧?啊把这个给他干掉啊,好那。假如说了cookie,我们且用的是LA,那这个时候两种方案。
10:04
一个呢,看这个那值你要要不要对吧?啊,就根据这个分这两种情况,如果说还要呢,对我们整一个随机数对吧,如果不要呢。过滤空先给它过滤掉,对吧?啊,把空气过的给它过滤掉,它不像照它自己会过滤,如果用LA它不会过滤对吧?啊,它不会过滤啊,这是我们所说的,呃,空气比较多的时候,那假如说我就是简简单单的两张大表啊,所有的数据呢,都是全的。我们用的第三种方式叫什么分筒去照引对吧?先分筒啊,然后去做照引,那其实就是说因为两张表要做照应嘛,肯定有关联字段,那我们要根据关联字段呢,将数据进行一个分筒,所谓的分筒,其实它就是把这个表当成数据分成了不同的什么文件,对吧?那接下来再做照应的时候,我把对应的文件放在一起照应好。
11:07
对吧,把所有的结果合并起来,那就是我们全局的一个结果吧,对吧?啊是这样的一个场景,因为你两边如果分成统一样,它都是根据join的字段进行哈希的,所以说你本来应该转在一起的数据一定会进到相同的一个文件比例对应的文件里边,那就是相同的桶里边,是不是这个意思啊,然后呢,效应的时候呢,它会对应的桶照应在一起,把它合在一起就好了,对吧,它通过这种方式来做的啊,所以说效率会比较高,因为你本来两张大表在一起转这一边,左边这一条数据是不是会找右边所有的数据。对吧,这个效率就比较低了,那这样的话,我明显就相当于其实还是符合那个MR的思想嘛,先分后合对吧,你文件太大,我就把你文件干什么,分开拆开对吧?而且呢,我们测试效率,就拿我们虚拟机只有100万条数据测都差一半一半的速度,对吧,昨天一个八十八八十多秒,88秒是吧,一个是49秒是不是啊,差一半效率还是差的蛮多的啊,对吧?所以说呢,在公司当中,如果说用到大表这个数据量特别大的时候,对吧,那你就想考虑到,而且呢,你发现这个照影运行的特别慢的时候,你就想一想,哎,咱们还有大表跟大表之间的一个什么。
12:22
赵颖啊,它的原理应该是不难的,其实就是把数据分开对吧?那接下来所说的goodbye goodbye这个地方呢,很容易产生这个所谓的叫数据倾斜对吧?啊,数据倾斜啊,其实这也一样啊,你在做出此照引的时候,它也容易产生数据,因为他要把相同的key发到一起嘛,对吧,他要把两张表,如果说你做的reduce照应啊,他把两张表的数据放到一起啊,也容易产生数据些,那go by也一样的啊,因为我们要按某一个字段进行分组啊,所谓的分组呢,其实就是在MR当中放在K的位置,那如果说某一个K。
13:01
频率特别高,出现的频次特别高,那么就容易产生数据信斜,对吧?啊容易产生数据信斜,所以呢,我们在这个时候怎么做的,对于group这一块,对打开一个属性,我们最终呢,可能开启两个,他第一次他自己会把我们的T给他分散到不同的里边,然后再去干什么,再做一次聚合,对吧?啊,双重聚合,类似于这样的事情啊呃,下面的count distinct的这种在数据量大的时候呢,咱们就不要这样用了,Countt主要在于什么原因?为什么说数据量大的时候,我们不要用count这种方式去去重之后得到我们的对他只有就全局只有一个,他会把所有的数据发送到一个里边,那如果数据量很大的时候,你很有可能就跑不成功,对吧,那就算你能跑成功,效率也怎么样啊,比较低对吧?效率比较低啊,这是一个点,那我们不用那个,那我们怎么用呢?我不用他我怎么用呢?
14:24
用group by来做驱虫对不对,对吧,我用分组来代替驱虫,也就是说这里边的完全可以换成group by对吧?那你的这个字段,那我group by这个字段一样的啊,一般生产环境当中更多的时候用的是group by这个字段来做去重啊,那至于come,那就是go之后我才看新就好了呗,对吧?啊,这就看你之后的需求了,到底你去虫之后想做什么,那我们主要这块所讲的东西呢,就是distinct的这种驱虫在生长环境当中一般会被这个go back所代替,对吧?那所谓的第二题就尽量的要避免的对吧?而且我们知道后面严格模式当中,生长环境当中那个肯定是开的,所以你写的消费当中有第二级,他就会告诉你他不让你过对不对,校验的时候,他直直接不让你过,说你这个东西呢,有停二级,那你就知道了,因为我们尽量肯定要避免这第二级的啊呃,然后接下来所谓的这个行列过滤,真的是吗?好是。
15:25
行列过滤。列过滤指的是尽量的不要用select c c select的选择我们想要的子弹对吧?啊是这个意思,那行过滤呢,对啊,不想要的行给它提前过滤掉,一般呢,就写在子化菌里边对吧?啊,写在磁发这里边先过滤,能先就是能把这个过滤条件写在最前面的,那就先过滤,因为你一旦对这个表过滤之后,你接下来的操作数据集是不是就降下来了,对吧,那你操作的效率肯定就怎么样高了,对吧?而且我们在当中还提到了一个,呃,有一个所谓的叫被词强K,因为我们当时看到两个状语的时候,我们把不要写在外面,如果说是对于join音字段进行的一个。
16:13
过滤它会应用到两张表里边,对吧,这个就叫位置下推,但是呢,这种情况啊,大家注意一下,它有可能在你稍微写的很复杂的时候,会导致被此下推失效啊,那正常来说它只能做优化,它都会先走这个V,要哪怕你在照应之后写的V,对吧?不是写子查询它也会先走,不,这是他自己做的一个优化,但有可能会导致他这个失效,那所以呢,我们建议大家在写的什么呢?我们就写子查询对吧?我们手动的给他过滤,而且我们写的紫查菌它一定先走了,这就不涉及到失效不失效的问题,所以说这种更安全更保险一点,对吧?所以我们建议大家呢,哎,在行过滤呢,我们先去写过滤条件,然后再去写其他的状业上其他内容,对吧?那接下来两个是分区和分筒,分区呢?那毋庸置疑,优化方案避免全秒扫描,怎么样避免全秒扫描?
17:07
是我建立了分区表,它就能够避免全扫描了,我这个表是分区表,他就能够直接避免掉全表扫描吗?不是吧,要看我们的S对不对,在我们的过滤条件当中应该要写上什么分区字段的,关于分区字段的过滤条件对吧?啊,那就可以避免掉全表扫描,只找我们想要的这个分区,那这后呢是我们所说的分筒,分筒呢,其实在生产环境当中我们也提到,呃,直接用的其实很少啊,它的主要应用场景就刚才我们说的大表跟大表之间做照引的时候,对吧?类似于这种优化的时候它会用啊,直接说非典我建一张分钟表一般很少这样去玩啊,啊顶多在过程当中建的分区表,这个我们当时在讲分区分同表的时候就聊过了,对吧?它的应用场景呢,主要在这个优化当中,然后接下来是这个设置reduce跟map的一个数量。
18:08
那把这个参数整理到你的笔记里边,对吧,就是说type当中如何设置map以及数量,这个记住就好了,因为这个不是固定的,就是你公司当中跟你的数据量,跟你的业务这些东西是有关系的,对吧?就类似于假如说你的文件就一个字符。跟文件1K2K,那你设的map这边一个map,就是说一个map主体多大的一个文件数据量是不是不一样,对吧,那因为他每一行都会调用一个调用一次方法。对吧,所以说这个是不一样的,它不能一概而论的,好,那之后呢,是B行执行,也就是说在开当中呢,它有很多阶段,那我们可以设置进行执行,当然是要求我们资源得到位的情况下,因为型执行肯定是资源消耗要高很多,对吧?呃,严格模式里边呢,有限制迪卡二级的。
19:03
有限制old。单独使用BT还有限制什么?分区表查询不带分区测算过滤的对吧,那这个一般不开啊,这个一般不看,呃,像那个刚才我们说的auto啊,还有这个顶二级啊,在公司当中都是开的啊,这两个都是开的,所以说公司当中,因为你一旦写了第二级,你准备做测试的时候,对吧,一旦一运行起来,那这个东西就非常耗资源,而且呢,出来的数据量也非常大。这个就很不划算,所以大家直接禁掉了,除非你确定这个第二题你要用对吧?临时的去干什么去开一下,这是我们之天跟他家说的啊,所以你在也有助于帮我们去校验这个circle啊,假如说无意当中我们写了一个第二级啊,其实可以不用第二级一往里一粘,发现顶耳级啊,这个时候是不是会去检查你的surfacefa对吧?就是如果说那个东西是关掉的,你往里一粘一运行,它是是跑起任务来了对吧?这就不好了啊嗯,这我们所说的研个模式,最后呢,GM重用以及压缩啊,这个压缩呢是我们第九章所加的,这容重用呢是在哈多当中我们聊到的,它是针对于小文件的时候才需要的,如果说你不是小文件,你开启前我重用,反而整个效率会变低啊,会变得特别慢啊好,那这是我们所说的一个优化对吧,那大家复习的时候也一样,你就不要去看这个文档了,就说的你就直接对着这个内容,或者说你把这个东西呢给他写。
20:36
写到那个笔记上面,然后自己往里面去填一填东西,对吧?把你记得的核心东西给它写进去,然后呢,你关于哪个点你记得不太清了,然后你回过头来重点看一下,如果说你,哎大表这一大表三种方式,一下子一看到大表这一大表一下子反映了三种方式,对吧?而且呢,很快就能写出来,那暂时可以先放一放,因为你肯定对这个东西呢,掌握的相对要好一点,然后一提到go back,诶,这里面还有优化吗?想不起来,连数据线都想不起来对吧?那你也不用先立马就看,先往下走啊,看哪些东西能记住,然后统一的来看这个文档,这样就节省效率一点,对吧?然后复习的时候呢,可以通过这种方式来复习,当然你可以去拿纸笔去写一写,哎,把这个目录写下来,然后往里面填东西,或者说对着这个看去想一想,或者说呢,你们自己不要整理笔例吗?把这个优化这块东西摘出去,对吧,然后呢,把标题摘出去,然后往里面填东西。
21:29
啊,用这种方式去做总结做复习啊好,这是我们昨天所讲的东西啊,整个优化呢,又带大家去过了一遍啊。
我来说两句