00:00
好,那接下来呢,我们剩下最后一章的内容,也就是have debug的一个运用,OK,呃,那首先呢,我们需要下载have有原文包进行编译,建议Li的环境编译,我们已经编译好了,而且呢,我是拿这个还有3.1.2这个版本啊,呃,所以大家要去做debug的话,呃,那么呢,你得在你的集群上得装上我们have3.1.2,然后在idea里边打开我们3.1.2的源码,这两个都不能少,而且版本最好肯定要一样。对吧,啊,要防止有一些不兼容等等这的问题,这这个安装包呢,也给他提供了,就是你在拎装你就装它就好了,这个呢,是我们在idea当中打开的一个内容,OK吧,好,那接下来呢,在这个时候呢,我们来看一下第bug,首先第一个打开我们idea当中配置项,去配置一下我们这个组啊,那我们这边配好了,呃,这个在哪呢?首先在这啊比方说。Edit configuration点开啊,点开好以后呢,当然我这个地方已经配好了,因为我这边自己做过测试,那大家呢,点开这个加号,你应该是什么都没有的,那你就点加号,点加号找到remote,嗯,因为我编辑过,所以remote在上面,那你们的remote应该在这个里边32个更多,对吧,你在这里面找一找,诶remote,然后选上,选上之后呢,你将会看到这样的一个页面啊,当然这个地方呢,是一个默认的名字。
01:25
On name,我记得应该是on name,那无所谓,你就改个名字就好了,叫on name也可以,那我们要改的东西呢,就是这两个地方,第一个它。主机名第二个端口号啊,注意是8000啊,第八个端口号,主机名呢,写我们安装了have的地方就好了,然后呢,Apply应用对吧?OK就搞定了啊就搞定了,那这个配置呢,比较简单啊,名称无所谓,这个已经给大家写好了,呃,然后接下来呢,在源码当中打上断点,我们就已经。打过了。对吧,我们都已经打过了啊嗯,因为在讲源码过程当中呢,我们打了很多的一个断点啊,接下来呢,进入我们的海有dbug客户端模式,那这个呢,注意跟我们以前进话不一样了,我们要并have,然后杠杠debug加上一个debug参数,OK,这个时候呢,他去负责监听这个什么8000端口,刚才我们是不是在ideal里边配置了这个8000端口,所以他们俩呢是对应上的,然后接下来注意啊,呃,我们还是到这client driver,因为等会我们第一时间应该看到拦截的就在这块啊,是点击debug运行啊,点到这个类啊,然后呢,我们把其他的关掉,叫client driver这个类debug运行。
02:38
好,这个时候呢,他告诉我们连接上了目标。虚拟机对吧?然后地址是我的虚拟机,当然这块你写你自己IP或者你的主机名,Linux主机名都可以,8000端口对吧,只要你没改都是8000,刚才我们在这看到了,好,呃,刚才呢是阻塞,一直阻塞这块,现在呢又进到have,诶好像让我们写circle对吧,比方说我们写一个比较简单的,那就select count新from TX这张表对吧,走一下。
03:12
好,呃,那我们是不是在这等着呢?等他出结果,我告诉你,你要在这等着,他永远都不会出结果,因为注意啊,这个客户端呢,是一个debug客户端,对不对,他这个debug客户端也就是什么意思呢?在这个过程当中,我们已经被它拦截到了,你看这个端点已经生效了,而且在我们的ideal当中,是不是看到了我们的S语句。对不对,这样就看到了我们的S语句了,OK,好,那我们这边断点其实比较多啊,那我就快速的去点一下,我们是不是断点都经过了对吧?呃,那比方说process line到这个里边这个断点对吧?好,那我们下一个断点,哎,就到这来了吧,啊,就到这个位置,我们说了,只要它拦截到以分号结尾的,它就会去process line,好,那我们继续走啊,呃,在这个过程当中,它是不是应该调用这个process command,诶,这个地方有个断点对吧?好,那我们走,诶正好又到这块来了。
04:09
就跟我们之间打到断点的顺序是一样的,对吧?好,那我们继续往后走吧,嗯,那我就不去一个一个去找这个断点了,那我们直接往后走,因为我们过程当中其实打了很多断点的,对吧?好,那我们呢,运行到了下一个判断它是否是这个driver,那接下来呢,应该走这个process local command,哎,这里边有断点对吧?好,运行到这块来了。啊啊,那接下来呢,我们来看这个单点到这,诶是不是我们调用run方法去运行点到run里边,但是这个run呢,它是个抽象类,我们刚才说了,它实际上走的是drive里边的run方法,对吧?好,这个run方法呢,我理论上来说应该是有打断点的,对不对啊在这个当中啊,果然在这个run方法当中,我们这个断点,我们下一个端点啊,哎,是不是被我们这个地方所拦截到了。对吧?啊,所拦截的去编译我们的一个代码,好,那我们继续到下一个端点啊,下一个端点编译的时候去解析我们的抽象语法数,好,那我们就可以看一下解析好以后它是什么样子,我们往下走一步啊,单步执行对吧?呃,单步执行是我们的,这是跳出单步执行我们得去,嗯。
05:22
这是进入,然后呢,我们把这一步跳过。啊,那就进去了啊,进去之后呢,我们直接可以,嗯,或者说我们直接到下一个断点处,对吧,让它去解析,这个过程比较长啊,那这个端点我们都直接到端点,到下一个端点,OK,那这是我们获得的语法数,它将会出来,那到这儿了,这个是我们解析完之后的,那此时呢,我们是不是可以看一下当前这个变量它的一个内容啊,对吧?啊,Tree是一个token query,最开始的是一个token query,我们之间也看到了,在我们这个地方。解析的内容的时候呢,这上面是不是一个token query啊,这是它的一个根节点,因为我们打印数的时候,只要打印根节点就够了,通过根节点的便利我们才能找到的,好,那它的一个根节点呢,叫to过query,那通过这个内容是如何将我们这个东西画出来的呢?很简单,来啊,点开它CTRLC啊呃,那我们呢,在这边看一下这个内容数对吧,计算,那这个里边呢,就有它整个结构,当然你也可以从这里边去找到这个数啊,那我们可以通过这个地方来看一下。
06:32
啊,这是数数呢,肯定有。子节点,它的负节点是什么鸟,所以它是一个。最高的最高层的一个节点,对吧,那包括文档当中也写了上层是一个near空的对吧,它是最高级的啊呃,然后接下来呢,是。孩子有几个两个啊,零和一,那零呢是一个from,一呢是个insert啊,往外面去写嘛,虽然我们只是做一个查询,但是它是不是要将我们数据要写到控制台对不对啊,要写到控制台,所以呢,这个两个就有了,那同样的,这也是一个节点,也是一棵树,所以呢,它照样也有他自己的孩子叫N,诶这个表明对吧?那继续在我们的insert语句当中,它有两个子节点。
07:20
一个destination,一个select,查询什么东西到什么目标啊,那等等,其实我们刚才所看到的这个东西是不是就跟我们看的一样,但是这个与S呢,相对来说复杂一点,所以大家看到这个图复杂一点,我们刚才比较简单一点,刚才我们看到是一个token query query底下呢有两个孩子,一个是。Insert对吧,一个是select查询啊,在insert底下呢,也有destination和select啊,类似于这样的东西,那你可以根据我们这个树状结构,你完全在这里边不断的去点,不断点,完全可以把我们这个树状结构画出来,所以我之前也说了,你要真去画这个树状结构,其实还是挺麻烦的一件事情,因为你只能对着这个对象来做啊好,这是我们的一个点,那我们继续到下一段点,把我们所。
08:06
打个断点都运行一遍对吧,运行好,那这边这在干什么事啊。Another in等对吧,那继续啊,在这个当中呢,下个断点,好,那这是解析啊到这边诶这刚才我们走过了啊,那我们再继续走一遍,在这个过程当中获得了我们这个它的tree啊,然后呢,是transform优化器了吧,啊,我们前面好像打断点打的比较少,直接到我们的优化器了啊呃,那优化器注意这个断点啊,注意这个断点来运行看,首先呢是partition columns。就是说它会去变利嘛,所以这一个断点就循环,循环它会很多对吧,脑运行这个是join,然后。Pretty。Predict pro down为此下推对吧?然后接下来呢,是其他的一些参数啊,那这个呢,我们就快速过了,就是我们刚才看到transformation,它所有的实现类啊,它都去编利一遍,之前我们就跟大家说过了啊,它编利一个一个的做我们的优化啊,终于结束了,对吧?啊然后呢,运行我们的任务之后呢,到我们的ex。
09:14
啊,因为翻译完了,因为在我们其实有一个方法里边啊,呃,我们应该在这个方法里边打到断点比较少,Comp这个方法里边啊,Comp对吧,这里边呢,我们其实没有打很多的断点,所以刚才呢,它一下子就出去了啊,这个tree我们有了,里边打的比较多,但是在这个里边我们好像打的比较少,对不对,大家应该还有印象啊,在这个CTRLH,然后呢,我们是seme and,然后呢这个地方啊。点进来好,那我们刚才是有这个,我们看到了它对吧?嗯,然后之后呢,是进到transform里边,你看这个这块呢,我们都没有去打端点。啊,我们只是在这个第七步当中,Optimize这个当中打到端点,所以它直接就进到这儿来了啊,所以中间没有打断点啊,其实还是走到我们这块没有问题吧,好,那我们继续下一个断点处啊嗯,提交我们的任务了,最后呢,这块都是我们断点,我们今天打到啊,我们打到断点呢,都有了launch task当中也有lunch啊,然后在这边CU task到我们的CU设置架包对吧?等等的下一个端点啊,设置架包,每一个呢都得走一次,走一次之后呢,应该到我们的来,我看一下这块有没有大断点啊,诶,这有啊,就是客户端对吧,到客户端,客户端呢,最后真正的去提交。
10:31
好到这块好到这块好,那这块呢,我并没有往下放行,那所以呢,你看这块他只是说把我们这几个东西拿过来了,任务怎么样,并没有真正的被运行起来,他只是告诉我们启动了一个任务,但是并没有真正运行,我们在这儿就等着,他就不会执行,因为任务并没有真正提交好,当我把这块放行,大家看这个地方是不是真正的就运行了任务八这个任务呢,提交到了103的8088端口,那大家都知道1038088呢是雅安的。
11:04
端口对吧,雅安的端口啊,提交任务的一个地方。所以呢,这样的情况下来说,我们通过debug的方式完成了整个流程的一个梳理啊,就是之前我们做的那些事情,我们所看的那些代码,诶通过deb的方式呢,我们就了解了这里边儿的东西,对吧。好,等这个任务运行完吧,我们里边应该是16条数据是不是啊,没有问题啊,还是打印这些信息对吧?好的,那么最后呢,这是我们的一个debug啊,包括它的一个操作,包括它的一个演示都没有问题,大家下去呢,可以自己去尝试一下debug有一些详细的东西,你想要去了解的,诶,你可以根据单步执行的方式去走一走,对不对啊,它是have任务也是可以第八个的,OK,那我们把这个就关掉了啊,把它关掉好,这边呢,他就又继续监听了,他并不能写色克了啊,除非我们把那边打开,那么这个地方才能写色客,因为它是debug模式,如果没有代码去监听的话,那么这个他也没办法做debug,大家应该能想的明白来啊,那我CTRLC给它干掉啊,行,这是我们的debug模式,呃,那么呢,到此为止,我们整个have的源码课程就结束了啊,就结束了,呃,下去以后呢,大家重点内容,当然第一个整理流程,这个是本课程当中。
12:24
最最重要的一个点,毋庸置疑的,然后接下来呢,是核心组件,你一定要结合着核心组件去想一想,它在源码当中哪一块儿起作用啊,仔细想一想,诶我能不能想一想这个方法对吧?啊,那最后呢是debug,那方便你去看源代码的对吧?啊那如果说你学完之后呢,想要更好的去掌握这个内容,呃,这个PPT呢,其实我是,呃,当时做PPT的时候呢,我就想着呃更简单化一点,让大家好记一些,把主要的流程给大家梳理了,那有同学说看了源码之后觉得这个PPT呢,他可能比较粗,对吧?那下去之后可以自己边点源码边画图,把这个细节的东西呢补充完整,对吧啊。
我来说两句