00:00
好的,那咱们继续,呃,那我们第一章呢,是整体上去介绍一下hike是如何转化成我们的MR任务的,呃,那么第一节呢,我们首先要再带着大家去回顾一下have当中的一些核心组件,其实大家在学习我们have基础的时候呢,就已经了解到这些个东西了,对吧?那我们再回顾一下,呃,当然呢,下面是有一些介绍,那这个介绍呢,我们就不看了,下来大家自己阅读的时候可以对着去看一看,那我们整体看一下这张图,首先我们知道have呢,它是依赖于我们的。哈杜op程序的对吧?那也就是说它依赖于哈杜op当中主要的两个组件,一个是我们的HDFS,因为我们知道have最核心的我们所存储的数据呢,是放在HDFS的,呃,那么接下来呢,依赖于哈当中第二个组件就是我们的mmr啊,那最终呢,我们是将hacker翻译成MR任务的,所以说这两个东西是外部的他所需要的啊,那对于我们还有自己,其实它就这核心的一块,那其实我们发现到,诶左边还有一块叫Meta store。
01:09
啊呃,这个呢叫原数据的一个存储啊,那么它就分为两块了,刚才我们所聊的HTFS呢,是我们所存储这个表当中的数据啊呃,那关于表当中有哪些字段,每一个字段是什么类型,这个表呢有多少的数据量,这个表中间在IDDL上有多少个文件,有多少行,这个行加起来总共有多大,那这种呢,我们通通称为叫原数据信息,对吧?所以呢,它还需要一个专门来存储原数据信息的地方,那当然大家已经知道了,默认呢是放在德比数据库,呃,但是呢,由于它是单用户系统的,所以呢,我们是一般来说给它转到我们的MYS当中做存储的,也就是说其实have是将MYSQ的信息以及IDF信息呢做了一个双摄关系,当我们去查询一张表的时候,它会先从买S当中读取到这张表的原数据信息。然后跟。
02:09
根据原数据信息的指引去HDFS上把我们的数据找回,在这个过程当中,如果我们写的搜个当中呢,需要用到例如some count这样计算的一些函数,那么它将会启用我们的MR任务,哎,它是这样子的,所以呢,这三个东西就刚才我们所聊到的关于这个metato啊,HDFS以及map,它呢是have所依赖的第三方的一个组件啊,那么真正have自己所持有的呢,就是我们刚看到中间右上部分这一部分所包含的一个内容,那首先是我们的client客户端,那我们知道我们要提交。一个hick客,那必然有客户端,那这个客户端呢,可以是我们普通的打开并have,呃这样的方式,也可以是通过have so to JD bc的方式去连进去的,那我们知道呃,Have当中呢,提供了一个B客户端,它就是通过JDBC,但如果呃满足JDBC的代码,那当然也是可以的,对吧?好,那接下来呢,我们无论通过我们的JDBC或者说我们客户端,它是要有一个驱动的,那么驱动呢,其实就是连接客户端与我们服务端的一个桥梁,对吧?好,那真正的组件呢,就是我们下面看到的第一个叫ser passer,它呢是一个hi客当中的一个解析器,它是负责将我们的hi客编译成解析成我们的可执行的一个语法啊,那么第二块呢,是我们的编译器,因为这个时候呢,它只是说判断词法语法是否正确,校验一下我们的一个circle考,这个时候并不能真正运行,因为它还是特别的抽象,对吧,那么第二块呢。
03:53
那我们就需要用到我们的编译器,将我们之前编译解析得到的抽象语法数编译成我们的执行任务。
04:04
啊,也就是后期我们要提到的叫operator tree查询数啊,操作数这样的一个内容,呃,那么第三块呢,就是它的一个优化器,之前我们在聊优化的过程当中也看到,呃,有很多优化的参数,那么每一个参数呢,它会对应它自己的一个优化器,其实它在翻译成mmr任务的过程当中呢,它会便利咱们所有的优化器,当然前提是我们开了这个属性,如果说你这个属性是关闭的,那么它就不会去启用了,直接过滤掉了,对吧?好,这是优化器达到我们ser的一个优化的一个点,比如说我们所说的之前所聊位置下堆map join这样的方式,其实在我们等会儿看源码的过程当中都可以能够看得到啊,那么最后一个呢,是执行器,呃,经过优化以后,我们的任务呢,最终就会被呃翻译成了我们的叫task tree啊这样的一个东西,对吧,那么task tree呢,就是我们的一个任务数,他会拿到我们的。
05:04
任务数呢去执行,呃,最终执行器呢,会把我们的任务数呢封装到一个MR任务当中去做提交,那其实我们刚才所看到的啊,整体上介绍的话,Hi克转化成MR,其实比较简单的,第一步呢,是通过解析器解析我们S克中的词法,语法校验有没有语法错误,第二块将我们的解析好的一个内容翻译成我们的操作数,接下来由优化器对我们操作数呢进行优化,使得我们有更高的执行效率,最后一步优化好就可以拿去执行了,也就是说优化之后的内容呢,是我们的一个任务数,拿到任务数呢,我们可以提交执行,也就是说最终完成了我们MR任务的一个提交啊,是这样内容啊,那么第二节呢,是我们通过文字的介绍,刚才只是说呃,聊这个组件的过程当中,我们在聊它每一步的作用。呃的同时,将。
06:04
它整个的一个编译过程给大家去稍微说了一下,那么接下来呢,我们整体看一下,就对我们刚才这一块东西的一个总结,呃,那么第一步呢,它会进入程序,利用我们的al这个框架,那么这个呢,就是一个解析框架,就相当于是我们have当中,刚才我们组建里边的一个解析器,它完成骇客的语法解析,对语法词法的一个解析,将我们骇客转化成ast,也就是说我们经常提到的叫抽象语法数啊好,那当然这个抽象语法数呢,并不能真正的直接去执行,因为它名字也告诉我们呢,还是比较抽象的一个内容,对吧,所以他要把它具体化,那么第二块呢,我们叫便利。这个抽象语法数,将我们这个语法数当中内容提取出我们的查询块,啊,其实对于这个查询块呢,我们可以理解为最小的查询执行单元,比方说在里边我们可以写一个select的新FROM1张表,那么from或者说这个select,那么它就是一个比较小的一个查询单元了,因为它不可再拆开了,对吧?啊,当然对于drawing这个操作来说,它可能里边会比较复杂一些,特别还有left draw red draw这样的方式,对吧?呃,那么第三步呢,我们要去遍利我们的查询块,将我们转化为操作数。
07:28
啊,就是刚才给大家提到的,呃,那么这个时候呢,其实这个内容可以把它称为叫逻辑执行计划,那只要编译成我们逻辑执行计划了之后,它是不可进行拆分的啊好,那第四步呢,对于我们的逻辑。执行计划进行一个逻辑优化啊逻辑优化,那逻辑优化当中呢,其实比方说不必要的一个reduce think,因为我们知道MR任务呢,它有map和reducer,那其实有很多的任务呢,我们是不需要去进行聚合的,那么我们就直接将reducer的一个过程呢,给它去去掉,减少我们数据的一个杀错量,对吧,这其中也是一种优化,那么就是逻辑优化器给我们的优化,去掉我们不需要的一些操作逻辑,对吧?好,那接下来第五步呢,将我们的。
08:18
执行数变成我们的一个任务数啊,也就是说此时呢,可以翻译成MR任务的流程了,也就是说在这一步刚才我们也提到了啊,那也他说接下来应该要提交这个MR任务了吧,啊,并不是因为刚才呢,我们只是做了四个上的一个逻辑优化,那么最后呢,嗯,在这块我们得到这个任务数的时候,它其实翻译过来是我们的一个物理执行计划,那对于物理执行计划呢,当然我们还要进行一个物理层面的优化,那这个呢,就是大家之前我们所看到像map join,呃,With下堆等等这一系列的优化呢,都会在这块进行一个内容的一个执行,哎呀,它可以优化我们S的执行顺序啊,比方说行动的位置下推,大家呃,看过我的优化视频也应该比较了解了,其实说将will这个关键词呢,可以提到前面去,因为这样的话,我们只要将will前提。
09:14
那带来一个什么好处,是不是接下来我们执行的S课当中,数据量就会大大的下降啊,对吧?哎,就是这样的一个过程对吧?所以呢,这个时候还要对它进行一个物理层面的优化,那最后当然是生成最终的执行计划,提交去运行了,对吧?那到这一步为止呢,我们整个的就完成了,其实在hi客翻译成MR任务呢,主要就分为这么七大步,但是在源码当中比较复杂,因为它会涉及到有很多的组件,特别在优化器这一块,我们所知道它不只有一个优化器,对吧?好,那这个呢,我们要到源码的时候再去详细的去介绍了啊,那这是我们第一章的内容,主要呢,大家回首先回顾了一下have当中的一个核心组件,包括每一个组件,它起到一个什么样的作用,那么第二块呢,是我们将hi克翻译成MR任务的一个整个流程,带大家去稍微的回顾了一下,OK吧,好的。
我来说两句