00:00
啊,那咱们接下来呢,要讲的是这个,呃,另外一个及时查询引擎啊,叫做presal,叫做pres啊呃,那现在呢,我们先来看一下这个preo的简介啊,这个简介呢。两句话很简单。给它打开啊。答了啊,这个就是比较慢,这word里边这个嵌套的PPT打开特别慢啊。呃,算了,诶已经开了啊,那咱们看一下,先看第一句,呃这句话呢,大家一定得呃有印象才行啊,那首先看preo呢,它是一个开源的啊,也是开源的啊,分布式的circle查询引擎是不是也是写circle的呀,而且也是查询引擎,也是他负责计算,而不是这个存储系统,对吧?它不是数据库啊,然后它所支持的数据量呢,到什么级别了呀。GB到PB级别,那也就是说,假如说我们的数据量呢,已经超过了这个PB级别了,那这时候我们在使用P,那就不太合适了,那你用谁就可以了呀。
01:06
是不是麒麟啊,麒麟我数据量再大啊,我只要是能够提前算出来,我是不是都能实现一个很快的查询查询速度啊,对吧?那所以说这个呢,大家还是要来注意一下的啊,那它所支持的数据量就是GB到PB级别啊,然后呢,它主要呃用来处理什么呢?秒级查询的场景啊,也就是说pre呢,它能做到什么呀,能做到秒级查询啊,能做到秒级查询啊,其实真正的海量数据啊,能对海量数据啊,或者PB以上的这个级别的数据能够做到亚秒查询的啊,目前啊,对几乎是只有麒麟啊呃,当然现在也有其他的一些这个新兴的这种分析引擎,那他们有也有能达到这个P那个压秒级的,但是呢,他们的原理肯定都是什么呀。都会用到这个,呃,预计算啊,因现在呢,基于内存净计算呢,呃,在海量数据的这个基础上,是很难达到这个亚秒级的啊,基本秒级啊是差不多的啊,是这样大家需要呃了解一下,如果咱们真有这样的场景,要求达到这个啊,必须得是亚秒级响应,那这时候呢,大家就可以考虑一些啊,这种采用预计算原理的这种计算引擎,最典型的就是咱们这个麒麟呗,啊啊,那这就是presal呢,它的一个呃,最基本的这个概念啊,咱们需要把这里边的一个关键点得记住啊,第一个定位是查询引擎,是用来做分析,做查询的,做计算的,那再一个呢,它所支持的数据量GB到PB,那主要用来处理秒级响应啊,秒级查询的场景,也就他能做到秒级响应啊,把这几个关键点记住就行啊好,那下边。
02:41
下边这有一个有一个注意事项,那其实这个注意事项大家应该都都都都明白吧,应该不用看也能明白啊,咱们看一下,虽然price可以解析circle,但它不是一个数据库对吧?它不是买circle Oracle的什么替代品啊,不能用来做这个or TP,这个大家应该都能明白吧?啊这个咱就不再多说了啊啊,只是关于它的一个技术概念啊,那可以去看一看的官网啊,官网我提前打开了啊,这是它的这个呃,官网,这是price的官网,呃,然后这个price呢,它是由哪个公司开源的呢?是由,诶这其实也看到了啊。
03:16
是由Facebook,其实是由哪个公司的呀。还有是不是也是也是维斯不呀,对吧?呃,是想要相同的啊,相同的好,那大家知道它是那个从哪来就行,然后这个官这个官网呢,大家可以简单来看一看啊,这里边呃,这儿是不是有一个box啊,对吧?那这就是它的这个官方的文档,你要看的话,就主要看这个位置就行啊,主要看这就行,这里边呢,包括了麒麟的部署安装以及使用啊,然后呢,还有各种注意事项啊,这里边其实都有很详细的,很详细的啊,你看非常详细啊。就是内容比较多啊大家呃,如果后边呃,咱们需要去更深入的去使用这个呃,Preo的话呢,那希望大家呢,可以多来官网看一看啊,呃,其实任任何一个东西啊,咱们大家要学习的话,可能也都是呃得得去看官网,官网是最好的学习资料啊,行吧,那咱们接着往下走啊来。
04:10
下面呢,是这个price的一个架构啊,咱们简单来了解一下啊,大家现在呢,看到这个图就是我们O的一个呃,最完整的一个架构啊,那当然这个架构呢,显得比较简陋是吧?啊,那我们现在来先看一看啊,先看一看什么呢?看一看它这个price当中的几大角色啊,首先先看服务端啊,先看服务端,服务端是不是有两个角色。啊,这是服务端啊,这是服务端,那服务端两角分别是啥呀?Coordinator,还有一个worker啊,那这俩东西啊,就是我们服务端的两个重要的角色,那他俩分别是干什么的啊,那一个是用来。你看这是不是就是一个主从关系是不是啊,一个是用来干啥的呀,你看他跟谁对接了。客户端对吧,客户端那一个是用来接受客户端请求的,对不对,那这个客户端请求你说就是啥。
05:03
其实就是circle对吧,是不是就使用它查询写circleq进行查询啊,进行分析对吧,那就是接收客户端circle呗,那他接到circle之后呢,它会将这个circle解析成具体的计算任务。具体的计算任务啊,其实跟我们have是不是有点类似啊,对吧,那have是不是也是将circle解析成具体的计算任务,当然have的计算任务可以是MR,可以是4SPA克对不对,那那当然呢,咱们这个pre呢,它底层的计算逻辑呢,也也就它使能计算引擎呢,并不是MR,并不是Spark,而是什么呀,而是它自己的一套计算逻辑啊,他自己的一套计算引擎啊,啊,那就是他会将circle转化成或者解析成自己的解析这个计算任务,然后呢,分配到。Worker当中去进行计算啊,也就这个worker呢,实际上就是相当是干活的啊,像是干活的啊啊那这个就是我们这个服务端的两大角色啊,一个是Co or一个是worker,那Co接收客户端请求,然后呢解析circle,然后生成这个计算任务,然后接个任务呢,会下发到五个壳当中,进行并行的计算,也是并行计算啊是这样,这是它一个大致的逻辑啊,这个比较简单,那现在呢,我们来看后边这块是较重要的,跟我们使用是这个关系比较密切的啊好,那后边这个东西啊,你看一看这都是啥。
06:22
就是每一个虚线框圈起来的都是一个catalog对吧,这个catalog呢,在当中是什么概念啊,Catalog呢,在price当中呢,指的就是数据源的意思。数据源啊,因为你press是一个分析引擎,对吧,你分析引擎是不是必须得有数据源,要不你分析啥呀,对不对啊,那每个catalog就是一个,就代表的是一个数据源啊,或者换句话说呢,我们每想对接一个数据源,你就得给他配一个啥呀。Catalog这个catalog是不是肯定咱得咱自己配呀,对吧?哎,咱自己配啊好,那看一看catalog当中,哎,它里边的这个具体的内容是啥?嗯。
07:00
是不是每个catalog当中,它都有一个,都有两部分啊,对吧,先看左边这这半部分啊,这有个什么东西,Connector对你看啊,这是什么?Have connector,卡夫卡connector red connector,那这是不是不同的数据源对接have对接卡夫卡,对接red啊,每对接一个数据源,你都需要给它配一个connector。为什么要配connect啊,你得能够连接呀,对吧,这是不是所谓的连接器对吧?连接器啊,就是跟这个数据源进行连接的,只是一个名字而已啊,这个名名字而已,那只不过呢,我对接不同的数据源,我的这个所谓的连接器是不是配置起来应该是不一样的呀。对不对,咱们举个例子啊,你比如说我对接的是have。那你想一想,你要想分析have当中的数据,你的连接器当中应该配啥?啊,我现在是不是想分析还有的数据啊,对吧,你的连接器应该有啥配啥。其实很简单,你只要能够获取到have的原数据,那你是不是就能分析have的数据了,对不对?Have的原数据当中存储了什么信息啊?
08:06
对,第一个就是我的have当中,我有什么库,有什么表,还有啥呀,还有你的每一张表在HDFS上的路径。是不是都有对不对,那这样一来的话,我是不是拿到原数据之后,我就知道还里边有什么表,我也知道你的数据在HDFS路径了,我只要拿到路径,我是不是就可以读取,读到数据我就能分析了,是不是底层就是这样的一个原理啊,所以说在have的连接器当中呢,我们要配的其实就是have的原数据啊,它的地址,那当然呢,我们获取have原数据的方式呢,咱们大家都知道两种是吧,你看have客户端,我获取原数据也是两种方式,一种方式呢是直连my circle,一种方式呢,是借助那个ma store那个原数据服务,对吧?啊,那两种方式,那这个press采用的是哪种方式呢?它通过have的mato服务来获取have的原数据,那所以说那也就是言外之意就是啥呀,咱们要想使用preal去获取have的原数据啊,想去分析have的那个那个里边的数据,那你就得怎么办,是不是就得启动have的原数据服务啊,Have me store啊对不对,那这个have me这个怎么启动啊,它的命令是啥呀?
09:16
最基本的命令是have杠杠,Service后边加一个me store,这是不是启动了?那当然了,大家应该是之前学have的时候,老师给大家提供了一个脚本是吧,那个have service.sh那个也能提啊。好,那大家先把这个点搞清楚啊,那接下来咱们再往下说,那假如我现在对接的是卡不卡呢?你说我卡不卡的可词里应该配啥。你配啥呀?那很简单,你你要想读卡夫卡的数据,你肯定得有一个什么卡夫卡的消费者吧,对不对,那卡不消费者你得配啥?其实主要就是俩,一个呢,就是卡夫卡集群地址,一个就是你要消费的那个topic呀,是不是就这俩东西,你只要告诉卡卡基金地址,只要告诉他你要消费的topic,那我是不是就能找到对应的数据,我就能读了,能读就能那个分析了嘛,对不对,就是这么个道理啊,所以说呃,不同的数据源啊,你要针对这个数据源的特点呢,去给他配置相应的参数,那当然可能,呃,有一些数据源呢,我可能并不知道要配啥,那怎么办呀,去哪看。
10:18
官网啊,你就打开官网呗,官网就打开这个文档啊,你往里翻走走下边啊,这是不是有connects啊,那这一大堆东西啊。这大堆东西都是我们这个,呃,它所能够对接的数据源非常丰富啊,Pre有一个最大的特点就是支持的数据源极其丰富啊,这这都是它能分析的数据啊,你看这里边有咱们这个have的connector对不对,还有什么卡不卡connector啊,你这里边呢,就是说你对接谁,你就找对应的connect,它里边会告诉你怎么配置啊好,这个咱们就不一个看了啊来,我们接着看这个文档当中这个架构图,那刚才呢,咱们说到了这个connect了啊好,那connect完之后呢,我们这个catalog里边啊,还有一部分后边。
11:00
那好像后边东西是不是都一样了呀?啊,这个指的是什啊,这个指的是pre当中的这个数据的组织结构啊,组织结构啊,你看啊,不管咱们的这个数据来自于哪儿,来自于red也好,来自于卡不卡也好,来自于have也好,那到了pre当中我都是什么形式啊。这个组织都是怎么组织的呀,是不是都是schemer加table的结构对吧?Schemer是啥意思啊,啊,大家这样去理解它就行了啊schema呢,你就把它理解成我们买S当中,或者是have当中那个database。啊,就是相当数据库只播它这不叫数据库,它叫什么叫S干ma啊,那S干ma下边是啥呀?是table table啊,那其实也就相当于不管数字数据来自于哪儿,那到了price当中,我都是什么形式,都是数据库,然后是不是都是数据库和表的形式啊对吧?那既然有数据库有表了,那所以说我们使用price,那就是怎么查写去查呗。对不对啊,也就是它这个数据结构呢,不管来自于哪,到了咱们的price当中都是表的形式,表示形式,好,那这就是咱们price的一个基础的架构图啊,就是这样啊啊,那一会咱们部署的时候呢,我们会部署服务端,也会部署客户端啊,这个呢是分开部署的,分开部署的啊啊,那这就是price技术架构,然后这里边还有一些文字的介绍啊,咱们就不再一点看了啊,不要一点看了啊,我们就直接点过啊,刚刚才这个文字都已经说过了啊,行,那接下来咱们往下看,下边呢,有一个pre的一个优缺点啊,这个咱们也一块看了吧啊。
12:32
好,那price优缺点,Price优点咱们先看一下啊,这儿呢有一个对比图对吧,对图是用谁跟谁比啊,Price跟map比啊,你其实这个所有的计算这种,尤其是后边新兴的这些这个计算引擎和这个谁相比啊,都和ma比啊呃,你像Spark你去的官网看也能说,哎,我比这个myri快100倍对不对,快多少倍啊,那prez呢,我比你快多少多少倍,那T子呢,我比myri快多少多少倍啊,都会跟他比啊,都会跟他比啊,那接下来咱们也来简单看一看吧,啊,那这边呢,我们左边是map啊,左边map啊,那这个map它慢之所以慢是因为什么慢呀。
13:11
啊,这其实给你列出来两个原因,一个是。卖不结束或review结束之后都得干啥,是不是都得落盘呀,对不对,那完事之后呢。Wait between stage stage啊,这个wait wait between,这个stage应该大家都知道吧,对吧,就是我的计算的相当于一个一个一个的阶段,对吧?啊,你像咱们smart大家刚学完,是不是会划分什么stage啊,对吧?啊,那这个在这儿呢?这个所谓的stage呢,相当于map和reduce之间啊,因为map到reduce会干啥呀,是不是叫落盘对不对?所以说它这个相当于是我一轮mmr只能完成一个小的逻辑对不对?那如果说你的逻辑复杂之后呢,你是不是需要写一大堆的MR啊对不对,那每个MR之间我是不是都要呃有这个重新启动这个任务的一个过程啊,你重新启动任务是不是需要耗费时间,那所以说整体来说,那咱们这个MAP6呢,啊,它就比较慢啊,其实刚才也总结了,就是俩原因,为什么第一个原因啊,第一个原因怎么慢呀。
14:11
什么?因为map结束reduce结束都要落盘,那另一个原因是啥呀?啊,其实另一原因就是可以这样理解啊,咱们map和reduce就相当于什么,相当于我们Spark当中的是不是就是俩算子啊,对不对,而且那M2当中是不是只有这样的两个算子啊啊只有这样两个算子,那你如果说你的任务逻辑非常的复杂,那你就得写写写写写怎么样,是不是写多个mmr对不对,写多个mmr,那每个mmr它是不是都是一个独立的一个map的一个application呀,对吧?那每个application都得怎么做,是不是都得提交对不对,都得初始化吧,都得申请资源,那申请资源初始化的这个阶段是不是也是比较耗费时间的呀,对不对,那所以说一个mmr跑完了,哎,我提交下一个mmr,提交下mmr,我需要申请资源,我需要初始化任务等等等等,诶需要等一段时间,那这边再等一段时间,再等一,那你的逻辑越复杂,你提交的mmr越多,你这个初始化所耗费的时间是不是就越多呀?啊就是这样,这是它慢的一个主要原因嘛,啊啊,那这个大家都明白,那接下来看。
15:11
啊,那pre呢,它为什么会会快呢?啊为什么会快呀,来首先第一点。Memory to memory date transfer啥意思啊,是不是就直接内存到内存对不对,你看啊,它其实会像我们那个SPA一样啊,也会进行这个stage的诶划分的啊,也会进行stage划分啊,那我能够在同一台节点里边哎完成的这个计算,我就直接就在一台节点完成了啊,除非我涉及到就是类似于沙盘的那个操作,我是不是才会跨节点传输数据对不对,我才有可能会落盘对不对,那如果说内存充足的情况下,我直接内存到内存啊,不会进行落盘啊,这是呃一个原因,那再一个呢。Of stage啊,Pipeline啊,什么意思啊,就像咱们前面讲的那个那个Spark一样啊,Spark一样,我如果说不需要进行沙uffle啊等等这些东东西啊,我是不是就直接从第一个算子直接干到第几个算子啊呃,第一个或者是第二个第三个,如果这个中间不需要经过沙啊,如果不需要经过沙漠,是不是一次性就计算完了呀?啊,它会不会像咱们这个mmr这样啊,必须得一个map produce,一个map produce的去跑,不是那样的啊,它相当于会进行Switch划分啊,这就是它快的这个两个原因嘛,啊其实这种基于内存计算的这种引擎啊,他们大体的思想都差不太多啊,差不太多就是尽可能的啊,去避免map producece这个缺点就行了啊,尽可能减少落盘对不对?那尽可能的我这个呃,就是尽可能的能一次性计算,就一次性计算啊,尽可能的不像mmr这样分的这么分的这么多啊,是这样的啊好,那这就是普它这个一个优点吧,啊好,那我们看后边。
16:54
后边有有这个文字介绍啊,咱们看一下第一个特点呢,是基于内存运算,减少硬盘AO啊,计算这个都是,呃,都是很简单的东西,咱们就不再多说了啊,然后看下边,那下边这个第二点呢,其实上是比较重要的啊,也是price的一个,呃,很很突出的一个优点啊,这是啥呀,能够连接多个数据源哎,然后而且能够实现什么跨数据源连秒查。
17:18
什么叫跨数决那边啥呀?比如说啊,我我我们这儿呢,有一张表在have当中,我要读里边的数据,然后在这时候呢,我有一张表在MYSO当中,那这两张表呢,我想需要我需要怎么做,我需要join啊,联合连接嘛,Join,那这时候你就可以使用press去实现这个功能啊,我这边对接have,这边对接买circle,然后呢,进来之后这两张表直接join。啊,这个其实还是很强大的一个功能啊,那你想想它为什么能实现这个功能啊。其实道理很简单啊,为啥?因为我不管数据来自于什么地方,到了press当中是不是都是统一的结构,什么结构啊,就是不同的库,不同的表,对吧?你这相当于就是将不同的库的两张表照起来呗。
18:02
对不对啊,所以说这个呃是哎,能够实现的还是比较不错的啊好,那这是它的呃一个优点啊,那再往下下边呢,有一个这个所谓的缺点是吧,那其实这个呢,也嗯也不能说算它的一个缺点吧,这个问题呢,几乎所有的这个计算引擎呢,都有类似的问题啊,都有啊,那接下来咱们看看他这到底说的是啥啊,来我们看一下,那能够处理PB级的海量数据分析啊,但pre呢,并不是把PB级的数据都放在内存当中计算的,这个其实很好理解啊,什么意思啊,Pre它是不是能够支持呃,这个PB这个呃,这个级别的这个数据量的计算呀,对吧,但它肯定不是一次性把这么多的数据团全都加到内存当中,然后再进行计算的,肯定不是这样的,他怎么算的呀,来往后看。它怎么算的呀,而是根据场景啊,什么场景,比如说如果是这种count avg等聚合运算,是边读数据边计算,再清内存啊count,因为这这就是啥。
19:06
是不是一些聚合运算,这些聚合运算其实是我们这个做数据分析,是不是最常用的一些计算呀,对吧,因为咱们所谓的统计统计那肯定都是怎么算,是不是都是聚合统计嘛,统计不都是聚合呀,基本上啊,那所以说呢,这也是咱们最常用的一些场景啊。那这种场景它怎么算呀,它是边读数据边计算,再清内存,再读数据再计算,哎这个怎么理解啊,它大致呢,是这样一个逻辑,还如说我这儿呢,有一张大表,我需要对这张表当中的数据呢,进行聚合运算,那他会怎么做呀?先读一部分,它不会一次性全读进来的,先读一部分,那读一部分之后怎么办?哎,把这部分呢,进行汇总,因为你是聚合嘛,对不对,进行汇总,那聚合完之后你的数据量会变变小吧,对吧,因为聚合,聚合肯定会减小数据量,那OK,也就是你的数据聚合之后呢,我可能只剩下了几条数据,对吧?OK,那我把这个数据呢,我留在内存当中,然后剩下的那个数据,原始数据,明细数据时候,咱们就可以把它从内存当中清掉了呀,对吧,清掉清掉之后呢,我再读一部分。
20:10
然后把这部分读到内存当中进行聚合,聚合完之后是不是可以跟上次计算结果进行一个合并啊,对不对,是不是得到一个新的结果,那这样依次进行啊,那你看在虽然我这个大表很大很大,但我需要这么多的内存吗?我不需要对不对,那所以这种场景呢,并不会耗费太多的内存,而且这个计算速度呢,也很快啊,也很快啊,但是后边啊,后边他说不行了,但是什么呀,但是连表查询。就可能产生大量的临时数据,因此这个速度呢,它会变得很慢啊,它会变得很慢。啊,那这个咱们怎么理解啊。连表查,那刚才咱们说的是有一张大表,对吧,那些连表查,连表查会产生连数据,这是怎么理解呢?很简单啊,你想一想,你连表查是不是两张表转呢?对吧?你首先要做的是不是得先把两张表转到一起,对不对,你才能进行进一步的计算嘛,对不对?比如说我们这儿的场景就是先照后聚合,那比如说这样有一张表,那这样一张表,那这两张表你首先得干啥?是不是得先照到一起,那照到一起之后相当于就是有一个虚表,对吧?那这个是不是会相当于是咱们这所说的这个临时数据啊,你召唤到一起之后呢,我在干啥呀,我再进行聚合,你再聚合,那是不是就跟刚才是一样的道理了呀,你已经有一个中间表了,相当于啊,那这个中间表呢,我先读一部分啊,进行汇总,再读一部分,再汇总,再读一部分,再部,那后边就是一样的了,它这个之所以速度变慢,是谁慢了呀?是join这个位置慢了吧,对不对?嗯,那其实不光是pre,你几乎所有的计算引擎,你只要涉及到join的话,是不是这个速度都相对会这个受影响啊,对吧,你比说have啊,比如说Spark对不对,那都是一样的道理啊,一样的道理,那这块呢,倒也不能说算它的一个缺点啊,但是呢。
21:58
这个特点,它它它它是不是有一个这样的特点啊,就是连表查我的这个速度是不是要比单表查要要慢呀,对吧,那所以说咱们知道了这个特点之后,那你说咱们这儿可以怎么做呀。
22:10
咱可以怎么做,咱是不是应该去迎合它这个特点啊,那假如说我们现在数仓当中,我确实有一部分的数据,我需要用priceto去做这个集析查询,咱们集齐查询追求的时候就是快,对不对,那你得怎么做呀?假如说我有多张表需要让他去去查询啊,那你该怎么办?假如说在have当中,我提前把它招唤到一起,对不对?那你查的时候呢,我就不让他去照了,我我让他直接查单表,那这个速度是不是就会极大的提升啊,是这样的啊,因为急急查询,急查询要求的就是快嘛,啊,咱们迎合它这个特点就行了啊啊,这就是咱们price的所谓的优缺点啊好,那接下来咱们再往下看啊,下边还有一个小点,这个小点呢,叫做呃,Preal和impala的性能比较啊这俩东西,呃,可能大家对impala并不熟啊,Inela先说一下吧,Inela是干什么的啊,它是CDH平台。
23:04
啊CDH平台,它那里边的一个及其查询引擎啊,它其实inella跟price它俩的架构非常非常像啊,架构非常像啊非常像,那所以说呢,我们通翅会将这俩东西呢去做一个比较啊,然后这边看一看啊,这个第有个帖子里边呢,对它做了各种参数的比较,咱们就不点开看了啊,我们看一下这个结论。啊,结论是什么呢?结论是引拍了,它的性能稍领先于sal,但其实差不了多少啊,这俩东西因为本质上架构很像啊,但是P有一点是比较突出的,就是pre呢,在数据源知上非常丰富啊,在数据源知上非非常丰富,那除了包括have,那还有啥?还有什么图数据库啊,关型数据库,什么red mango DB等等这些非关系数据库它也支持。啊,这是啊,比较强大的一点,但是那个in拍了呢,相对来说对数据源的支持就少一些啊,它in拍了呢,基本上就是只支持我们从have当中读取数据啊,你像什么非关系型啊呃,还什么图数据库啊等等,它都不支持,是这样的啊,现在呢,我们现在很多公司里边,咱们那个呃,我们要就是咱们大数据这边啊,要分析的数据呢,可能不仅仅存在于咱们的那个呃关性数据库里啊,不仅仅存在于have当中,我们还可能需要去分析一些非关型数据库当中的数据,比如说什么mango DB啊等等等,诶都有,都有类似的场景,都有类似场景,那所以说如果咱们公司里边这个数据源的种类比较复杂啊,那这时候呢,大家就可以考虑到我们使用pero去做了啊,因为它对数据源的知识比较丰富嘛,对吧,是这样的啊好,那这块呢,这个就说完了,咱们就记住一点就行了啊啊就是presal数据源知识非常丰富啊好那至于到底支持什么呢?你这个是不是就看官网就行。
24:53
谁呀,这边有的是不是就是它所支持的数据源呀,啊,有什么connector,我就能对接什么数据源啊,是这样的啊啊,那这就是P的一个基础的这个简介吧,啊,那我把视频录一下。
我来说两句