00:00
好的,那既然我们已经找到了阅读源码的主程序,那么接下来随着这个程序往下面去看对吧?好,那么第一步呢,进到这个慢方法当中,第一行代码就告诉我们了,其实它是new了一个自己对象,然后调用自己的wrong方法,也就说这个地方还传过来很多的参数,那么在这个参数当中呢,就会包括我们通过b have传过来的杠E啊,杠F啊,以及可以传杠just,我们可以在外面提供很多系统的一些参数,对不对啊,就是杠杠config,杠杠config这样的一个参数的一个解析,也就系统参数啊这样的一个内容。好,那接下来呢,第二行代码就比较简单了,它是系统退出,那我们肯定就不用关心,那正常它是按什么退出的,也就是说这个返回值,那我们这里边一律按正常走。啊,如果说我们要考虑到所有的异常,那这个代码呢,就读不完了,大家想一下,是不是因为任何地方都有可能发生异常,我们的骇客写错了。
01:02
拼写写错了,或者这个表不存在等等一系列问题,那异常太多了,那所以我们默认呢,所有的内容都是正常的对吧?那也就是说接下来呢,我们要进入到wrong方法当中,其实就在这块,那我们可以点一下点进来,诶在这块对吧?好,那么这个过程当中呢,首先第一部分我们看一下它做了一个什么事,呃,首先直接就返回为一了,那我们知道它是一个非正常的一个情况叫options啊,Processor选项处理器,其实就是处理我们的参数来看一下啊,它有。Process stage1啊,以及底下还有一个process stage22个内容啊,那么第一块呢,X对于我们输入参数进行一个校验,我们可以稍微进去看一下,在这个里边,诶,这个里边呢,就解析系统的一些参数来大家看啊,这个当中就包括have conf FA啊,我们是不是可以通过客户端传进来一个临时生效的参数信息,对不对?好,那么第二个呢,还有这个当中呢,Have rule log,你用的是什么东西,以及have的挖包,然后呢,这个DeFine可以定义的其他的等等一些参数都来自我们的命令行,叫command line,都是我们通过并have传进来的一些参数,它对于我们参数呢做一些解析,如果我们传的参数不正确,那么直接返回,不用往后面去执行了啊,这个也比较简单啊,好,那我们继续往后走,呃,接下来呢,就到我们核心的组件这块,它去定义我们system.in。
02:35
Out。输入输出info信息的打印以及arrow信息打印。对吧?啊,那是因为在这个过程当中,我们知道我们打开了一个客户端以后,我们将会在当中输入我们的骇客语句,之后呢,它需要根据hi客语句去执行,所以它需要给我们提供一个输入流来读取我们从客户端输入的一些信息啊,同时我们输入完一个hi口,它执行结束以后,它需要将结果返回到我们的。
03:10
控控制台,那么接下来呢,它就有一个输出,同时还有一些错误输出,因为有可能会发生异常对吧?好,那这块呢,我们不用过于关心,那接下来到第二款,它去解析参数,第二款叫还是拿着我们的process啊这个方法,但是呢,它叫STAGE2,那我们看一下这个当中它需要去做什么事,诶那这个里面呢,就有我们比较熟悉的,我们可以在当中呢定义进来的数据库啊,当然你如果不指定我们进入哪个库。哎,对了,叫default库对不对啊,那如果我们可以指定,假如说我们除了default库还有很多其他的一个库的话,那完全可以好,那接下来呢,还有这个。杠一杠F啊等等一系列的参数,以及其他的一些参数的一个解析,对吧?那如果说这些参数有异常有问题,那么它又会直接返回了啊,也就是说大家可以其实可以收集一下我们这些地方的返回码,你看这个地方是系统的参数错误对吧?返回一啊,那将来呢,这个地方是三,也就是说他在注册这些流的时候出了问题啊,直接返回三,那么还有的时候呢,是这个Q2。
04:23
啊,那往往对于我们是用户自己传的一些参数,杠一杠F,类似于这样的参数啊,出了问题了,它就是一个二,对吧,大家可以做一个收集啊好,那这块呢,就已经搞定了我们整个流程序,呃,也就是说能运行到这块位置的话,证明我们船的内容从参数层面来说,它并没有任何的问题,对吧?好,那之后呢,在这边它去解析我们的参数,获取我们的输入get参数,从命令行当中为参数,然后对参数呢进行一个封装,分为K和VALUE6,那这个不需要我们关心,呃,那接下来呢,在这块我们看到一个比较有意思点,叫这个内容,这个呢是打印的have当中的一个前缀啊,打印的一个前缀啊呃,何为前缀呢?我们来看一下,在这个过程当中来点开,点开好以后呢,它去获取我们的一个参数,对吧,它就获取我们的参数名称好,那这个参数呢,系统的配置的一些东西啊,那这个参。
05:23
是谁呢?我们可以看一下,叫client,呃,也就是说由哪个参数来定义的叫这个参数。是这样的一个参数啊,那这个参数呢,启动起什么作用呢?等会儿我们可以稍微去看一下,你比方说在这个时候呢,我们去拿一下,它默认的是have,它默认的是have OK,呃,那这个时候呢,我们给大家演示一下啊来在这边呢,我打开一下我的have客户端,给大家去稍微的看一眼啊。呃,我们稍微等一下,这边呢,连接我的虚拟机,那可能有一点点慢啊,大家不要着急,这边呢,我们虚拟机已经开启了啊。
06:07
稍等一下就好,嗯,那同时呢,我也可以去打开一下我的103104。他去连到我们的虚拟机啊,好,那这块呢,我们就不等了,他可能有一点慢,对吧,他这边说我们的连接拒绝的到,我们就可以检查一下什么情况,呃,那这个参数呢,可以给大家介绍一下,它其实就是我们have当中,呃,正常我们进到并have客户端里边以后,它有一个箭头,对吧?啊,有一个前面有个have,那我们接下来从这去输入我们的hacker,那这个参数呢,其实就可以就是它,当然如果想改的话,你就在have的一个配置信息当中加上这么一个参数,呃,当然我测试过了,可以写中文啊,可以写中文OK吧,好,那这是我们所看到的一个点啊。
07:01
好,这是第一块我们所看到,也就是说大家可以对着这个掩板当中去阅读一下啊,其实就对于我们整个的过程当中,这一块这个内容做了一些一系列的解析,对吧?好之后呢,打印这个内容,接下来呢,它会把这个内容封装呢,我们叫这个二这个参数当中,好,那之后呢,继续往下游去走,之后呢,没有什么太多东西了,然后接下来这边更新了我们现场名字,我们不用关心啊,那接下来叫return,返回叫exq的drive,那这一步呢,是我们的一个核心了啊,因为这个呢,就抓异常退出了,对吧,就finally执行的,那么接下来主要程序呢,就来自于这,最后我们点到exq drive这个方法当中。啊,这个方法当中,那在这个里边呢,我们所需要关心的一些内容,我们继续往后来看啊,往后来看OK,那我们继续往后走啊,那这边呢,可以去判定我们的执行程序的引擎是否为MR,我们可以点到这个参数进面看一下,呃,那在这个当中呢,默认值是不是MR,当然可配的有Mr nes,这是默认的,然后有T有。
08:10
Spark程序啊,他先判断是否是MR,那我们是MR那就没有问题了,对不对啊,当然了,如果默认还是MR的话,它会给我们打出一个警告,因为现在呢,我们是基于HAVE3点几版本的,三点几版本呢,他如果用的默认值还是这个MR的话,他会有一个小小警告,他说最好不要用这个MR程序,用其他的啊,好,那这个不是我们关心的,那更关心的是什么东西呢?来继续看,呃,这边呢,叫setup cons read初始化我们的控制台阅读器,也就是说刚才我们看到它注册了一个SS.e这么一个参数,读取我们控制台的一个内容,接下来我们看一下它是如何来读取的,来这边。首先第一个RK,零,这个是最终的返回值的方法,我不知道还大家还是否记得,在我们的慢方法当中,最后呢,把这个返回值拿到做一个系统的返回,那默认值为零就正常退出,对不对?如果发生异常,它就是123,我们之前看到return,二啊,三啊,一啊这些它各代表的不同的情况,呃,那么接下来呢,它还会打印一个前缀,定一个前缀,以及current DB current的一个前缀。
09:24
对吧?好,那这块呢,就是我们刚才看到的have,就是刚才有一个参数啊,好,那之后它会去读取,我们看一下while一个循环了啊,一个循环,循环接入以后呢,可以是退出啊,我们可以手动退出循环,当然在默认情况下,我们进到客户端里边,它会一直去做continue,也就不断的去读取内容,除非我们在当中调用了quit,或者说还有什么直接CTRLC退出我们的客户端,它都会关闭掉,然后返回为零,对不对,默认的返回值为零,好,这是正常退出,那第下来呢,我们看一下这个当中它做的一些事情,呃,那么它读取的内容read line。
10:06
这是我们的前缀,也就have加一个千括号,输入hi的地方,它读取这个内容,然后呢,不等于none,不等于none,以后呢,它去判断。首先第一个你是不是传了一个空串,因为在have这个当中呢,我们可以直接按回车到下一行,如果它是一个空的。那我们就给它加一个什么杠,N表示缓行,没有不需要做什么其他的事情,好,那接下来我们如果它不为空,那我们需要做什么事呢?我们去看一下这个内容。两头去空格以后,对吧,是否以两个中杠开头的,那大家知道在hi当中两个中杠代表什么意思。哎,对了,代表着我们叫注释的意思,那注释是不需要去运行的,所以呢,它直接运行的叫continue,继续读取下一行代码啊,也就一行一行的读,对吧?好,那如果说不是空串也不是注释,那接下来呢,它就要判断是否以当前的分号结尾。
11:16
啊,是否以分号结尾,那如果说是以分号结尾。那会怎么样,说明我们已经读完了一个完整的排课语句,对不对?接下来呢,在这一块叫clean process line,也就是说在这个地方。在这个地方。对吧,这个是我们核心的解析骇客的一个语句,那如果说我们骇客大家都知道,我可以写一个select,对吧。Select,然后呢心我把from写在第二行,我可以不打印这个分号,然后from呢T1表,然后呢分号在这对吧,那他在读第一行的时候并不是以分号结尾啊,所以他else逻辑当中干了什么事呢?继续将我们当前这次读到数据往后面进行一个追加。
12:07
啊,也就是说他最后呢,会把from拼接在后面,把T又拼接在后面。啊,直直到我们读到一个以分号结束的,它才会真正的去叫process来解析我们的这一行数据。解析我们的一行数据,诶,这是我们所看到的一个点,比较有意思的一个点,对吧?啊那这个呢,就也符合正常,如果说它读到不是分号,他把这个拼接上去以后,直接走这个continue,也就是继续到这块来读我们的下一行程序啊读我们的下一行程序,好,那这也就是我们的入口程序,因为接下来我们就要进到这个方法里边看一下它是如何去解析我们带分号的这一类的语句,对吧?好,那么把这个可以截一下。
我来说两句