00:00
那现在这个正式开始上课,那现在我们先看一下这个,先看这个第一个框架啊。呃,来看看这个P是个什么东西啊,它首先呃也是一个这个及时查询框架,也是及时查询框架,那既然是及时查询框架,就要求什么,是不是就得要求他得查的快才行啊。对不对,那这个这个所谓的查的快,我们快有不同的这个实现方案,那咱们麒麟它是怎么去实现这个,呃,快速的高性能的查询的呢?它使用的是这个预计算,对不对,是预计算,那这个pres它的这个原理是什么呢?它不是预计算,那它是什么啊,它是这个基于内存进行运算。比如说它那个,呃,主要这个就是能在这个内存当中去完成,那尽可能在内存当中去完成这个计算,那这是他快的这个原因啊好,那下边是这个price的一个基础概念,我们先来看一下啊,来把它点开。
01:02
OK,我们来看看他的这个基础概念,这不好意思啊,这小狗又开始叫了,一会非得揍他一顿啊,来,我们看一下这个第一句话,呃呢,它是一个开源的,分布式的。Circleq查询引擎,它也是一个搜查引擎,其实说白了也是写S是吧,那我们看它的这个性能如何啊,它的数据量呢,支持GB到PB字节。PBGB到PB,然后呢,主要用于诶这个秒级的查询场景。秒级答案场景啊,那然后咱们来看一下这个,呃呢,它的一个这个注意事项,我们看看下边啊。那Bristol呢,它呃,就是说虽然可以解析这个circle,但你要注意它不是一个标准的数据库,就是它跟我们的,呃,跟我们熟悉的什么my circle Oracle这些东西,它不是一回事。
02:00
也就是他不能代替他们也不能用来做这个,呃,Or TP系统也不能做,Or TP系统也就就记住就行了啊,我们price是一个什么东西,就是一个分析引擎,就是用来做计算的,是不会去存储数据的,不会存储把这个记住啊好,那这个呃呢,它跟我们这个麒麟,诶这个东西我们可以先简单的来做一个对比,先简单做一个对比啊,那咱们的麒麟它有什么特点?麒麟它的特点就是说我数据量是不是能够支持的非常非常大呀,甭管多大的数据量,我都能够做到这个亚秒级,或者是呃,这个秒级的这个响应,我麒麟始终能达到这个性能,但是pre它就不一样了。Press就不一样了啊,因为它什么,因为price它不是预计算,它不是预计算,然后呢,它支持的数据量呢,一直在GB到PB这个这个阶段,在这个数据量上OK,我能够实现秒级,甚至是亚秒级,如果数据量数据量少呢,我也能达到亚秒级,但是它因为不是预计算对不对,所以说它肯定随着我查询的数据量的这个增长,那我的查询时间呢也会增长。
03:06
也会增长,那如果说数据量如果超过它能承受的范围,那这个查询延迟可能就会到达分钟,甚至这个十几几十分钟是这样的啊,这是咱们S也是它只能在这个数据量这个这个量量级下边能够达到秒级查询的这个响应。好,这是pres,那德那那个麒麟呢,我们是甭管多大数据量,基本都是毫秒秒级都是这样的啊,那这就是pres呢,和我们这个诶麒麟之间这样的一个一个对比关系,但是有没有它的优点呢?P有它的优点,什么优点,咱麒麟它其实使用的时候呢,有一定的局限性啊,有一定局限,什么局限性呢?就是说我们麒麟是不是只能做这种o lap式的这种查询啊,什么op就是那个多维分析,多维分析,也就是说呃,所以说我能够快速的去呃变换各种各样的维度,但是但实际上呢,你查询的这个S的形式基本上就是这种,是不是就是格外,然后加和函数这种形式啊,基本上就是这种,但是那个press它不一样,我们press呢,它不是预计算。
04:10
它不是预计算,因为麒麟为什么它是那样,因为麒麟得预计算,你查只能查它计算好的对不对,你才能查的那么快,那price它没有预计算,没有预计算呢,也就是说我随便去查我那个circle呢,我怎么写都可以,诶是这样的啊,这是咱们press它的这个跟麒麟对比的一个这个优点,就是说我那个circle,诶支持的这个复杂程度要更高一些,好,那这就是咱们pre跟麒麟的一个简单对比啊好,那完事之后呢,我们来介绍一下这个它是怎么来的啊,实际上这个pre呢,它跟我们的have,诶是由同一个公司这个诶开源的。哪个公司呢,就是那个Facebook。Facebook啊,那其实这个怎么怎么来的,其实最开始的时候呢,呃,在这个这个哪在这个Facebook这个公司内部呢,人自己开发的这个have,诶然后用have呢去呃处理一些这种这个数据分析的这样的一些请求,但是随着使用的过程当中呢,因为have底层MR默认最开始对吧,所以说。
05:08
不能满足他们这个交互式查询的需求,太慢了,所以后来呢,人家就开发了一个什么东西,那就用来代替这个have,去完成他们这个,诶机器查询的这样的需求。然后后来呢,这个也开源了,是这样的啊,这是咱们pres它的这个一个这个出身吧,好,那这个简单概念介绍完之后呢,我们往下看。下边呢,来看一看这个的这个基础架构,看它基础架构啊,那这个架构呢,呃,其实也是比较清晰的,比较清晰,我们来看一看pres呢,它里边这个是可以搭一个集群的,Pre一个搭一搭一个集群,那这个集群当中呢,有这样的两个主要角色。两个,一个是coordinator,一个是ER,呃,Coordinator看名字就是什么,就是那个什么同同领者,协调者的意思对吧?那worker呢?呃,就是这个工作者干活的是吧,就是计算的,说白了就是那就这两两大角色,那这两大角色之间他是怎么进行这个呃工作的呢?是这样的哈,来大家看一下这个地方。
06:12
呃,Cri这是我们P的客户端,那客户端呢,会把请求发送给这个P的coord,也就那个协调者,嗯,那这个所谓的请求其实就是什么,就是circle呗,对吧,你要把circle呢,诶分给这个,呃,Co,那他接收到这个请求呢,其实跟我们那have很像,因为他们基本上都一个公司开发的,对不对,会干什么,先把这个circle呢,给它解析成什么东西,解析成这个pre自己的这个,诶诶物理执行计划就是计算任务。执行成自己的这个执行任务,那把这个计算任务这个生成完之后呢,干什么?诶给这个worker发分发,给worker分发,那OK,可能这个worker呢,负责诶计算一部分的数据,那个worker另一部分,这个worker另一部分,那让他们去进行干活,其实就是这样的一个,呃,大体的一个一个结构,大体一个结构啊好,那呃这个两大角色,咱们简单了解一下之后呢,我们看看后边是什么东西啊。
07:08
后边看这位置。这里边有一个这样的概念叫做什么叫做catalog,对不对,Catalog catalog catalog,那这个catalog在pre当中是一个什么样的一个概念呢?是这样啊,因为pre呢,我们要是不是要是不是它是一个分析引擎啊,对吧,分析引擎你得要数据才能分析对吧?你的数据源诶是什么东西呢?在我们的price当中呢,我们呃一个每配置一个数据源呢,诶咱们就管这个数据源称之为一个catalog,就是咱们需要去通过这种方式去配配这个数据源的。那这个,呃,我们它支持的数据源都有什么呢?它支持的数据源非常非常丰富,可以直接对接have。就是直接我们have当中有什么表press呢,直接能够拿过来进行这个思核分析,而且速度呢,要比咱们那个have原生的MR要快很多,快很快一个量级,什么叫一个量级,一个数量级,一个数量级多少倍数,数十倍,比它快十来倍,是这样的啊,就所以说这个速度还是很快很快的,这是咱们这个这个price,他这个数据源就是一个数据源,叫做一个catalog。
08:13
对,那还有什么数据源呢?有have,还可以对接卡夫卡,甚至还能对接什么red,还有可能会有一些图数据库,它其实都能对接,是非常强大的啊,非常强大,好,那接下来咱们呃,再深入的去看一下,这个每一个数据源当中,我们在配置的时候,我们需要去注意哪些东西,来大家看啊,我们每配一个数据源,每一个catalog,我们都需要在这个里边呢,去给它定义一个什么这个对应的collector。Connector什么意思,连接器的意思啊,就是说我对接have的数据源,那要配一个have连接器,那对接卡夫卡的数据源呢,需要配一个卡夫卡的connector连接器,同理red呢,对一个red的连接器,诶是这么去对接的啊,那对接完之后大家要注意,就是说甭管我这个数据来自于什么地方,你是have也好,卡不卡也好,那我到了这个press当中呢,我的数据结构都是什么结构呢?都是这个结构。
09:05
都是schema加table的这个结构,那首先先说sIgMa是什么啊,SIgMa大家就可以把它跟我们have当中,或者是咱们MYSQL当中的那个database进行类比。Data。可以把它跟database进行类比啊,把这个记住好,那这个table是什么呢?Table那就是我们呃,Have当中或者MY当中那个table的概念。也就是说甭管数据来自于哪,我进来之后都是,诶数据库加这个表的结构加表的结构是这样的啊,那呃,大家来看一下下边啊,你看我们是不是have或者是呃,不,我们这个什么have,什么卡夫卡,什么red进来都是这样的一个结构啊,那这样的结构有什么好处呢?这样结构啊,就是诶导致我们这个它有一个非常强大的功能,什么功能呢,我可以实现什么呀,实现这个跨数据源连表查询。跨数据源里边查询啊,什么意思,就是说我可以把have当中的数据跟什么卡夫卡,或者跟那个其他那个,比如比如说买当中的数据,我可以进直接进行照。
10:09
我可以直接进行照,这是非常非常强大的,为什么呢?因为甭管数据来自于什么地方,甭管它来自于什么地方,我的数据都是什么样的,我的数据它是不是都是skyma加table的格式啊,都是这个格式,那也就相当于我把两个库里边的表进行照,对不对?其实这个也好理解了,因为它进来之后,数据结构是统一的,是统一的啊好了,那这就是咱们press的这个技术架构,加上它这个数据源,然后这个地方呢,大家看啊,咱们这画了一个have me store,那这个东西是干什么的啊,其实这个东西呢,它不是press的架构当中的东西,这是谁?这个呢,是我们单独的给have配的一个东西啊,大家注意,我们P要想去对接have这个数据源的时候,大家可以想一想,你说我pre只要拿到have的什么就够了。我就能去have里边查数据了。其实只要拿到have的原数据,那pres是不是就能够去分析have当中的数据啊,为什么?那你想一想,Have的原数据当中存储的是什么?存储的是我数仓当中有哪些数据库,有哪些表,对吧?那除此之外呢,那每张表,诶我的这个数据在HDFS上边存在于哪个路径,对不对,我是不是在原数据当中也是存储的的呀,对吧?那所以说press只要拿到原数据,那就可以根据原数据去HDFS上边呢,去拉取我们要分析的这些数据了。
11:31
是这样的,那就说咱们呃,Pre要想去对接have,那就要求我们得去启动have的这个言数据服务,那pre呢,就可以去从言数据服务当中获取还有的原数据了,其实是这样这样的一个东西啊。好,那P的基础架构呢,咱们就呃了解这么多,呃主要是两大角色,一个是Co这个接收请求,分发任务,Worker干活了,那后边呢,需要去配置catalog,也是去配置数据源,那数据源到了price当中呢,都是SKY加table的结构,那既然都是一样的,我就可以跨数据源连表查的。
12:05
是这样的一个结构啊好,那这里边还有一些文字,文字呢,咱们就不再看了啊,跟我刚才讲的是一样的,那咱们就往下走,那接下来呢,我们看一看这个的它的这个优缺点,它的优缺点还是打开这个PPT啊。好,那这个你看啊,咱们这个其实有很多这种,就是基于内存进行计算的这些框架呀,其实有很多,你比如说pres,比如咱们前面讲那个那个T子,诶实际上它也是这个对MR的一个这个优化,基于内存进行计算,包括后边我们会学Spark。对不对,还有可能会学什么inela这些东西都是都是利用内存,都是利用内存计算啊,那他们这些东西啊,都有一个特点,诶你在他的官网上啊,都会找到一个图,什么图呢?就是跟他那个mapduce进行对比的图。每个框架,每个这种框架,官网上都有一个这样的图,都爱和map producedu去比啊,嗯,那这个时候,哎,我比map produceduce快100倍,那个时候我比map producedu快十倍。
13:00
都是这样的啊,那我们来看看这个press,它这边这个图啊,那左边是mapdu mapdu呢,它这个因为它比较慢,为什么比较慢呢?因为我们这个map结束或者reduce结后,结束之后是不是都得落盘啊,第四课第四课落盘都得落盘,那这个呃,落盘的时候会有磁盘IO,而且甚至会有出现什么问题啊,就是咱们这个map结束,哎,我这个数据往reduce发的时候都要干什么,是不是还有可能会进行跨数呃跨节点啊,对吧,也就是还有可能会有网络IO。还可能会有网络IO,那这样一来的话,那这个mmr呢,就是这其实是他慢的这个主要的原因,大量的磁盘IO和这个网络IO导致它非常慢,你要说这个mmr它算的快不快,它算的其实不慢,算主要是磁盘IO和网络IO这个太慢了,这这点啊,那pre呢,咱P这边呢。他这个为什么快呀,它是这样的,就是说它会充分这个利用这个内存,充分利用内存,也就是说我们拿到一个circleq之后,拿到一个circle之后,它会把这个SQ呢,先给他解析成一个完整的这个工作计划。
14:04
一个工作计划,那这样OOKOKOK,那这个计划,那个就是完整的这个计划生成之后呢,我怎么办?我直接从头诶直接计算到尾,从头计算到尾是这样一个计算流程啊,这样一个计算流程,而且诶能在内存当中完成,尽可能在内存当中完成是这样的,也就是说它会省去咱们中间好多次的这个呃落盘,也就是减少了这个磁盘IO,网络IO,那这个速度是就非常快了,主要是这块啊,那其实咱们后边会学这个Spark呃,那些东西啊,其实大体的原理基本都是这样啊,都是先生成一个执行计划,然后呢,诶,直接在内存当中从头计算到尾,是这样的一个过程,好,那现在我们看看这个文字吧。那这个文字press,这个基于内存运算,减少磁盘IO,呃,那这个计算更快,这个咱们已经说过了,那看下边,下边呢,这个是刚才也提过了,其实啊,就是咱们press能够连接多个数据源,然后能够进行跨数据源连表查,哎,比如说从have当中,诶跟MY当中,我们去查数据,然后这俩表进行招它都能完成。
15:05
这个其实是这个其他框架所不具备的啊,这个其实是他只只只只有他能做做到这些这件事还是比较强的啊好,那他完了之后我往下看,下边呢,呃,它也有自己这个缺点,那缺点是什么呢?我们来一起看一下啊来那pre呢,它能够处理GB到PB级别的数据对不对,但是他肯定不是说把所有的数据统一全部加载到内存当中去计算的,这不可能啊,不可能说咱们这个集群由这个PB级别的这个这个内存,那这个有点太太太夸张了啊,到不了这么级别,但是实际上这个在公司里边呢,咱们一个集群这个总的这个内存资源量呢,能够达到TB级别。一个一个比较大的集群啊,能够达到TB级别,这个光内存啊,就是加在一起能达到这个级别,好,那往后看啊,那后边呢,我们有什么这个。呃,Pre呢,它不是把所有数据都加载内存的,而是怎么算的呢?而是看,而是根据场景,什么场景,比如说是咱们这种普通的诶这个count,呃,呃,或者是这个avg等聚合运算,什么聚合运算就是咱们那种普通的简单的circle,就是从一张表里查,查完之后干什么呀,是不是,然后这个进行这个这个分组group by,然后后边再加聚合函数,是不是于这样的一些查询啊,那对于这样的诶查询呢,它是怎么做的,是诶边读数据边计算再清内存。
16:27
再读数据,再计算,然后这种消耗的内存并不高,呃,这个我给大家演示一下啊,看它到底怎么算的,其实这样就是对于我们一个单表的这样的一个聚合运算,单表的一个聚合运算这么算啊,OK,我这是一个大表,里边有好多数据,我要对它进行运算,对不对?那我要运算的话怎么办?诶,我先读一部分数据,把这部分数据加载到内存当中,在内存当中呢,我进行这个聚合运算,既然是聚合运算,那你说是不是肯定会有一个聚合之后的一个结果呀,那这个结果诶我会留着,我会留着,我会留着,然后那个算完之后结果,算完结果之后那个原始数据还用吗?是不是就用不到了,那我就从内存当中把它清掉,清掉之后呢,那我再去加载另一部分的数据,那把这部分数据呢,再加载在那加,再加载到内存当中,然后对它进行聚合运算,完事之后,聚合之后是不是还得跟上一波数据的这个结果进行一个合并啊,对不对,那合并完之后又又留下来一个结果,那接下来再去读数据,再算,然后再清再算,再清再算。
17:28
它是这样的一个过程啊,那这个其实我们这个内存消耗的其实并不严重,并不严重,而且呢,它算的速度也是非常快的,因为都在内存当中完成吧,对吧?那但是呢,对于这种连表查询的时候,它就可能会产生诶大量的临时数据,呃,因此那个join的性能呢,可能会这个相对来说要比咱们单表要差一些,其实这个东西是也不能算算作它的缺点,为什么?因为你你你pre也好,你have也好,我们join的时候呢,是不是都会产生这个临时的数据啊,对吧,都产生这个数据,然后你这个速度呢,相对来说都会比较慢,这是为什么,你想一想啊。
18:06
其实他这块所说的就是什么啊,就是他当然他说这个连表查肯定也是什么,也是先把这个多张表照到一起,照到一起干什么,再去进行聚合,肯定也指的就是这种这种这种运算啊,而不是说就是单纯的join,你光照你不算,那那有啥意义啊对不对,那肯定也是说的,诶这个join,然后加聚合肯定是这种,那你想一想,你要想要有join有聚合,那你是不是肯定是得先把这些表我得join到一起,我是不是后续才能进行聚合呀,对不对,那所以说你就得就得就就就得干什么呀,就得先照到一起,那照到一起的时候,这是不是会产生大量的这个临时数据呀,对吧,然后呢,照完之后呢,再去进行计算。再聚合,再进行聚合聚算,这是这样的啊,也就是说对于这个,呃,咱们单表这个聚合和这个join之后再聚合,那我这个join呢,肯定是会产生大量的数据的,那这个运算速度是比较慢的,这个是没有办法的,这个你甭管have,诶你甭管这个咱们P我join的时候呢,呃,它这个性能呢,都是相对来说要比较差的,相对来说比较差的是这样的,呃,John要把一张表全加载的,全加载到内存,这倒是也不用。
19:14
用不着啊,Join的时候你不可能把一整张表都加载到内存里啊,不可能,肯定不是这样去做的啊,这个一会儿后续我会给大家讲一下,咱们press当中的这个join算法的当中呢,有两两种join算法,一种是哈希照,一种是广播join,这个后续我再给大家讲啊,是这样的,也就是咱们现在就知道我这个装完之后再进行聚合呢,我要产生中间数据,这个速度会比较慢。呃,他这呢,给他算的是一个缺点呢,但这个其实也不能算作缺点吧,这个基本上都有这样的现象,都有这样的问题,好,那这个咱们简单的了解一下,然后往下看啊下边呢,呃,这有一小节,但这一小节呢,其实有点尬哈,为什么呢?它这呃有一个什么呀,PAL跟这个impala性能比较。那这个拍了,我们其实没学过对不对,那其实这个课程是这样的,就是在这个之前呢,我们之前会有一个CDH的课程。
20:07
CDH,那CDH当中呢,有一个这个非常知名的这样一个机,其查询框架叫做inela,叫做inela,那inela呢,呃,它跟这个它的架构是非常这个像的,是非常像的。所以说我们通常会把这俩框架呢,来给它做一个对比,同常做一个对比啊,但是我们现在那个CDH的课呢,呃,我们可能应该是放到后边去了,放到后边去了,所以说这个派D没学没学也也不要紧,那这边呢,我们就来简单的看一看这个最终的一个测试结论啊,测试结论看一下这块呢,有一个帖子大家可以感兴趣可以看一看啊,那我们看一看这个位置。呃,咱们的测试结论是什么呢?是引拍了它的性能呢,实际上是要稍领先于这个的。只是稍领先于,其实差不了多少,没差太多啊,但是这个pre它的优点是什么?它的优点是在数据源的知识上是非常非常丰富的。刚才咱们说过了,我price都支持什么,支持什么have图数据库,关系数据库等等这些东西它都支持,但是这个inel了呢,它就支持不了这么多的数据源了,Inel了它只能支持这个我们的haveve,只能读have里边的数据啊,是这样的,所以说这是price跟inel这样的一个性能的对比,这个东西那个咱们既然也没有学过in牌了,所以这边呢,咱们就不再多说了,不再多说了,好,那到现在为止,咱们这个price的的基础的概念,咱们就呃,就说完了啊,然后把视频录一下。
我来说两句