00:00
那么接下来来聊一下这个have的一个架构。啊,那这个刚之前我也提到了,它是有一道面试题的,就是架构,那架构呢,就是在面试的时候呢,他可能会问你架构什么样的,那你只要把这张图去给它画出来就好,那重点要记得什么东西呢?我们来看一下,首先从大的方向来聊啊这个。是害自己的东西。就have内部的东西,然后之前我们说了,Have的本质呢,它是依托于这个哈多的,而且它所用的哈就是用MR去干什么,执行任务,用HDFS来帮助他去存储数据。对吧,这是哈相关的,然后接下来你看这边。叫梅斯。原数据存储。对吧,所谓的原数据的存储,那这个东西呢,默认的情况下,Have当中呢,我们之前说了have,它会去帮助我们去管理这个原数据,所以呢,它的一个原数据之前我们也聊了,就是帮助我们存什么东西啊。
01:08
存一个映射关系对吧,将我们have当中我们所接的这个表。和我们的HDFS路径做一个什么映射啊,其实存在就是这个东西,它默认的呢,它是存在这个德比数据库的啊,这也是属于阿帕奇的一个框架,一个比较轻量级的一个数据库,这是它内置的,但是用德比在存的时候呢,会有一些问题,到时候我们在安装之后会给大家演示出来啊,它会有问题,所以我们会改,那既然存原数据这个地方德比刚才我们说了,它是阿尔法级的一个轻量级的一个数据库。那你说我们要改的话,我们肯定改到哪了。买色克呀,大家只学过买斯克这个数据库,就目前来说对吧,所以我们要改就改了买斯克,而生产环境当中呢,更多的也是采用my circleql作为我们的存储的啊,所以后面呢,我们要装一个my circleq,那呃,第一个就是说德比它本身在用的时候有一些问题,第二个由于它内置的啊,我们去改一些配置信息,或者说想看一下里面数据比较麻烦,但如果说我们用自己装的买S来存这个原数据就会怎么样,方便很多,而且呢,有时候我们能看到。
02:27
原数据信息对吧?啊,我们就能找到这个东西啊,所以呢,我们要改这个原数据地址,那接下来就是have当中的一些东西了,第一个我们来看一下,呃,首先有客户端。还有这个什么所谓的一个JBC,既然你是作为一个类数据库的一个东西,我们这不是叫类色可能查询嘛,所以它也可以通过这个JDBC的方式去访问。啊,GDBC的步骤。就是如果说写代码的话,还记得吗。写代码去访问MY搜狗。
03:05
首先要准备四个参数对吧?Drive u,还有的use name跟pass对吧?那但凡是用GBC是不是都是这样的,因为面向接口编程,它的套路也是比较死的,四个参数准备好,然后去根据参数获取。连接对吧,连接获取到之后呢。叫预编译搜狗。就拿着连接去调用prepare statement对吧?啊,那因为搜里面呢,放很多的问号,防止什么搜个注入对吧?啊防止搜个注入啊,用问号然后去赋值嘛,给这些问号的赋值啊,如果搜个写死那就不用了。
04:02
对吧,直接就调用就好了,然后就执行返回结果去查询,那用have也一样,如果说你要写代码去访问的话,也是这个套路,因为JDBC访问方式都这样啊,当然它除了JDBC,它还有其他其他的访问方式啊,比较多,当时候呢,我们会之前有聊过,要记住三种访问方式啊,JDBC只是其中一种啊,只是其中一种啊,所以它也提供了一个JDBC,那一般用JDBC的时候会有JDBC对应的一个专驱动嘛,对吧,你写的驱动只是说在代码里边只是写了一个字符串吧。他是不是通过拿到这个字符串,通过反射的方式。找到那个类去构建对象。反射这块应该学的不太好,对吧,每个班都一样,无所谓,但是他内部自己实现的东西跟我没关系啊,啊对吧,到时候我们有可能去看其他的源码当中会看到反射相关东西,你只要知道这是一个反射就好了,反射就是说我们可以通过你给一个全类名。能去找到这个类,然后就帮助我们构建对象对吧?啊通过反射的方式啊,好,这是我们前面这个这一块啊,都属于客户端所涉及到东西,那这个呢,就是说have里边所干的事情,那我们看一下啊,它里边做的事情第一个。
05:17
解析器啊,它会将我们的S,这叫SL解析器,对吧,S解析器它会将我们的S翻译成什么?对妈的一个任务,然后呢,他需要通过编译器。啊,刚才搜解析呢,只是说把我们那个from啊,去找到对应的原数据关系,把这些准备工作做好,然后根据我们的编译器啊,真正的去翻译成MR任务的一个执行流程,对,但是有时候我们写的S呢,内部的像麦斯也一样,你写的S不一定更好,它内部还有什么。优化器,它里边其实做了很多的。优化的。
06:01
就类似于大家在学买S的时候应该提到过,呃,两个表去做照引的时候。是不是如果数据量不一样?那么这两个表写的顺序是不是跟最后的真效率会有一点关系,到底是小表驱动大表还是大表驱动小表的问题,对吧?啊,那其实在买当中你没有提这个事吗?你现在上的买S是哪个版本?5.7是吧,呃,相内的内部已经做了优化了,包括have也一样的,它里面有优化器,所以说你在写这个join的时候,左边写大表,右边写大表,其实一样的,它内部去做了优化啊,假如说我们规定的本来老版本当中啊,他可能就要求咱们干什么。把小表写在前面对吧,用小表驱动大表,用这种方式,但现在的优化,因为这个其实无所谓了,因为它底层可以做这个优化,就算你写的左表呃小对吧,呃,然后右右表大,或者说左表是大表,右表是小表,它内部在做优化的时候,他都会去用什么小表去驱动大表,这就是优化器所做的事情。
07:18
啊,优化器所做事情,当然我们还会去介绍里边很多的一个点啊,它里边所做事情,最后他优化好了,因为他按照你所写的S,如果说直接生成这个执行计划的话。那么效率不一定高,它会根据他自己的优化器啊,选择一种更高效的执行效率,然后最后一个执行器,那这个就知道干事了。真正的触发什么?MR任务的执行嘛,啊,所以说你在记我们架构的当中,优先要记的就是它。这四个器你要知道,解析器、编译器、优化器和执行器。对吧,那重点呢,后面我们可能会针对于优化器里面要讲一讲它底层所做的优化,那这个就还早了,对吧,到我们的第十章内容吧,到我们第十章内容当中啊,其实很多的优化方案这边就有大表小表的一个状意吗。
08:13
对吧,那这个时候呢,就有优化器帮我们做优化,到时候我们可以去看一下。对吧,然后找到的看一下,其实它执行效率,首先执行效率是一样的,而且我们可以去通过一个circle来拿到它的一个执行计划。啊,我们把大表写在前,小表写在前,我们都会看下执行计划,其实是一样的,就是因为它底层做了优化的。啊,整个的底能给我们做了优化了,所以说在架构当中呢,我们只需要关心这块内容,对吧,包括底下有些介绍什么客户端呀,原数据啊,默认是存在德比的,那推荐使用什么买circleq啊,这个到时候我们看一下为什么我们不用默认的这个德比,那按道理来说,它默认自带的,而且是内置的,从兼容性或者从其他方面考虑,应该可能更优一点,对吧,但是它有问题啊,但是它有问题啊,更重要的两个方面,第一个在使用的过程当中。
09:05
有问题,第二个就是在于我们有时候就看一些原数据信息看不到内置的不好看啊,不像我们自己装的MY搜狗,我们自己去看对吧?呃,后面呢哈动,然后呢,驱动器当中主要是有这些东西,解析器对吧,编译器,然后优化器执行器啊做这个事情,这个下面呢,是整个的一个翻译的过程啊,就是刚才调用,刚才过程当中,其实我们刚才当中都涉及到。首先呢,你会去建表,它就通过映射关系向表中导数据啊,最终的数据呢,是放到什么I这DFS对吧?啊放到IDFS的好,那接下来呢,可能对应把这个东西还要放到对应的原数据当中,因为给客户端写的S,我们最后还要找到这个数据吧,对吧,你也存下来啊,然后之后呢,就用户。写的这个circle啊,还是一样的,呃,根据建表信息,你建的什么表,那你就from什么表啊,它会根据这个映射信息找到什么。
10:04
数据所在地对吧,最后呢,将我们搜提交上去之后,就利用刚才我们所提到的那四个器,还记得吗?解析器,编译器,优化器,执行器对吧?经过这一套步骤,最后呢,真正的触发我们。MR的执行啊,把我们封装好的MR的一个模板啊,翻译成一个加包,然后呢,真正的去提交运行对吧?交运行之后呢,就返回我们的结果啊,这个过程当中的一个点啊,就是说还是利用刚才我们所聊的这几个内容去完成我们整个开口到MR的一个翻译工作,而且你要知道在在翻译过程当中呢,它会自己做很多的一个优化啊,它会做很多优化是这样的一个过程,这是我们所聊架构,那刚才也提到了,主要记得就是这四个系。啊,尽量的课堂上你去去记一下,因为这个东西比较简单对吧。
我来说两句