00:00
好,那么接下来呢,我们具体去看一下它的一个优化的过程,对吧?啊,因为前面那些东西呢,还是一些比较抽象的,呃,那种数据结构,那这个呢,必须在第bug的时候,我们去看一下它这个属性,然后一层一层的去画,要不然现在呢,根本就搞不清楚它到底是怎么做的,对吧?那接下来我们直接切到第七步啊,在这个当中呢,它执行优化的过程,首先呢,来看一下这边呢,它创建了一个优化器optimizer,然后在这个当中设置了一个全局的上下文,我们就了解一下这个上下文什么东西点进来,诶这个跟第四部相关了,刚才我们说了第四步也是核心的一个点,它。提供这种什么解析上下文用的啊,对于我们这个优化器的上下用的,那在这个过程当中呢,其实它是放了很多很多的优化策略在里边啊,这个一定要注意一下啊,你比方说这边叫s MB map join啊,以及SE join,还有map相关的,对吧?这些东西呢,都是跟优化相关的,当然更多的肯定来自于我们query pro当中,查询的选求当中,这个地方呢,可以有很多很多的什么优化的参数啊,优化的参数这个一定要注意一下,查询状态呀等等这些东西全部在我们的上下文当中啊,所以呢,这样的话,我们的优化器是不是就具备了,呃,我们所提供的哪些优化方式改为处的方式啊,对吧,那我们都可以去做,然后同时呢,他还从我们的。com当中做它的一个初始化之后,这块呢,真正的执行我们的优化操作,OK,那我们来看一下它是。
01:39
如何去做我们的优化的点开啊,点开好以后呢,那这里面最核心的一个代码就是它了,它对于我们的这个参数啊,继续。做优化,你看输入参数是它,输出参数还是它,也就是说只是做优化嘛,是不是啊,叫transform啊transform好,那从注释上我们也能看出来它是怎么做的啊,然后呢,他说in work,所有的这个transformation的一个内容,诶调用我们这个优化器,这个其实就有优化器啊,然后one by one一个一个接一个的调用啊,就按轮询按顺序对不对,然后接下来呢,呃,叫alter the query plan来改变我们的查询计划,那这个就优化吗?
02:22
啊,所谓的优化呢,并不是说把你计划全部都,呃,就是你查A,他给你查B,这个不能叫优化对不对啊,所以呢,只是说把你查询计划的顺序可能改一改诶。让我们效率更高,好,那我们看一下这个transformation这个东西,呃,那这个T呢,是一个transformation transform对吧,它调用transform的一个方法啊,那我们点进去,点进去以后呢,它是一个抽象类。啊,抽象类好,那我们CTRLC看是看一下啊,这里边呢,就是have当中的茫茫多的优化器,看见没啊,那这里边我们挑几个啊,我们之前在讲优化的时候讲到的,你比方说这边有一个什么东西呢?就是它,嗯,叫这个group group的优化器,大家知道如果数据倾斜的时候,我们可以采用group优化器,它会给我们执行两个任务,对不对。
03:14
OK啊,这是这个内容,呃,然后接下来这个叫分区选择分区过滤,对吧?啊,分区的一个优化器,所以我们建成分区表的时候,如果说我们写了分区过滤条件,那么它将不会进行全表扫描,然后继续还有诶,这个也是做数据倾斜优化的时候一个配置的一个参数,对吧?呃,那还有一些呢,比方说嗯,这个当中还有map,哎,这个也是我们所知道的,呃,Reduce s排除掉了,对吧?然后在这个过程当中呢,主要还有这个。这些个东西就特别特别的多了,对吧,那比方说第一个啊,第一个呢,是一个simple。Predict put down啊,简单的叫尾词下推,也就是我们之前聊优化第一个优化当中的哎,Will条件后面我们可以把这个well要先走,对吧,先首先降低我们的数据集,然后去做join啊,那这样的话,Join引时候的数据集就会降降下来啊,所以呢,这个里边是。
04:18
左右化的,那刚才我们看通过这个注释也能了解到,它是想要便利我们可以被用上的,也就是说在参数当中我们设置了哪些优化器已经开着对吧,那first它就不用便利了,对吧?那这个地方呢,Transformation它就是我们整个优化器的一个集合。啊,所以呢,它就是便利我们优化器对我们的执行计划呢,做出一个优化,整个优化的一个流程啊,这就是我们看到优化,所以呢,大家看到那里边优化器,那其实在have的配置信息当中,每一个我们都能够找到对应的一个类啊,都能找到对应的类,那接下来呢,你就要具体的去类里面去看了啊,那这个地方呢,就会稍微复杂了,它其实是这样做的,你比方说我们给大家看一下transformation ctrl c ctrl h啊找第一个with下退,呃,它呢里边肯定有transform form方法,它首先对于我们所有的任务呢,标的一个类,R1 L2,一直到R10,对吧,就是说所有的操作它标记一个类,然后接下来呢,他对于我们这个内容进行一个便利。
05:20
啊,编辑好以后呢,对于我们这个内容重新排个序啊,也就是说他看一下诶你到底是属于哪种类型,我能不能做这个位置下推对吧?你比方说这里边就是一些操作啊呃,那挑几个我们可能比较认识的,这个当中都是这个叫语法的规则对吧?这就是标记啊呃,那我们看一下这边呢,过滤相关的对吧?呃,然后还有这个draw有没有做drawing啊啊呃,TS呢是访问这个文件系统的,还有这个地方我们看一下,还有大家比较可能能认识的,呃,RS这是一个。RS是一个什么东西呢?是MR任务啊,如果说你表示的是它从我们的抽象语法数当中拿出来的,操作数当中拿出来是RSR10,对吧?那么它将是一个。
06:09
Mr Mr room啊,也就是说他对这些内容进行一个定义之后呢,呃,便利我们整个的一个过程,之后再对我们的数据看能不能启用该优化啊,整个的优化过程其实是这样做的,好,那之后呢,再继续看我们的物理优化,物理优化呢,其实比较简单啊,呃,因为到这块为止,我们已经将任务翻译成了叫task tree啊task,然后接下来呢,它需要用我们的一个编译器继续进行一个编译。啊呃,拿到我们的根任务,因为我们任务呢是一个数嘛,所以只要拿到根就可以电力了,是不是啊啊所以呢,那我们看一下这个comp,呃,这个compel当中呢,其实就对我们的任务呢,进行一系一系列的操作处理啊,操作处理,然后这边来看啊。叫optimize。
07:02
Operate plan啊,也就是说优化我们的操作计划,好,那我们点进去看一下这个方法,呃,那这个方法呢,它是一个什么没有实现啊,是一个,呃,要下面呢去看找到的,那我们考着H看一下啊在这个当中呢,有这么三个类,诶正好对应我们三个数据引擎对不对?呃,Mr Spark和TS啊,那T比方说我们看Spark啊,Spark当中呢,你搜这个方法诶里边呢,它会对我们内容做一些优化,因为Spark它是会相应的根据我们DD。L。啊嗯,根据我们的这个操作的语言啊,它特有的一些优化要做的好,那当然同样的,除了这个之外,我们刚才看到它是不是还有一个太子呀。T也根据这个内容做他自己相应的优化,那对应的都有这个参数啊,那最后一个呢,咱们是不是看到还有一个。
08:02
MR啊,MR的话就比较特殊,来看CTRLF啊搜一下它这个里边呢,并没有怎么样,是这个方法的实现,也就是说它还是依赖于这里边,但是这个里边并什么都没有写,对吧?在这个当中呢,你就调用的时候它什么都没有写啊,那其实这换句话说什么意思呢?如果你已经是MR任务了,因为我整个编译过程就是按MR来做的,对吧,所以呢,出生的时候就是。优化好的这个MR的一个任务了,所以呢就不需要了,对吧?啊,那如果说你是其他的引擎,那你相应的要去编译成其他引擎,然后继续把这个任务呢,做一些处理,你看这是太子相关的。对吧,如果你用的是T子的一个任务,它是处理T子的,所以说刚才说到第11步呢,对于我们来说就不是那么重要了,OK吧,好,这是我们所看到的一个点啊,呃,那么到这块为止呢,我们整个的编译过程就完成了,好,当然呢,细节东西我们可以到debug带大家去看一看啊。
我来说两句