00:00
好,那么接下来呢,我们看一下整体任务的一个优化,第一个叫fe抓取,也就是说在我们have当中呢,有一些select新类似于这样的操作呢,是可以不走MR任务的,当然了,我们是设置了泛抓取为more,它更多的那more这个条件呢,表示我们。Select filter limit啊,今天这个电影内容的时候呢,都可以不走我们的MR任务,比方说这个select新啊,当然了,它是向下兼容的,那select的star是新对吧,简单过滤,按照分区字段过滤limit啊,但在这个基础上呢,又增加了一些内容。又增加一些内容,怎末,也就说我们正常的写磁料,新写一个C料什么字段,或者说写并且做了一个过滤,按照分区过滤,普通的过滤对吧,那这样的话呢,我们都可以不会走MR任务啊,不会走MR任务,这是第一个反抓取模式啊,啊一般呢,我们默认的为末就好了,第二个使用本地模式。
01:00
啊,启用本地模式。呃,那么这个时候呢,也就是说,呃,正常来说,在have当中执行一个任务呢,我们需要提交到雅安上去远程发送,但实际上当我们数据量很小。文件数不多的时候,完全可以用本地一台机器搞定这个任务,也不需要跟远程交互,那这样的话,可能整个数据计算的时间呢,会变的更小,那么它这个参数呢,就在这。开启这个任务。对吧,那当然呢,我们要规定你开启了这个之后,不能说所有的任务都要本地执行了,那这也就得不偿失了,所以呢,还有两个参数啊,一个是规定我们数据量大小,另外一个是规定文件数量。都不能太高,默认的为四,我们可以改为十,对吧?啊,默认值128兆,你可以把这个值呢,稍微调大一点,因为你本地一台机器是你本地机器资源而定嘛,对吧,那这样的话呢,我们可以得到更高的一个效率,比方说下面我们之前做的一个测试,在本地模式下,我们饲料新FROM1张表。
02:03
对吧,我们去创建一张表,然后呢做一个排序,哎,这个时候呢,1.3秒,那如果说我们同样的做排序,然后把本地模式关掉它,让它走MR任务呢,是依赖于我们的雅安去运行的话,那20秒,因为远程交互,其实这个时候呢,在数据量很小的时候,我们发现到本地模式更为优化。对吧,这前两个啊,那么第三个呢,叫并行执行,也就是说在我们整个的S当中啊,刚才通过这个执行计划,我们能发现到,它其实包含了有很多很多不同的这个阶段,或者说有很多的这个任务啊,那其实某一些任务呢,是不是可以同时执行,因为他们多个任务之间没有逻辑关联,那完全我们可以让他同时执行。啊,所以呢,这就是所谓的叫并行执行,那这样提高我们的效率,只要我们的并发度比较高啊是可以的,当然这个时候呢,有一个前提条件,我们资源必须要有优势才可以,如果资源没有优势,建议大家还是不要并行啊,你单个执行就好了,因为一旦并行你资源不够,那么势必会造成资源增强,反而降低了我们的效率。
03:15
啊,反而降低了我们效率好,这是并行执行的一个点,那接下来呢,还有一个严格模式,严格模式呢,其实就是说在have当中可以防止一些非常危险的操作,比如说动态分区当中严格模式对吧,我们前面聊分区的时候聊到了,然后对于outb没有limit的过滤。啊,那么它会全局只有一个radio做全局排序,那往往这种任务呢,执行的时间非常的长,非常长,如果我们加了limit,我们可以怎么做呢?那本来如果说没有limit,我们给大家解释一下为什么加limit就可以做autoba,那家突然想到autoba照样一个video排序全序吗?全局排序嘛,对吧,最后你只不过输出了里米的十里米五的话,输出了十个五个而已,那他会给我们带来什么优化吗?你比方说在这块,我们如果没有里面的字据,前面呢,有很多的map任务,对吧?好,汇总到一个reducer做我们的排序,那一个reducer处理了所有的数据。
04:14
啊,这是毋庸置疑的,那接下来呢,如果说我们做了limit,那我们能不能这样在每一个map里边,假如说LIMIT10,每一个map输出的时候,我输出当前这个map当中前十条最大的,那第二个map呢,也是十条,第三个map也是输出十条,那我们reducer其实处理的就是只有。三个map,也就是30条数据,数据量大大下降了,所以如果没有limit,那不好意思,我们不能说在map端就把数据过滤掉,不行,如果说有了limit,我们完全可以在map端做一个排序,做一个过滤,是不是?对吧,所以说这个就是第二个参数,第三个迪卡二级阉割模式,防止迪卡二级的出现,那么在生产环境当中呢,这个一定是要去开的啊啊,那最后一个点呢,是我们看到叫JM重用,JM的一个重用,那JM重用呢,是针对于我们小文件过多的时候会启用的,比方滴滴他们在使用了这M重用之后,小文件效率提高了一倍。
05:17
啊,效率提高了一倍,因为如果说有很多小文件,并且咱们没有合并读取的话,那每一个小文件都会开启一个独立的任务,那这个时候呢,开启任务,关闭任务需要申请。Java虚拟机,那在开启和关闭虚拟机也是需要资源浪费和时间的,那如果说我们开启了就M重用呢?那我只要第一个人开启了之后,它任务运行完了,并不将我们的Java虚拟机关闭,而是说等着给下一个人去用。啊,所以这重用呢,更多的用在我们的小文件过程当中,因为处理文件本身比我们开启和关闭Java虚拟机要快,如果说你文件本身很大,处理起来呢,本身就很慢。
06:08
那这个时候另外一个文件还得等着你处理完,那这个就得不偿失了,所以这样重用呢,更多是在于这种什么叫小文件。过多。的时候使用的。啊,小文件过多的时候去使用的,这个我们一定要注意一下好。
我来说两句