00:00
我们看这个cube的构建算法,Cube的构建算法呢,在秦岭里边拥有两种啊,一种叫做逐层构建算法by layer啊layer是不是逐层啊,那还有一种呢,叫做往下拉。叫做快速构建算法,那小括号呢,是in memory in memory啊啊in memory,那in memory就是相应该是啥呀,是不是基于内存呀,对吧,有这样的两种构建算法啊,那这两种做的算法呢,我们来分别来看一下啊,我们先看上面那个。啊,这是它逐层构建算法的这个示意图。啊,这个所谓的逐层,这个层指的是什么呀。层指的就是维啊,我一维有四维的就是一层,三维是另一层,在二维是不是另一层呀,对吧,那他算的时候你看他怎么算呢?啊,这是不是原始数据,原数据就是从还有当中那边直接对接过来的明细数据,对吧?星型啊,那个模型或者是群号模型啊,这是最明细的数据,然后呢,我是不是得先算最高维,之前咱们分析过,要算的话得先算最高最高维嘛,OK,最高位算出来了,那完之后呢算。
01:07
降维降维降是不是这是这样的一个过程啊,对吧,然后你注意观察他每次降维那都是跑了一个啥。都是一个M6是吧,对不对,这就是所谓的逐层构计算法,就是每降一维就跑一个MR,每降一维就跑一个MR。啊,那所以说这种算法它的特点很显然就是啥呀。第一个特点就是慢,肯定会比较慢,对吧,那这个是不是我有几维我就得跑几个跑跑几个M码啊,对吧,那我现在是四维,四维跑了几个呀,12345个啊,那如果说我要是十维呢,我就得跑十个11个MR对吧?那11个MR它是怎么提交的是不是。依次提交啊,因为是不是每个MR之间是有前后的依赖关系的呀,你不能并行的跑啊,你不能避了,所以说这个速度肯定会比较慢,但是呢,它肯定会比较稳定啊,算法肯定比较稳定,为啥呀。
02:02
你想一想啊,那我每一层实际上我所执行的逻辑都是相同的,只不过这是从四维降到三维,这个三维降到二维,其实每一层的逻辑都是相同的,对不对啊,而且每一层我这个MR所负责的工作呢,也没有那么多啊,我不会占用太多的内存资源,这个跑起来呢,相对稳定啊,无需太多的资源。啊,这是逐层构建算法啊,它的特点就是慢,但是稳定,那下边这一种呢,快速构建,那快速构建in memory,它显然就是比较快,然后呢,它的特点就是基于内存啊,基于内存。啊,那那大家看这个示意图啊,你会发现啊,实际上那这个逐层这个快速段算法呀,你会发现啊,这个是什么?呃,这边应该是有一个原始的数据啊,是咱们对原始数据对不对,对原始数据之后呢,然后直接怎么办?是不是通过咱们买MR,是不是也是跑MR啊,那通过首先是不是map去读取咱们原始数据,一个map一部分对吧,那之后呢,是不是下边经过。
03:05
Cube。不的,同时在cube在在构建对吧,在构建,那构建完之后呢,这是不是有一个最终的一个more salt,这相当就是啥呀,是沙啊,就是沙Le,那也就相当于这个过程就是一个什么,就是一轮MR,或是不是map,这会是不是reduce map reduce最终得到最终的结果,也就是你会发现啊,那这个in memory快速构建算法呢,只跑了一轮MR。对不对啊,那一轮MR我是不是需要去进行降维啊,对吧,你看啊。就是甭管它是逐层的还是快速构建算法,它这个核心的计算思想是其上是一样的,我到底怎么做,是不是都得先算最高维,再依次降维,都是这么做的,核心思想都一样,只不过呢,咱们逐层我是每降一维,我就用一个mmr,那这个in memory,这个快速构建呢,我降维的时候怎么降的呀?我相当于是在哪儿啊,在map端。
04:02
在map端进行数据的降维。啊在map端在卖,当然你要价位得怎么办呀,是不是得基于内存呀,对吧,那所以说呢,这个快速构建算法呢,它所占用的内存是比较多的,哪一端占用内存是比较多的呢?是map端。啊,Map端占用内存是比较多的啊,是这样的,也是果大部分的计算工作呢,是在map端完成的啊,那这种算法的特点呢,就是快啊,它不用提交那么多的MR对不对啊,那它的特缺点就是啥呀,就是我需要大量的内存资源,我相对呢没有那么稳定啊,这两种对比啊,那咱们刚刚简单对比了一下两种这个算法的一个特点啊,那这时候呢,我们通过一个PPT啊,去了解一下这两种算法底层的逻辑是怎么样的啊。先看第一种逐层构进算法啊,这就一层1MR那种啊,好,那大家看一下,那这个我画了两个mmr啊,这不是两层对吧,两层,那我们先看第一个mmr,它得到的数据是啥啊,那他得到的数据呢是。
05:03
这是这是什么呀?这是三维的吧,能看懂吧,黄色的是Q的ID,那是维度值啊,这是三维的,那三维我需要怎么做。无效怎么做,我是不是要降到两维啊,对吧?那这个怎么降维,这个所谓的降维在MR当中具体应该怎么实现呢?所谓的降维。怎么降啊?其实所谓的降维就是干啥?所以降干啥,比如说我三维是不是要得到两维啊,对不对,那你三维得到两维,那你两维的有几种情况。三种情况对吧,你可以什么,可以是110也可以啥。101还可以什么011,是不是这三种情况对不对,那你所谓的降维就是干什么呀。所以结尾就是啥。所以比如说我要从三维,我要得到这个二维的数据,对吧,那你就是把把把把什么样的数据聚合到,是不是得肯定得聚合对不对,把什么样的聚合到一起,是不是把前两个维度相同的数据是不是聚合到一起,对不对,我是不是不管你第三个维度是啥,你只要前两个维度相同,我是不是就要聚合到一起,这是不是就是进行所谓的降维,没错吧,对不对啊,那我问一下大家啊,我们这个map,我怎么能够将前两个维度相同的数据聚合到一起呢?
06:28
怎么能聚合到一起?你要想让它聚合到一起,是不是首先得保证它能够进入到同一个reduce才行?没错吧,那他怎么样能进到同一个reduce呢?K相同的数据是不是会进到一个reduce,对不对,那所以说我们要想将这个前两个维度相同的数据聚合到一起,我们首先得保证那前两个维度相同的数据啊,我得把它的K先给它变成一样的,对不对,那谁是K啊?这是不是就是K,这这是不是就是Y6,因为M2当中是不是就是K和Y6啊,对吧,这就是Y,这就是K,这是Y6,那你说这个怎么把它这个K相,就是前两个维度相同的数据,怎么样能够把它的K变成一样的呀。
07:08
怎么变成一样,是不是把第三个维度给它去掉就行了。对不对,第三个维度去掉,是不是就剩下前两个维度了,那前两个维度相同的数据是不是就跑到同样的reduce里边去了呀,是不是就这样一个逻辑啊,那怎么去掉啊,很简单啊,那这边你就相当于去一个维度怎么去啊,是不是留下一。一这个是几了?第三维度去掉是不是就是零了呀,第三维度没有了嘛,对吧,那后边是啥呀,是不是就是零零。没错吧,啊,那这样一来,我这个数据呢,诶就能够进入到相同的这个诶里边了啊进入下相同里边了,当然这个呢,我是哎011啊,那这个是101,这个是110啊那这样一来的话,你把每个三维的数据我都给它分别去掉一个,呃,分别去掉第一个第二个第三个维度,那他们是不是相同的这个数据就跑到同样的一个组里边去了呀,啊实际上就这样的一个逻辑啊,就是你降维的时候呢,就是把每一条数据都分别去给它去掉一个维度,去掉第一个,去掉第二个,去掉第三个,然后每条数据我是不是都这样去做呀,每条都样去做,那相同的这个这个这个K的数据是不是跑到同样的reduce里边去了呀,对不对,那你跑到同样的reduce,你就进行聚合就可以了,那这个诶就是相当于就是咱们这个所谓的降维啊,所谓的降维就是去掉一个维度,去掉一个维度之后,我K相同的,那就是放在一块给它聚合就行了,那你就得到二维的数据了。
08:36
这就是所谓的降维啊,这个Y6呢是不用变的啊,Y6是不用变的啊,Y6呢,你聚合就可以了啊,这就是所谓的降维啊,啊,那这个相当于是从三维是不是降到两维了,那三维降到两维之后,我还得怎么做,我还从二维是不是降到一维啊对吧?那我因为逐层构建算法,一层一个mmr,那这时候两维的数据需要怎么做,需要落盘嘛,啊落盘之后下一个MR是不是再从HD上读取这个文件再去进行计算呀,对吧?那相当于下一个MR呢,我得到的就是两维的数据了,那两维的数据得到之后,我是不是也要降维,那降维其实也是一样的做法,是不是还是在继续去掉维度就行了呀,那两维再去维度是不是两种情况,去掉这个或者去掉这个。
09:18
OK,那得到,哎他们那当然呢,同样一维一维数据相同的,是不是也要放在一组里边进行聚合呀,对吧?那所以说我经过一层一层的计算呢,我会发现啊,三维的得到的,两维的得到的,一维的也得到了,那得到之后呢,那这些结果最终啊会写到哪儿啊。会写到HDSS的一个文件里边啊,其实它最终要写到哪,最终是不是要写在h base啊,对不对,但是呢,我们这块它并不是通过h base api1条一条的写到h base的表里边了,因为那个效率太慢了,相对于其实来说太慢了啊,它是怎么把数据最终导到h base当中去的呢?啊,怎么去导导进去的呀。
10:02
哎,它使用了我们h base当中啊,给我们提供的一个导数据的方式啊,那个导数据的方式叫什么?叫做booklo book book什么意思,就是批量的意思,对吧,也是批量导入,那这个批量导入的核心原理是什么?给大家解释一下啊,它的核心原理就是这样的啊,那你是不是这边进行计算之后,会把结果存在H发一个文件呀,对吧,那这个文件就是普通的文件。啊,那h file就是那个h base1张表下面的文件是什么格式啊,是不是h file对吧?那这边它是相当于直接怎么做啊,直接将你这个文件转成了HL的格式。然后呢,把这个文件放到h base的表的路径下,那这样一来我们h base是不是就能够识别这张表了呀,它是这样去做的,这个效率呢,要比你通过h base api1条一条的往里边写要快得多啊,所以说这个就是我们HS提供的一种批量导入数据的方式,那麒麟就用了这个方式。
11:00
那这就是我们逐层构建算法啊,啊,这个简单了解一下,那接下来呢,我们再看快速构建算法啊,这也有一个PPT,那这个快速构建算法怎么做的呀,看一下。啊,前面说了快速构建算法,它其实计算的思想跟我们逐层也是一样的,是不是也得降维啊,先算最高维意思降维对吧?啊,只不过呢,它实现是不同的,我所有的降维都在map端完成,那这个就是我画的一个大map啊好,那这个map呢,它读到的也是最高维的数据,三维的数据是不是得到了,那你看得到之后它怎么进行降维的啊,看一下。三维是不是需要这样去降啊,三维是不是降到两维啊,是不是各自去掉一个一个的维度就行了呀,对不对,然后你你要注意观察,因为我们现在是不是都在脉步端,正常来说,你要是逐层构建算法,这些数据是不是会写到reduce里边啊啊写reduce相同的K会聚合到一起。对,不但是咱们现在没有往出丢起,还在Mac端,那这俩数据你看它俩是不是K相同,K相同我应该怎么做呀。我是不是要聚合到一起啊,但是他这边怎么聚合呀,没有reduce了,怎么聚合呀,在内存当中聚合啊好,那它俩相同相同的话呢,我聚合。
12:10
哎,是不是聚合到一起了呀,那所有相同的K呢,都得在这儿聚合,聚合完毕之后呢,那我们再进行进一步的降维,从二维的再得到一维,当然这个太多了,我没写啊,没写看这个意思就行啊,那也就是在这一个map当中呢,我就完成了数据从最高维到最低维的这个所有的计算啊,那这里边儿是不是已经有了咱们所有的结果了呀,而且该聚合的是不是已经聚合了。啊,那最终呢,我们是不是它所输出的结果应该包含什么,这个map所出的结果应该包含啥?包含三维的,包含两维的,包含一维的是不是都有啊,哎,都有啊,那都有,那都有的话,那诶可以思考一个问题啊,你说我这个map结束之后,我说本来是不是就已经得到了最终结果了,因为该聚合的是不是已经聚合了,有三维有二维有一位是不是已经得到最终结果了呀,对不对,但是你看啊。
13:00
咱后边还有reduce。还reduce,诶为什么还要reduce呢?咱现在是不是该聚合的已经在map当中已经聚合了呀,那为什么还要reduce呢?为啥呀?这很简单呀,因为你聚合是不是前面聚合只能在同一个map里边聚合吧,那我map是不是可能有多个,那多个map之间相同的K,是不是必须得通过reduce进行进一步的聚合呀,因为你不同的map是不是可能在不同的节点,对不对啊,那所以说你得通过reduce做一个最终的聚合,把不同map之间的数据给它聚合到一起,那这样一来就能得到我们最终的结果了。啊,这就是咱们这个所谓的逐层啊,这个快速构进算法,快速高进算法,也就是所有的计算逻辑呢,都是在map步端完成的啊,啊这就是跟逐层高进算法的一个区别啊,但是其实核心思想是相同的啊,核心思想相同的行,那这就是这两种算法啊,咱们大致了解一下就行了,知道他们的特点就可以了,然后呢,这两种算法我们选的时候到底怎么选呢?
14:01
咱们喜欢用哪个呀。啊,其实用哪个这个不太好选啊,你选哪种算法,那你必须得了解啥,必须得了解你这个计算量是多少,你得了解咱们基金当中目前的空余资源有多少,是不是得根据这两者去判断,咱们用哪种算法是比较合适的呀,对吧?啊,那当然这个不是那么好判断的啊,不是那么好判断的,那所以说麒麟在这边呢,他做的还是比较好的啊,就是他给我们提供了第三种策略,你这构建算法呢,其实配置的时候有仨参数,一个呢是逐层,一个是快速,还有一个呢是auto是自动,是自动,因为它会自动判断。啊,它会自动的去获取集群当中空余的资源,以及你的计算量,你的数据量,然后他帮你选择一个最合适的这个算法去帮你计算啊,那所以说它默认值呢,也是al,所以说这个呢,我们其实不用自己去选,让他自己去判断就行了,他会选择一个最合适的算法了,啊是这样的啊,这就是咱们这两种图件的算法啊好,那我把这个视频录一下啊。
我来说两句