00:00
好,各位同学,那接下来呢,我们看一下这个麒麟的架构,麒麟的架构呢,相对来说还是比较清晰的啊呃,但是它里边的组件是比较多的,组件是比较多的啊,那现在我们把这个PPT点开一起来看一下。好,那咱家现在看到的呢,就是这个麒麟的核心架构,麒麟的核心架构呢,我们可以分为三层去看啊,分别是哪三层呢?来这么分。咱这么分啊,那最上层呢,是不是叫做查询层啊,对吧?那下边这个呢,我们叫做计算层,那中间呢叫做路由层,那中间这个路由层是干什么用的,一会儿来解释啊,我们现在先看最下边的计算层啊,先看最下边的计算层,那这什么叫做计算层呢?大家想想啊,麒麟我们前面说过了,它它是预计算对吧,预计算预算是不是也得计算对吧?也得计算就得有计算层啊,就这个意思啊,那计算层里边呢,一共分为两部分啊,一个呢是原数据,一个呢是QB build的N。诶,这个分别是啥,我们先看下面这个cube build n,这个cube实际上指的就是啥。就是我们刚才提到那个olapq吧,能理解吧,是这样的啊,那build build是不是就构建的意思,那你说构建olapq的过过过程就是什么过程,是不是就是一个聚合的过程,没错吧?啊,那其实就是啥过程,是不是就那个计算过程对吧?那这个所谓的cube构建引擎是不是就是计算引擎啊,就这个意思啊,那完之后我们再来看一下这个mad date me data指的啥?原数据,谁的原数据啊?
01:25
就是cube的原数据啊,你想一想啊,这个cube里边咱是不是得包含维度信息对不对,你得知道你是哪几个维度啊,对吧?那完之后是不是还得知道,诶我这个聚合函数是什么等等等,是不是有这样的一些信息啊,对吧?诶这个呢,就是原数据信息,这个理解一下就行了啊好,那接下来我们继续往下写啊,那知道了它的计算引擎之后,我们继续往下看,那下面咱们看啥,就得看它数据从哪来,我算完之后得存到哪去,对不对,那我们来看一下数据从哪来。大家来看啊,那左边列出来的就是,诶麒麟能够支持的数据源在这里边呢,我们重点对接的就是have和卡不卡,那我们先来看have啊,那你说我要对接have的话,你说我做的是什么计算。
02:06
是不是离线计算对不对,那如果对接的是卡夫卡呢,是不是就是实时计算呀,对吧?那也就是说我们这个麒麟呢,是能够去做离线的多维分析,也能够去做实时的多维分析的啊这个理解一下啊,当然在我们离线数仓这个项目当中,咱们是不是重点对接的就是have啊对吧?OK,那我们继续往下走啊,那再看后边,后边是啥。诶,就是我们这个数据的存储的目的地,大家看一下啊,那我们这个数据从汉里边,比如说读过来,读过来之后是不需要进行这个聚合呀,对吧,聚合之后,那我把结果存哪去呢?存在了这个h base当中。诶,那它为什么要存在HP里边呢?这个咱们得想想,你说麒麟为什么要把计算结果存到h base里边去?一。嗯,这个大家解释一下啊,首先咱们得知道h base它的优点是什么。
03:00
的优点是啥呀?H,它官方网站上对他是怎样去描述的呀?啊,那h base官网是这样去描述的啊,说h base呢,诶,它是一个能在很短的时间内啊去干什么,去进行海量数据的,呃,随机读取的一个存储引擎。啊,那这里边有这样的几个概念啊,一个呢是很短时间内就是很快对吧?啊完了之后能能够对什么对海量数据进行随机读写的一个存储引擎,那也是最终H定位,定位到一个什么,是不是一个海量数据的一个存储啊,对吧?啊,它是一个存储数据的,完了之后它的优点就是啥呢?就是能够对海量数据进行快速的随机读写。啊,是这样的啊,那大家都知道HDFS,它是不是也是一个海量数据的存储引擎,对不对?那有了HDS为什么还要再来一个h base呢?啊,那这个就得分析一下它俩的特点了,对不对?那刚才说了h base它的优点是能够对海量数据进行随机读写对不对?那H天S呢?它的优点是什么?它擅长的领域是什么呀?是对海量数据进行批量的读写对不对?是这个道理吧,是量的读写啊,OK,我读一大一大块数据,或者我写一大会数据,那这个HD是没问题的,但是随机读写它行吗?它是不写的,那首先大家得知道什么叫做随机读写,什么叫随机读写。
04:22
比如说举个例子啊,那我这儿呢,有一个大表啊,或者一个大文件,我现在呢,要删除这张文件里边的一行数据,或者是要修改一张文这个文件里边的一行数据啊,那对于这种场景,那你说HDS擅长吗?他是不擅长的啊,他不擅长,但是谁擅长h base它是擅长的啊,是这样的啊,那大家回忆一下h base它的这个底层原理啊,H base底层原理是什么样的。他为什么擅长这种随机随机读写呀,啊其其实都大家都知道啊,实际上h base他是怎样去实现这个随机,呃,比如说先说写吧,但是怎样去实现随机写的操作的呀,删随机对随机写是不是分为随机修改或随机删除啊,对吧?啊,就是在HP当中,不管是删除还是诶修改,我都是怎么做,对,实际上都是以追加一条新数据的方式去实现的,对吧,对不对,这样一来是不是看起来就很快啊,对吧,他没有真正的去找那条数据,是这个道理吧,是这样的,OK,那这是他的随机写,那他的随机读为什么那么快呢?
05:25
随机读为什么也这么快啊对,因为HS是不是对这个读做了大量的优化呀,对吧?啊,比如说举个例子啊,首先第一点是不是有RK的概念,RK它是不是有序的,对不对,RK有序有什么好处?RO有序,那我后续根据ROK去检索数据的时候,我是不是就可以利用利用一些查找算法,举个例子啊,比如说二分查找法,我是不是可以去快速的找到我想想要的一个数据啊,对吧?哎,这是一点,那除此之外那还有哪些优化呀啊对,比如什么布隆过滤器啊,比如说什么那个blockca读缓存对不对,还有什么,还有那个h file,大家都知道h base的数据是不是最终存在HTS上,以h file的形式存在对不对,那这个h file的结构是不是也是很重要的呀?对吧,H file什么结构啊?
06:09
是不是它叫做呃分块啊对吧?哎,它里边呢,有一个一个的小块,一个一个的block,那每个block呢,默认情况下是不是64KB啊对吧,是这样的,那除了有块,那这个h file里边还有啥有索引,有index索引对吧?索引能够干啥?是不是能够快速的定位到你想要的那个框上,对吧?啊那这样一来呢,就能够省去很多这个便利文件的时间啊,是这样的啊,当然类似的优化还有很多啊,那也就是H呢啊,他对这个随机读写做了大量的优化,所以他很擅长这个随机的读写。啊,是这样的啊啊,那也就是说我们这个h base它更适合做什么,是不是更适合作为一个这个呃,随机读写的一个呃这种存储引擎啊,对吧,就这个意思啊好,那现在我们再来分析一下这个麒麟他为什么要选h base去作为它的这个最终结果的存储引擎。啊,为什么呀。
07:01
首先第一个啊,那我们前面提到过麒麟是预计算对不对,预计算它是不是需要穷举所有的计算结果对不对,这个计算结果其实数据量也不会太小,对吧?啊,而且随着我的业务的扩展,我这个数据量可能会越来越多,对不对?所以说首先我要存储的,我我要选存储引擎的话,我得找一个啥,是不是得找一个易扩展的海量数据的存储引擎,对不对,那HP是不是就是很容易扩展呀,对不对,那这个是一点,那除此之外呢,我们再来分析下一个问题啊,大家都知道我们O这种rap,我们查询数据的时候是从哪查,不是从原始数据查,对吧?咱们从哪查的,是不是从结果里边查,也就是从哪查。是不是也就是说h bases的啥对不对,所以说我这种,而且这种极其查询引擎,我得保证啥,我得保证能够快速的查询,对不对,是这个道理吧,那h bases是不是恰好就能够提供非常的这种随机读的特这个功能对不对,所以说我选用h base去作为我的这个存储是没有任何问题的啊是这样的啊OK,那这会呢,大家理解一下就行了啊好了,那最终我们来总结一下啊。
08:01
首先啊,那我们去计算的时候呢,是从have里边去对接这种星型模型的数据,那对接完之后呢,来进行相应的计算,那计算完之后呢,把结果是不是存到了h base当中啊,就这个意思啊,这就它的计算层,那紧接着我们再来看一下上边它的查询层啊,查询层呢一共有两层,一个呢是query engine,那一个呢是rest story啊这两层分别是什么?给大家来解释一下,那首先我们先看这个rest story这个层其实很简单,它其实就是给我们提供什么的。是不是提供这个查询接口的呀,对吧,它就是给我们提供查询接口的,OK,我们来看一下啊,这个路遥他先不看,一会儿再看,我们先看上边啊,大家可以看一下,那这个这个rest server呢,实际上给我们外界提供了丰富的产接口,这里边有普通的rest CPI rest CPI其实就是啥,是不是就是一个这个HTTP请求的一个地址啊,对吧,我们按照他的要求给他发送的请求啊,那然后他呢,就会给我们回相的响应啊,这个理解一下,那除此之外还提供什么接口。
09:00
是不是还有这什么GBC接口和ode接口啊,对吧,这个大家理解一下啊,也是接口是非常非常丰富的啊好,那接下来我们继续往下进行,我们再来看一下这个query engine它的作用是什么啊,大家想想啊,就是我甭管诶我使用的是什么接口,那我们使用麒麟的时候,你给他发的都是啥,是不是就是circle号对不对,我们要麒麟是不是用来查询数据的呀,对吧?诶就发server,你把circle发过来之后呢?那rest server会接收到这个circle请求,那接收到之后它会把这个circle后呢,交给这个query engine去处理,那你说query engine他做的主要工作应该是啥?是不是就解析circle对不对?解析circlel,把circlel转成什么呀?就是转成h base的查询语言对吧?因为我要去HS里边查询数据啊,对吧?是这个道理吧?好,那从里边把数据查回来之后呢?那需要干啥?说要把结果通过rest server给我们哪给我们的客户端进行相应的响应啊,对吧?要把结果给它反馈出去啊,其实这就是这个red server和query engine的主要作用啊,这个大家理解一下就行了啊好了,那这就是我们的最重要的两层,计算层和查询层啊,那中间呢,还有一个路由层,这个路由层到底是干什么用的呢?给大家解释一下,你看啊,它是不是有一条虚线指向了have,还有一条虚线指向了这个h space啊,对吧?啊,那这俩到底啥意思?我给大家解释一下,那想想啊,我们麒麟哎,它的它的它的这个原理是什么,是预计算对不对,那想想啊,我们这个预计算只能去计算什么样的这个数据啊。
10:27
只能计算什么样的这个结果呀,是不是只能去计算我们那种多维分析的结果,对不是,是不是只有那种什么分组聚合这种多维分析才有规律可循,对不对,那可能有一些复杂的这种查询,我们是不是在预计算的时候是没有计算的呀,对不对,那没计算,那我就会出现什么样的问题,比如说有一个人,哎,我不太了解这个麒麟的原理,对吧?那现在我来了一个复杂的搜索请求啊,那这会导致什么?导致h base里边是不是可能没有他要查的那个结果,对不?那这时候我去h base里查是不是查不到数啊,对吧?那麒麟想的是什么呢?如果你从h base里查不着,那我就给你给你路由到哪了?哎,我就给你路由到have里边,Have是不是原始数据,原始数据是不是肯定能统计出来啊,对吧?是这人家是这么去想的,但这个想法是很好的,但实际上这个东西并不是那么的好用,为什么不好用啊,大家想一想啊,那由于它存在了这样的一个功能,是不是就导致了我这个查询预期的这个不确定性啊,对吧?我可能有些资说,哎,我很快就能返回,压秒返回,那有些资员说呢,我说可能得几分钟或者几十分钟甚至几个小时才能返回啊,对吧?啊,所以会有一个不确定性啊,那这样一来呢,就会影响到我们这个系统后续的这个设计,那我后边我到底是应该按照诶几秒钟去设计啊,还是按照几小时去设计啊,这个是不是就不一定了,对吧?那所以说呃,现在呢,默认情况下呢,这个路由层它是关闭的啊,是这样的啊,那就是现在是什么情况呢?现在所有的色殊请求都只会发到诶。
11:52
这个H能拿到结果就返回,拿不到呢我就返回空,就这个意思,这就是路由层的作用,大家理解一下就行了啊好了,那这个呢,就是其麟的架构啊,下面呢,还有一些这个文字的介绍啊,那这些文字介绍跟我刚才讲的是一样的,所以在这呢,咱们就不再一去看了啊好,我把视频停一下啊。
我来说两句