00:00
OK,那接下来咱们去看一下这个,呃,所谓的这个构建算法啊,呃,其实所谓构建算法其实就是这个MR到底是怎么回事,其实说白了就是它啊,那这个构建算法里边呢,咱这分了两小节,一个是这个逐层构建算法,还有一个是什么呢?还有一个是下边啊下边在哪我找一下。呃,还有一个叫做呃快速构建算法,那这两种算法,首先呃他们俩的这个最主要的区别是什么呢?诶第一个区别就是我们逐层高级算法呀,诶它是我们这个经典的mmr,就是咱们经典的MR就是而且是一串MR,一串MR就是咱们逐层高级算法。那快速关键算法呢,这边它有一个有一个那个关键字啊叫什么叫in memory,也就是in memory是不是就是在内存当中计算啊,对吧,那这其其实这个呢,其实也是MR也是MR,只不过呢,他对我们这个传统的MR呢,就是说诶这个做了一个,呃,做了一个改动,做了一个改进,做了一个改进啊然后他干什么呢?充分利用内存。充分利用,利用哪儿的内存呢?利用map端的内存,利用map端的内存啊,利用map的内存,然后也就是我所有的计算任务呢,诶,基本上都在这个map完成完了之后呢,再给他到reduce,再进行最终的汇总,呃,也就是说快速管理算法这边呢,只需要一层来玩。
01:17
只需要一层,就是只需要一个mmr,只要一个MR啊,那我们前面那些东西需要一串mmr,这是他俩一个最本质上的一个区别,但是呢,呃,虽然有这个区别,但是其实他们俩这个,呃,说白了这个算法啊,其实那也就是那个计算的逻辑啊,其实是一样的。他们俩的逻辑是一样的,而且这个逻辑呢,其实我们自己也能想到,我们也自己也能想到啊,那他的逻辑是什么样的呢?我们来看一下,看一下我之前给大家看的那个P那个PPT啊,来打开这个东西。大家看看这个地方啊,看这。大家还记得我画这个图吗?当咱们讲这个图的时候啊,咱们简单的给大家那个提过一嘴是吧,就是说我要想得到这个两种维度的,我怎么去得,是不是以这个三种维度的为基础,对不对,诶以它为基础,然后呢,你你不需要哪个维度,那我就对哪个维度进行降维,也就进行聚合,是不是啊,哎,咱是这么去做的,那同理,我要想得到一个维度怎么来,是不是以两个维度的为基础,给它进行进一步的这个降维或者聚合呀?
02:16
诶是这样的,其实那这个麒麟呢,它底层计算的时候,它它就是这么算的,它也是这么算的,就是先怎么样,先从原始数据当中,把所有维度的这种这个数据先给算出来,也就先得到最高维的这个qbo,然后呢再以最高维的qbod为基础,然后呢,继续往下进行降维,一层一层的降,然后降到两维,降到一维,那最后就完事了。这就是麒麟,就是甭管是什么逐层构建算法,还是刚才那个快速构建算法,他俩的思想都是这个思想,哎,只不过就是它那个实施的是不一样的,好,那我们现在去看一看这个,呃,两种算法,先看这个逐层。呃,构构建算法,先看逐层啊,来来看这个地方。
03:00
这个地方啊,来我们看看,那这边就是这个所谓的这个逐层构建算法,逐层构建算法,那这边画出来的是一个什么呢?画出来的就是一个完整的Q吧。这是一个Q吧cub,这是一个完整的Q吧,那这个完整的吧呢,它当中有什么东西,我们来看一看啊来我们来看一下。首先。这地方。这什么,这是这个,呃,第一层,第一层也是什么,这是那个最高维的那个q boy的。这里边的每一个小圈啊,每一个小圈都是一个q boy的,这是最高维的那个q boy的,那这边其实也对着呢,它最高是几维,最高是四维对吧,那也是我们去进行逐层构建的时候,我先算谁,我先从原始数据当中先算出来最高位的。对不对,也就算算出来这层,那这层完之后呢,我逐层往上算对不对,以它为基础算三维的,那三维里边有几个呢?是不是应该是C43 C3应该是四个吧,对不对,1234对不对,那上面呢,C42这是六个,然后C41这是四个,然后然后呢,它就这么一层一层的逐层往上算,逐层往上算,然后这个算的时候大家要注意了啊,就是说我们你看是不是每一层我都需要有一个M。
04:12
对不对,你看从原始数据到这一个mmr,四维到三维,一个三维到二维,一个是每一层都是一个mmr啊对吧,那这个其实是一个经典的mmr,一层一层的去算,一层去算,那这种算法它的特点是什么呢?特点很明显,特点就是稳定,是不是就是咱们因为这个mmr这个这个架构呢,已经非常的这个稳定了,已经非常稳定了啊但是它的缺点是什么呢?缺点就是诶慢呗,对不对,那慢体现在什么地方呢?111看,首先一大串的MR,那这个首先呃,我这个map结束要落盘,Reduce结束要落盘,对不对,那也就是它这个磁盘IO和网络IO时间会比较长,那其次还有什么呢?你你想一想啊,咱们这个map reduce。你是不是这个初始化一个任务也是需要一定的时间的呀,对不对,你初始化一个MR也要一定的时间的,所以说你MR越多,那我这个初始化所耗费的时间也会越多,那所以说这个呢,综合诶呃来说呢,它就特点就是慢,但是它比较稳定,比较稳定啊,这是咱们第一种这个所谓的逐层构建算法,然后在逐层构建算法里边呢,这边咱们还有一个这个零维的。
05:16
就是零维的这个东西啊,可能大家那个呃,想象不到它有什么意义,实际上呢,这个零维呢,确实也没有什么意义,这个所谓的零维是什么?所谓零维,所谓零维其实就是对这个原始数据的一个一个总的一个聚合吧,就是没有对任何字段进行分组,没有格入外任何字段,直接就是一个聚合函数,这就是所谓的零为。所谓的零围啊,那这个零围呢,我们就是说你可以把它算在这个QQB当中,诶你如果算在这里边呢,那咱们这个B就一共有多少个呀,是不是有一共有二的N次方个QY呀,对不对,如果你不考虑这个零为的话,那就是多少,那就二的N,二的二的N次方减一。是这样的,就是这边呢,跟大家说明一下这个情况,这个零维你考虑,那你就给他算上,其实它是一个什么东西,实际上就是一个最终完整的一个聚合值,没有任何的这个维度,那其实他也没有什么太多的意义,所以我们通常呢,也就不考虑它了,不考虑它那我们q boy的个数呢,就N2的N次方减一。
06:10
是这样的啊好,那也就是咱们逐层构计算法,就是一层以MR逐层的去算,呃逐层计算,那它这个MR里边的计算逻辑怎么样的呢?我们往下看啊给来看一下,我这呢画了一个PPT,咱看一看这个PPT就就明白了啊来。打开这个MR,打开这个PT啊,然后大家回忆一下我刚才说的那句话啊,我们那个什么东西呢?我们那个是不是在那个刚才讲一下那个,呃,麒麟的那个维度资源表啊,对不对,那维度资源表我什么时候用,我计算的时候其实用的就是维度资源表里边那些数字了,包括什么,包括我那个在麒麟当中,我存在那HP当中,我去存储存的也是那个,诶数字是这样,但计算用的也是数字。那我们来看一下这个计算的时候到底怎么算的啊,大家来看一下咱们这个MR1,这个二一呢,来来,那二一首先看一下它的输入啊,它卖不出的输入是什么?是KV,那K是什么?K其实就跟我们h base当跟跟跟我们h base当那个ROK其实就一样了。
07:08
跟那个rie其实就一样了啊,那你看一看我们这个rie怎么样的啊,我这个黄色部分呢,代表的是它的那个,呃,Q Bo的ID,那红色部分呢,代表它的维度值,那这个后边呢,就是它的value,就是它的value啊那我们现在要干什么,现在是不是要降维,它是不是要降维,那降维的时候怎么降?是不是以它为基主进行降维啊,怎么降怎么降。来,那我所谓的降维呢,是不是,哎,咱们可以把第一个维度去掉,那就得到了它,第二维度去掉得到它,第三个维度去掉它,得到它。是不是就完事了呀,就是这样了,那只需要这么去降就行,那这个value用不用改呢?值用不用变呢?值它是不用变的,值为什么不用变呢?你想一想我这条数据它属不属于这种,哎,这种维度组合里边的一元属于吧,那属于,那也就说这个值呢,它就不用变,它属于就不用变,就不用变了,那我其他这个降完维之后,跟他一样的东西,就是跟跟谁跟那个K一样的,是不是会跑到同一个reduce里边来呀,那我把这个value呢,我再进行聚合就可以了。
08:10
也Y6是不用变的啊,只需要直接降维就行,降维就行好,那也就是咱们这样一来的话,我就把三维的是不是降到两维了呀,对不对,那我两维的之后干什么?因为咱们是逐层构建一层一个MR对不对,那也就是reduce这边呢,我需要输出,那需要落盘,落完盘之后,那结果是不是还会被下一个MR读取到啊,对吧,那读进来的就是两维的数据了,两维的那两维之后要干什么,要降成一维,要降一维。那最终我们就得到了一维的数据了,那得到一维数据之后呢,那你想一想,我们现在是不是,诶是不是咱们现在已经有这个三维的有了,那两维的也有了,那一维的咱们也有了,对不对,那都有了之后,那剩下就容易了,我们把这个所有维度的组合这个结果呢,最终给它存到h base当中就可以了。最终给它存到h base当中就行了,那这样一来,那数据呢,就被跑到h base里边去了,那我们后续咱们再去这个查询的时候呢,去HP里查就行了,这就咱们所谓的逐层构建算法,那思想就是高维到低维,这一层一层去算,然后一层emr。
09:15
啊,这是逐层,那我们接下来看这个所谓的快速构建算法,那快速构建算法呀,跟逐层构建算法其实原理是一样的,原理一样啊,咱们打开。来看一下这个map,看这个map啊来,那咱这个map首先我们的输入是什么呢?输入是这个,也是以这个最高维为例啊,那咱们得到是最高维,得到是最高维,那OK,那最高维之后要干什么,要降维,那降维的时候跟前面的思想是一样的,跟前面的思想是一样的啊。就是说只要降为Y6是不用变的,那由它可以降到这样,那由它呢,可以降到这个。对不对,那这时候,呃,如果说我们要是按照刚才那个逐层高清算法来说呢,那这一部分要干什么,这这会去哪,这是不会进进到reduce。
10:01
对不对,那进到reduce,那你会干什么,什么样的会接接到同一个reduce,是不是你这个K相同呢,比如说他俩。这是不是K相同的,K相同的基本上一个reduce,然后我得干什么,我得聚合呀,因为2K相同我得聚合,那但是我现在。逐层这个快速惯性算法呢,我这边我不会进入到re,我仍然是在map当中,它充分利用map内存。他没有进入到reduce,那没有进入reduce,我这怎么办,我是不是就得在map这边进行这个聚合呀,就得在内存当中聚合了,OK,这时候呢,我们开始聚合,他俩进行聚合。好,那得到了一个这个最终的一个聚合值,那我从相同的K呢,我都会进行聚合的啊,我这只是画了一个延示一下,好,那聚合完之后,我就得到了两维的了,之后呢,诶是不是还得在以两维为基础进行降维得到三得到一维的呀,对不对,那同理一维里边相同的K也会在这儿进行聚合,也会进行聚合,那这样一来大家看一看啊,我不是在这一个map当中,我现在就既有三维的,也有两维的,也有一维的量,那咱们都有了,那都有之后,那你说我是不是就已经得到了这个最终的cube了呢?
11:11
对,因为我现在看似是我所有的维度组合我都有了,都有之后我是不是就可以直接把数据给他写到h base里边去了呢?其实还不行,为什么呢?我们这边还需要再来一个reduce。那诶有同学可能会疑问了,你这还有什么reduce啊,我这边是不是已经把这个把什么东西,我把我这个里边就是该聚合的东西,我已经在map端已经聚合完了,对不对,都聚合完了,为什么还要进行reduce呢?对不对,我map直接把这个结果,这个结果这个结果都输出不就完事了吗?为什么还要聚合这个可以想一想为什么。因为我们这边不可能只有一个map吧。对不对,因为读数去的时候,我可能还会有其他的map。对吧,那咱们这聚合,我只是把一个map当中相同的K聚合到一起了,对不对?那多个map之间是不是也可能会有相同的K啊,对吧?那它们之间怎么聚合,它们之间就只能是放到一个reduce里边去聚合了,那也就是咱们最后一层reduce,它的意义是干什么呢?是把多个map中的这个相同的K聚合到一起,那最终reduce这边它的输出才是最终的结果。
12:15
这才是最终结果啊,那这个结果输出完之后,也就是说咱们所有维度组合数据全部都有了,存到HP当中就完事了。这就是咱这个所谓的诶快速构建算法,那快速构建算法它的特点是什么呢?特点就是我是不是基于内存计算啊,诶那要求我这个资源是不是得充足,那其次呢,这种算法呢,它显然是没有咱们那个MR是稳定的,没有MR稳定是这样的啊,那这就是快速个性算法它的特点,那我们再去使用的时候,我们到底应该选用哪种构建算法呢?诶这边其实麒麟做的还是比较不错的啊它诶方便我们去使用。怎么方便呢?就是说我们是不需要去配置,我到底采用快速个算法还是逐层观算法,不需要配置,那我们麒麟再去计算的时候呢,它是智能的,自动的,根据咱们数据的计算量,因为他知道咱们有多少数据,对不对,然后呢,再结合集群当中现有的资源,它自己去权衡我到底应该采用哪种构建算法,如果适合快速,那我就用快速,适合那个咱们那个逐层,那我就用逐层。
13:19
实际上是自动去选择的,所以这边呢还是不错的,那我们要做的是什么,我们就是说我们了解这两种算法就可以了,咱们知道有这样的两种共应算法就可以了,那我们也不需要去配置了,好,那这边咱们就说完了啊,然后把视频录一下。
我来说两句