00:00
我们把这个PPT点开。嗯。啊,这是这个麒麟的一个架构图啊,这个架构图呢,就是呃,看着这个挺简单的对吧?啊,这个分层很明确对吧,但是这里边儿东西还是比较多,咱们一点一点解释啊来咱们先看呢,它分为的是几层啊,它大致呢,分为这样三层,下面这层计算层,上面这层呢叫做。什么层啊,查询层,计算层,查询层,然后呢,这个中间这叫啥叫做路由层啊,这个路由干什么用的,后续我再解释啊呃,咱们先看这个最基础两层,一个计算一个查询啊,那现在呢,我们先看计算吧,先看计算啊。计算里边呢,咱们分为这两层啊,一层呢叫做原数据,这个原数据呢,呃,它其实可以配置的啊,存在什么地方,你可以让它存在,呃,这个HP当中也可以让它存在哪存在这个关系数据库里都可以,可以配置,默认在HP当中啊啊,它这个原数据你先不用管它存哪啊啊咱们就记住啊,这个原数据指的是啥啊,指的就是谁呀,就是我们那些多维数据集的,也是那个olap cube的这个语言数据。
01:15
啊,比如说你的or q啊,你里边有哪些维度字段啊,你的度量值是什么,你聚合的函数是啥?这是不是有它那原数据信息啊,那这些哎,指的就是这个ma date啊,那这个咱们完了之后看下边,下边呢才是咱们那个真正的计算引擎啊,这个计算引擎呢,叫做cube build engine啊翻译过来就叫做cube构建引擎。啊,这个所谓的构建cube就是干啥呢?是不是就是把咱们的明细原始数据给你放到olap QB当中,OPQ当中,咱们也分析过了,就边存的是啥呀,是聚合之后的结果对不对,那所以说你构建cube的过程就是什么的过程。计算的过程啊,就是计算的过程啊,所以这块呢,咱们能搞明白就可以了。好,那既然你要计算了,计算你是不是得有原始数据,那计算完之后,你的cube是不是得存在一个地方,那你的原始数据来自哪儿,你的cub又存到哪儿呢?我们来看一下原始数据呢?我们可以对接的有这样的两个,一个呢是我们的have。
02:14
哪一个呢,是卡不卡,那如果说我们对接的是have的话,那你做的应该是什么计算,离线计算,那如果说你对接的是卡不卡呢?实指计算也是咱们麒麟的目前是既能支持这个离线计算,也能支持这个实时计算的啊有离线有实时,你要想做实时,那你就把你的实时数据对接到卡夫卡里边,然后呢,让麒麟去对接卡卡就行了,如果说你像做离线,做离线呢,我们直接对接have就可以了啊好,那咱们这儿呢,是离线,我们对接的就是have啊好,那完了之后呢,数据我从这个have当中拿过来,那结果计算完之后存哪去呢?存在h base当中。啊,你看现在的这个麒麟的数据呢,是存储到了h base里边啊,H base里边。
03:00
啊,这个大家呢,要注意一下啊,存到h base里啊,那麒麟在这儿呢,它为什么会选择h base呢,作为它的这个存储引擎呢,计算引擎,这个这个存储存储数据的引擎呢,为什么呀。啊,对,没错啊,首先大家得知道第一点。让你去选这个,诶这个麒麟的存储引擎的话呢,你需要考虑这样的两点啊,第一点啊,第一点是什么呀,因为我们麒麟它是要进行预计算的,那预计算呢,我需要把所有的结果穷举出来吧,对不对,那你说这个计算量,这个最终这个结果的这个数据量是不是也不小啊对不对,也不小,也很大啊,也很大,那所以说首先你得保证你的这个存储系统呢,它得能够进行很好的一个扩展才可以。对不对,因为我这个最终可能我这个随着我这个使用的时间的这个呃,增增长,那我这个结果级的数量会越来越大,对不对,所以说你得具有良好的扩展性,那h base是不是它去具备这种良好的扩展性啊,H base呢,我一张表,我可以进行不断的分裂,分裂成多个region,多个region呢,可以是不是横向的分,分布在我不同的R里边啊,对吧,而且它底层依托的是HDFS这个分布式存储系统,所以说这个诶扩展性肯定是没问题的。
04:13
好,那除了扩展性要强,那还得还得有一个点什么点啊。你查询的得快才行,对不对,因为我是集齐查询,我要求我从,因为咱们大家都知道啊,麒麟我是不是直接查结果呀,对不对,也就是说你结果存哪,你后续查的时候是不是从哪查呀,对不对,那我所以说呢,我我就还得考虑到我这个后续查询延迟得低啊,那h base它是不是就能够做到这个快速的查询呀,对不对,因为现在咱们给大家分析过,那我的h base呢,我会借助好多这个点去优化我的查询速度,比如说什么呀。比如啥呀啊,比如说最底层的存储,存储文件是不是HL啊,HL结构是不是有什么块有索引能够加速查询,我还有什么这个布隆过滤器对不对?呃,我还有啥呀,我还有什么这个block catch是不是能帮助我这个进行快速查询呀,而且我roll是有序的,是不是能够快速定位数据啊等等等等各各方面吧,麒麟呃,这个这个h base各方面吧,对它的这个查询速度进行了很大量的优化啊,所以说h base能够保证我的查询速度啊,所以最终呢,嗯,那h base呢,选做选选谁啊,选h base呢,作为了它的这个存储引擎啊,是这样的啊,也就是他那个所谓的olapq呢,就存储在了h base当中。
05:27
好,那这样一来呢,我们这个计算层基本上就明确了啊,那数据呢,从have当中来,那计算完之后呢,你看啊,这有一个什么,有一个star game date对吧,是不是星型模型的数据啊,当然雪花模型也支持,那对接这个模型的数据之后呢,我计算计算完之后呢,把结果存到了h base当中,那当然h base当中是KV建值对的形式对吧?啊就是建值对的形式,好,那这就是我们这个计算啊,就是这样的一套啊好,那接下来呢,我们再看上面这层,那上面这层呢,我们有两个啊,一个叫做rest server层,一个叫做啥呀。
06:01
Query engine查询引擎层啊,那这两层分别是干什么的啊?我们先说rest server层。Rest server呢,其实就是一个什么呀啊,就是我们的一个数据接口服务,相当于是啊,它它大致能够实现什么样的功能呢?其实昨天我不是给大家看了一下,呃,那个就是我写了一个小小那个呃,报表的一个小小项目,对吧?啊,那当时给大家演示了一下,我是不是访问了一下那个local的8080那个端口,然后后边它是不是加了一个地址啊,加了一个加一个什么,加了一个叉的,呃,加了一个派对吧,完之后是不是就给我响应了,响应的是什么形式啊。杰森对吧,还能想起来吧?啊,那我访问的那个东西,这就是一个rest的接口啊,就是一个rest风格的一个接口,就是相当于是一个你访问一个地址啊,然后呢,它给你响应具体的数据,然后数据呢,响应的格式呢,一般情况下就是接森啊,一般就是接森啊是这样的啊,也就是说它这样呢,相当于给我们暴了什么呀,是暴露了接口,我们可以访问这个接口,访问接口之后,他会给我们响应,那响应给我们的是啥呀?是杰森数据,是杰森数据啊当然呢,呃,麒麟呢,对这个这个响阳的街子呢,又做了进一步的封装啊,做了进一步的封装,那封装是什么呢呀,我们往上看。
07:15
啊,这个路遥层先不看啊,先看上边啊,那封成什么呢?哎,封装第一个,这是就是咱们那种普通的rest接口,你就直接请求,然后给你返回接子,那还有什么呀。哎,还提供了这个JDBC和odbc的接口,那JDBC大家应该都都都熟悉啊,都熟悉它是干啥的呀。是不是我们Java当中跟数据库进行交互的一个协议啊,对吧,那ODBC是干啥的呀,其实也是跟数据库进行交互的一个协议,那只不过这个呢,不是我们Java语言当中的,这是什么里边的呀,C语言当中的啊,C语当中的跟这个数据库进行交互的一个协议啊,啊是这样的啊,那当然呢,不管你采用什么方式去访问麒麟,那其实都会通过它的这个rest的接口啊,都会通过rest这个接口啊,都访问的是它访问就是这个rest的服务啊rest服务啊,那也就是说这个东西,那他到底是干啥的呢?其实就是干啥的呀,就是接受你的请求,然后干啥给你返回。
08:09
数据的响应对不对啊,就是干这个事的,干这个事的啊好,那这是它,那接下来咱们再往下看。下边这个query engine是干什么的啊,大家想想啊,你不管通过什么方式去访问麒麟,那你给他发送的所谓的请求里边肯定包含什么,肯定包含circle,因为使用频率是不是就是查询呀,对吧?那肯定有circle,那那这个run server呢,拿到这个circle之后呢,都干啥呀?会把这个circle呢传递给下面的这个查询引擎层,那查询引擎层它所负责的主要的工作就是啥?是不是就是解析你这套circleq,然后把SQL解析成啥呀?是不是解析成h base查询语言,因为我要去从你的h base当中查询结果吧,对不对,所以说你要把它查解析成h base查询语言。好,那解决完之后我去查询,查询完之后是不是会得到结果,那结果之后呢,我会怎么办,是不是通过这个rest server是不是在响应给你的客户端呀,对不对,其实干这个事儿了,就是把SQL转转化成或者解析成HP的查询语言啊好是这样的啊好,这就是查询层。
09:13
啊,那通过这样呢,其实大家能看到啊,咱们的麒麟给我们提供了丰富的接口啊,普通的rest API,那这个后续呢,我们会给大家演示啊,给大家演示一下到底什么叫做rest CPI,到底怎么用啊,其实很简单,就是访问一个地址就行了,就像我昨天那样,在我浏览器上面,我是不是访问一个请求,你就给我返回结果呀,啊,其实就是这个东西啊好,那这边往下走,那还有这个JBCODBC的接口,那有了这些东西,我们就能够和一些支持JDBC或ODBC协议的这个BI工具进行集成了,比如说我们昨天学的superide,他就支持GDBC,那他就能够跟我们的麒麟做一个很好的对接啊好,那再往下走。那到这儿呢,我们相当于完成了这个查询层的解释了啊,那接下来我们再看,诶再看哪,再看中间这个路由层啊,再看路由层啊,这个路由层它干什么用呢?其实呃,麒麟也很好理解啊,但现在先给我思考一个场景啊,什么场景大家说我们都知道啊,麒麟它底层的原理是预计算对不对,那预算呢,它会先把你所有的东西是不是给你穷举出来啊,但是他所能够穷举的仅仅是什么样的差询。
10:20
是不是那种多维分析的查询呀,对不对,它能穷举的是不是仅仅是那种按照维度计算分组,按照度量值聚合的那种计算,它是不是只能穷举那种,那如果说你在这儿呢,想做这种复杂的查询,你不是这种普通的这种分组聚合的查询啊,一些复杂查询,那你说麒麟能够帮你进行预计算吗?是不能的,因为你那个结果呢,可能是无穷无尽的,对不对,所以说这种呢,他不可能帮你去进行穷举的。啊,那所以说我们在使用麒麟的时候呢,假如说我在这儿呢,做一些,哎,没有进行预算的查询,那是不是你去h base当中查就查不到结果呀,没有啊,那所以说麒麟在边想的挺好,如果在HP当中查不到结果,那我就给你怎么样啊,我给你路由到have当中,那你从have当中原始数据里查,是不是肯定能查到结果,对不对,那当然他这想的好,但其实这个东西呢,不是那么的好用,为什么呢?啊,你想想,如果说我这个结果能从HP查压秒级响应,那如果说我去还有里边查。
11:22
那可能就几分钟,几十分钟,甚至几个小时,对不对,那所以说呢,这样一来会导致什么呀,会导致啊,我们这个麒麟的这个响应时间那不可预知,就是你也不知道它到底多长时间能给你响应了,对吧,你这是不知道了,那你如果说我要对接后边的系统,那你是不后边系统就不太好设计了呀,对不对,我到底是按照你压秒机响应设计啊,还是按照你一个小时响应去设计啊对不对,那所以说对后边的系统会有相应的影响,那现在呃,默认情况下呢,麒麟这个路由层呢,其实已经是关闭的了啊,默认就是关闭的不开启。啊,那它的现状是什么样的呢?现状就是来一个来一个circle啊,我能从h base里查,我就返回结果,我去h base查,查不到结果我就返回空,我也不会去,还有里边查了能理解吧,那通常咱们就这么去使用就行了。
12:10
好,那所以说我们大家在使用麒麟的时候呢,我们要注意这样的一个点啊,什么点,你去使用麒麟查询数据的时候呢,你只能查什么样的数据啊。是不是只能查你聚合好的数据啊,别的数据原始数据,明细数据,你比如说我贼来星麒麟,那你说能查出来吗。谁来星谁来星是不是就没有进行聚合,直接查明细数据啊,对吧,能查出来吗?你查不出来呀,对不对,因为你麒麟当中存的是聚合之后的结果啊,你查明细它是没有的啊,这个大家得搞清楚,这就是我们麒麟的这个架构啊啊,那这边我把视频录一下啊好。
我来说两句