00:00
好的同学们,那我们接下来从第一章开始学习,第一章呢,讲的是一个执行计划啊,也就使用explain这个关键字来获取我们hi翻译成MR的整个。过程流程,呃,那么在这个当中呢,其实大家之前或多或少肯定也用过当前这个关键词,但是这个关键词给我们展示出来的内容呢,相当的多,同时也很复杂,所以这个时候呢,就让很多同学打了退堂鼓,不愿意去看,就觉得这个东西很难,其实只要你静下心,一行一行的阅读一下X plan之后的执行计划,那么其实它并不困难,所以这块呢,我们首先要带着大家去阅读一下这个内容,刚才在课程介绍当中,我们也给大家说到了。执行计划在生产环境当中是非常重要的,因为有时候我们做了一个优化之后,不可能说每一次做优化都要直接进行运行,我们的开口看一下运行时长。
01:06
因为生产环境当中数据量庞大啊,往往一个骇客呢,运行几个小时,这样就得不偿失了,所以这个时候就依赖于我们的explain,我们看一下执行计划,可以得到我们的优化是否已经生效啊。好,那接下来我们看下这个内容,第一块呢,我们先去建表,那这个当中呢,因为涉及到后面我们还有很多的优化要去演示,所以呢,这边我们首先创建一张大表。啊,同时创建一张小表,再创建一张join后的表,因为后面呢,我们会有大表照应大表。大表转印小表这样的一个操作,那如果说我们将转印的结果直接打印到控制台,那么我们时间将会非常的多,因为它的数据量很大啊,呃,所以呢,我们将这结果写到我们的另外一张表里边啊,但是我这边呢,已经建好了当前这张表啊,首先我是这边专专门创建了一个数据库叫test,我们use一下这个test数据库啊,接下来呢。
02:10
我们可以看到在我们数据库当中有这三张表,同时我已经将big table以及small table数据做了一个导入,那么数据呢,给大家提供在我们的资料包data里边有一个100万的大表数据,还有一个10万条的小表数据,大家呢,自己如果想要做测试的时候,可以拿着当前我们这个数据来完成我们的测试啊,好,那这这一块导入数据啊,那么接下来我们看一下X X plan,它的语法呢,是X plan extended,可以查看我们的。更详细的内容,然后呢,也可以看一下它的一个依赖关系,同时还可以看一下它这个权限后面呢,跟着我们那个circle,但是往往来说,我们更多的就直接用X play跟着我们circle来查看我们的结果啊,那这个时候呢,首先我们看一下这个circle语句的执行计划啊,那么第一个呢,是非常普通的一个select的一个语句,好,那我们把这个拿过来给大家看一下它的一个执行计划,带着大家阅读一下我们的执行计划。
03:19
啊,那这个S个本身很简单,所以呢,在这个执行计划当中也是非常简单的啊,那么呢,它只有一个阶段,那我们首先看一下,它叫stage dependences,叫阶段的依赖关系,那它当中呢,只有一个STAGE0 stage0就是一个根阶段,也就从STATE0开始执行,同时执行完之后就没有更多的数据了,那这来S0呢,其实一个很简单,它是一个抓取操作,也就是说因为我们这个地方只是说C新并不需要做任何的计算,那我只需要从HDFS将数据读出来即可,那么在这个当中limit负一,也就代表并没有做limit的限制,也就是说我们能读到多少数据,就将所有的数据全部展示出来,然后接下来操作数,我们看一下table sky扫描的表,我们取的是big table,诶,确实我们要查询的是big table这张表,然后查询的操作当中。
04:19
中包括哪些列呢?所有的列我们都是需要的。啊,所有的列都需要的输出列名,我们取了一个别名对吧?那其实这就是我们最简单的一个执行计划,其实仔细看一下不难懂,对不对啊,那有同学说,那这个思课呢,很简单,但你要知道任何一个复杂的思课,其实它里边都是一些这种简单的阶段组合起来的,把它变得很复杂了,好,那这个呢,当前是不需要走MR任务的一个circle课,那接下来我们看第二个circle的一个执行计划拿过来,这个circle呢,我们可以看一下,我们查询了一个可个URL点击的UR页面,同时查看一下它的总个数来自于我们big table这张表,按照可ul进行分组,那就简单的一个分组求count的一个circle啊,那这个呢,如果我们去运行它肯定会执行mapdu任务了,对不对,好,那我们就看一下,如果有mapdu任务这种执行计划,它会。
05:24
显示成什么样子好,那这个人呢,比刚才明显要多很多,那不要着急,我们一点一点来看啊,首先。这是我们执行计划,查看执行计划,也就是从这块位置开始的,当前这个内容当中呢,有两个阶段,一个叫这一,它是跟阶段,然后一个stage,零依赖于我们的第一阶段,所以我们任务执行呢,是从第一阶段开始的,第一阶段首先我们看到它是一个map reduce的一个任务。那这个当中呢,就分为map tree和我们的reduce tree,我们从这两块可以分别看到在当中它到底做了哪些事情好,那么在这个当中呢,首先对于表呢,是我们的big table表,查询操作用的是可URL。
06:12
由于我们做的是count的心,所以第二并没有第二个字段,如果说我们写了AAVG求一个平均数,那么它将会有第二个字段,因为我们只是求count,所以内部直接给一是不是就完成了啊,然后接下来group back操作呢,是要求一个count,我们的K呢,用的就是当前读取的这个克里格URL这个数据啊呃,采用的模式是哈希输出数据两个字段没有问题,因为进来一条数据,我们输入输出一个K加一,然后排序方式呢,正序排序,因为并没有指定其他的内容分区字段还是按照我们第一个字段,也就是所谓的这个克里个UR进行一个分区,对不对?好,这是我们所看到的。Map阶段,那接下来到我们的reduce阶段,就很简单的呀,那我们在这个地方呢,可以Y6点。
07:06
直。啊呃,那我们要将这个值呢,全部统计出来,全部统计出来对不对,那就做一个累加的结果啊,好之后呢,第二阶段又是一个抓取操作啊,Limit为负一,表示抓取到的数据全部都要打印出来,那是因为我们。第一次执行MR任务一个结果,它是将结果写到一个临时目录当中,我们要将这个数据读出来给它放到控制台,所以第二次又是一个抓取,跟刚才我们看到c select克星这种方式完全一样。因为c select星它是直接从。HD Fi读取数据,而当前我们走了MR任务以后。那他将会从我们的。临时目录当中读取我们的数据。所以第二个阶段又是一个抓取操作,跟我们普普通通的CL新没有什么区别,所以刚才我提到了,那即使你这个搜个写的很复杂,执行计划呢,跟着也会变得很复杂,但实际上它还是有很多简单的操作构成的,所以我们可以从简单S考了解起啊,未来看多了执行计划以后,那么再看到这种复杂的就没有那么难了啊。还有另外一种方式可以锻炼到大家来查看这个执行计划,呃,大家在写hi客的时候啊,不妨多想一步,什么事呢?在这个hi客,如果说我不用嗨客去实现,让你用。
08:41
Madu任务的方式去实现,你可以思考一下这个东西应该如何实现,你思考的越多以后,你看执行计划呢就会越轻松,因为其实就是说执行计划就是将海格翻译成的MR任务呢。把它展现出来的。
09:00
对不对啊,同时呢,大家也可以关注我的后续课程源码讲解啊,就是了解一下开课从我们输入到这个客户端里边以后,是如何把它翻译,一步一步的翻译成MR任务的啊,其实这个过程当中呢,就会涉及到这些个操作啊。好,这是第一个我们可以看到它的一个执行计划,那接下来还有一个我们可以看到详细的执行计划,当然一般我们不会这样去用啊,也就是说在这个当中呢,我们可以加一个X extended的来完成我们叫详细执行计划的一个查看,其实就比当前我们这种方式呢,要更多一点数据,但这一部分数据呢,对于我们来说不是太关心,对吧?好,对于我们这个内容来说呢,它并没有多太多的内容内容,好,对于我们第二个色课,我们也可以来看一下它的一个执行计划。找你好,那在这个过程当中,我们就能看到它比刚才细致的话很多,关于分筒,每一个列的分割符是什么样子的,都给我们展示出来,对不对啊,以及所有的参数信息,但实际上我们在看MR执行任务的时候,这些个参数信息呢,对于我们没有太大的帮助啊,所以呢,一般来说我们将不会用加了extend的关键字的这种方式,而直接用X play。
10:25
加S的方式来查看我们的执行计划。
我来说两句