00:00
好了,同学们啊,那咱们接下来再来看一下咱们这个5.3.2这章节,就是咱们的这个全局字典这么一个构建的一个性能调优,首先我们一起来看一下啊,什么是咱们的全局字典。好吧,有很多同学不理解这么一个概念,我们一起来看一看啊,在咱们的这个o lap啊,数据的一个分析领域中,我根据我的一个去重结果。咱们这个要求啊,会分为什么呀,会分为近似驱虫和咱们这个精确驱虫啊,就比如咱们刚才讲的那个count distinct,而咱们这个distinct就是一个精确的一个去重要求,它是咱们,它是咱们的一个非常常见的一个o lap分析要求。那对于咱们的一个精确驱虫,我最常用的一个处理方法,其实就是用一个bit map啊,用一个字节map来驱虫。那对于咱们这个整形数字啊,我就可以将这些整形数据直接保存到咱们这个比特map中。
01:00
那除了这个整形之外呢,我还有其他类型,就比如说咱们的死菌啊字符串,那为了实现我这个字符串的精确驱虫,我应该怎么办呢?首先啊,咱们得对咱们这些数据它建立一个字典,进行一个统一映射,然后呢,将咱们映射过后的这么一个数字是吧,再使用这个bit map来进行一个统计。啊,那所以说咱们这个字典它就叫全局字典,那而大家都知道啊,咱们这个K点是吧,使用咱们这个预计算技术,就是我使用每次这个Q5构建来咱们加速咱们这个大数据分析,而在我的Q补的一个增量构建过程中。这个增量构建我讲过了吧,什么叫增量构建,就是咱们这个Q补的一个实时表啊,是分区表,我每天都有数据,那咱们的这个Q5是吧,每天按照这个DT分区来构建,那咱们就是一个增量构建。那在咱们的这个每天的增量构建过程中啊,为了避免由于咱们对不同时间段分别构造的字典而导致最终去重结果出现错误,我一个cub中的所有sga次将使用同一个字典,就如果你每天是吧都来一个字典,那我这个字典肯定肯定不行啊,因为咱们将来要要要要这个精确驱虫,那你每天都有个字典是吧,他这个映射不一致,那我就没办法给他驱虫了。
02:23
所以说啊,咱们要把每天的数据都给它来上一个字典,就我这每天的数据,我我我将来所有的这个数据,哎,我都用一个字典,那咱们这个字典是吧,就叫一个全局字典,就是一个Q中它所有的S格ment词,我这每一次S格词是吧,就是每一次的构建,构建结果,就是我每一次的构建结果,它所有的构建联结果加起来呢,我都用一个字典,那这个字典咱们就称之为全局子典。那咱们这个接下来看一下啊,咱们这个K点里边这个全局字典,它的一个使用原理,我每个构建任务都将生成一个新的全局字典。啊,就是我每一次构建,我都会对我整个数据,我都给它生成一个新的全局字典是吧,那我每一个新的构建任务的字典都会根据咱们那个版本号保存,就是我每次都用最新的,那我这个旧的这么一个字典会逐渐删除。
03:15
啊。那我这每一个权利字典,它都包含一个语言数据文件和多个字典文件,而我每个字典文件称为什么呀?称为一个bucket,就是我这一个全字典,它包含多个marketet,而还还有什么呀,还有一个语言数据文件啊,那我这每一个market又被划分为两个映射啊,Object这个映射都是候通过map来保存的是吧,Map的K是object,而咱们这个value是一个浪是一个把咱们这个呃,Object类型的数这个这个文文文件或者数据是吧?给它对应成一个浪类型的数字啊,就是我这个,就是我这个全局字典,并且呃,将咱们这两个映射组再组合成一个完整的映射。那就最终形成了我这么一个选离子典啊,注意啊,这个东西的原理比较复杂,大家简单了解一下就可以了,好吧,也就是说大概就是图上这么一个样子,这就是咱么一个选择点啊,如果说你感觉咱们讲的不够深入是吧,你可以去官网看一眼啊,咱们这个官网是吧?在这儿我给了两个链接啊,第一个链接就是一个K的一个官网链接啊,只不过这个链接它的这个介绍是这个英文的啊,大家需要翻译一下好吧,那如果说你不想看英文的,你可以看下边这个链接啊,咱们下这个链接是放的一个K点的一个官方工程师啊,叫做这个王工是吧,他写了这么一篇介绍啊,他介绍了咱们这个K点4.0,它的一个精确驱虫的这么一个全局字典的一个原理啊,大家可以简单了解一下好吧,那咱们这一块就不讲了啊,不讲那么深入了啊,我们简单了解一下什么是全局字典也就够了,那我们明白这个全局字典以后呢,那么接下来讲一讲咱们这个全局字典它的这么一个调优参数啊,就是我们可以怎么调优这么一个全局字典啊。
04:56
如果说啊,你的cub定义了精确驱重啊,也就是说咱们这个count distinct这么一个度量值,那咱们这个KN4.0将基于Spark啊,为这些多量值,它分布式的构建这么一个全局之间的值,我之前那个版本是单点构建,而咱们这个4.0是吧,咱们是全局构分布式构建啊,这这部分的优化主要是调整一个参数啊,在咱们的这个K点里边有一个全字典这么一个参数是吧?第二版本是什么格global VR啊,它有个什么呀,有一个bucket size。
05:28
就是咱们这个每一个每一个全程资产文件,它这个文件大小,你可以通过呃,调整咱们这个文件大小来来去来决定咱们这个分布式构建的一个并行度啊,如果咱们这个CPU资源充足,你可以把咱们这单个文件大小你给我降低,就减少此配置的值,可以减少单个分区的数量,那接下来我就可以是吧,使用更多的任务去构建,从而加快咱们这个全局资源的一个构建是吧,那明白了这个调参调以后呢,那么接下来就给大家看一看咱们这个全局字典是怎么用的,那咱们刚才说过了啊,我既然想用这么一个全局字典,那因此我们得在这个module里边啊,在一个module里边是吧,咱们创建一个cube用来测试咱们全局字典,咱们这也没有必要上一个新的啊,咱们干嘛,咱们用咱们刚才那个second cube,在咱们这个modu下边啊,是不是有这么一个second CU啊,哎,在咱们这个second课里边,你干嘛呀,你给我修改一下,你把咱们作量值,你给我改成咱们那个count distinct。
06:28
是吧,把它的返回类型你给我改成这个PLY,那这样一来,只要你的Q补里边有这么一个精确去成的量值,那将来咱们这个Q补在构建的时候一定会生成这么一个全局字典,OK,那我们接下来试一下好吧,OK啊。那怎么试啊,注意啊,咱们接下来就修改这个secondary,点这个action有一个edit是吧,在咱们这个,在咱们的这个cube里边有个MAS,把咱们这个mays你给我修改一下,修改一下啊,就比如这个时候啊,我不再对这个公司求和了,我干嘛呀,我对咱们的这个名字。
07:02
啊,我做一个精确驱虫,咱们去不了名字是吧,那就这样吧,我对你的工资是吧,做一个精确驱虫啊,为啥去不了名字啊,大家知道啊,因为咱们像将来咱们当初啊,在创建这个员工贸易的时候,我并没有把那个in内就员工名字,我给他设置定义成这个资量值,那因此在这就选不到,那这样吧,等咱们简单起见啊,我就对我这个公司啊,我给你做一个精确驱虫可以吧啊,那咱们这个返回值你得给我设置成这个这这么一个值,这是官方要求的是吧,叫per SLY啊就是这么一来,我会有更多内存去这个需要,OK,那然后呢,咱们把这个去给它改一下是吧,就叫count con,然后distinct。啊Dis啊DIS7IN。Count distinct的这么一个salary啊,就是对公司咱们做一个精确驱重,好吧,点个OK,那只要咱们这个Q5是吧,有了这么一个度量值,那你就可以给它保存,然后去构建了啊,那这个时候啊,咱们在构建当中呢,我就会使用咱们的这个什么呀,就会使用咱们这个全离子,点注意啊,在咱们这个secondary构建之前呢,你要调这个参数,如果你不调这个参数,咱们会构建失败,这是为啥呀?这是因为啊,在构建咱们这个全局字典的时候,咱们这个Q5对咱们这个雅。
08:19
他要求比较高啊,他要求你这个单个容器申请的这个CPU核数会超过咱们这个四核,它有时候会五,有时候会六,而咱们当前这个雅啊,默认值为四核,那所以说我们要修改咱们这个雅安单个容器分配的最大的CPU核数。把这个雅安的一个合数,你给我改成八,要不然啊,咱们这个K的任务会跑失败,跑不成功,所以说啊,咱们在跑这种全局字典以前我们先干嘛呀,咱们先修改一下咱们这个牙配置,那怎么修改啊,大家看啊。你CD的opd蜗来到这个哈多里边有ETC哈多普是吧,我们要VM修改咱们这个雅安格赛,在咱们这个雅安格赛里边,你要设置这么一个CPU核数,你就比如说啊,我在我这个内存下边,我点上一个O啊,我给它添加这么一个参数啊,咱们这个参数就是设置咱们这个雅安它最大的一个容器的一个核心数啊,如果这个值你不你不设置啊,默认是四个,而咱们这四个是跑不动,我这个权离字典的,所以说我把这个四给它改成八啊,也就是说啊,这么一个参数你得给我设置一下,要不然咱们这个构建任务他一定跑不动,好吧,我点个复制啊,来到这个里边,我给大家这个粘贴,然后呢,WQ保存,保存完以后切记要分发一下,分发咱们这个雅安刚才的。
09:34
好吧,分发完以后还要重启你的雅安,那这样一来啊,我来到我的103上面,我死多普我的雅安没问题吧,死多普雅安点二提示,然后呢,我再把我的雅安吸起来,那这样一来咱们这个雅安就可以帮咱们跑这个K的任务了,好吧啊。那这个时候啊,你发现啊,咱们这个雅安已经关了,那接下来我在我的103上,我死拿到雅安,我把我的雅安给它开启一下,好吧,等咱们这个雅安开完之后呢,我就可以构建咱们这个secondary cube了啊在咱们这个secondary cube啊,构建之前呢,你会发现在咱们的这个哈杜普1029870里边并没有那个权利资产的目录来看一下啊,在我的这个我这系统里边。
10:16
啊,我有这么一个kid kid里边有个minute,这个时候啊有个first project,由于咱们这个任务啊,当前它还没有去过虫,就没有那种精确驱成的指标,所以说啊,咱咱们当前这么一个项目,它还没有全字典,等你把这个second second cube构建完以后呢,它就会生成这么一个DCT这么一个目录,而咱们这个DCT这么一个目录啊,就是咱们的全局自检目录,好吧,那咱们接下来咱们这个雅安就处理成功了,那这个雅安起来之后呢,我就构建一下我这个second cube,好吧,在这个里边我就会使用这么一个全局字典了,那接下来我就点个action是吧,点上一个build。等咱们这个second cube啊,构建完以后呢,那咱们这个权力字典也就有了,大家可以一起来看一下好吧啊。
11:05
我们得等他一会儿啊,因为咱们这个全离字典稍微比较复杂,它这个速度稍微慢一些啊,咱们又是第一次构建咱们这个全离字典,好吧啊。那这个时候啊,我得先打开咱们这个雅安,看他能不能跑起来啊。那这个时候啊,他这个任务还没有好起来啊,他第一步先先要干嘛呀,先要这个资源探测,资源探测完以后呢,才开始去创建咱们这个,才构建这个Q补,在构建QB的过程中啊,它才会创建全离子典,OK啊所以说啊,也就是说咱们这个上面讲的这个任务,这个这个顺序是一样的,是是是是没有问题的,就是第一步就是资源探测,第二步就是构建咱们的快照表啊,生成全字点啊,并且要咱要将咱们这个QB数据是吧,构建为咱们的power文件啊,那咱们接下来就等它了啊,耐心等待一下,等咱们这个Q补啊构完以后,它基本上就差不多了啊,注意啊,它这个时候啊,它的资源探测已经完事了,在资源探测过程中是吧,它会设置一些参数,然后呢,他发现你的这个你的这个这个资料值里边有了这么一个countt distinct,所以说它就需要构建这么一个全字点。
12:13
那咱们接下来咱们这个雅安应该跑起来了啊,在这个雅安里边,它马上就会有这么有有这么一个SPA帮咱们去构建好吧啊。我们这个等待了一会儿啊,你会发现咱们的这个带有这个全局字典,也就是说这个精确驱虫的这么一个second课五,它已经构建完了,那等它构建完以后呢,那咱们接下来就来到哪啊,就来到咱们的这个HDS上怎么刷新啊,那这个时候啊,由于咱们的这个secondary cube是吧,它需要今天驱重,那所以说在咱们这个cube的构建过程中,它就帮咱们生成了这么一个全离子典,大家可以打开这么一个目录啊,DT这么一个目录就是全局字典存放的一个目录,那我们就看一看咱们的这个first project,它都有什么全字典,好吧,大家打开这个DCT,这DCT里边有个global dt,那这个目录就是全字典,大家打开这个全字典里边呢,发现有个EP啊,这个EP是咱们那个员工表,在这个P员工表里边有个salary salary是这个工资列,在这个工资列里边是吧,你会发现就有这么一个目录叫versionson是吧,因为因为因为咱们刚才讲过啊,我每一次去重它都会构建一。
13:26
是个全新的全字典,所以说啊,咱们这个全认字典也是带有版本的啊,就是我下一次再构建它又有一个新的版本啊,因为他不知道你这个数据有没有变化嘛,因个数据变化是吧,它就它每次都会有一个新的版本的权字点,那这个老的会删除删删删除,那么接下来看一下咱们这个versionson啊,在这个里边我就有这些全静电值的。啊,这些值只不过咱们看不懂啊,它是一个park文件,好吧,这个大家大家可以简单看一看,就是对这个工资咱们整体给它做了一个全离子点,注意啊,咱们这每一个CR文件就是那个bucket,这每一个都是bucket,那我这个me呢,就是那个原数据,咱们说了,咱们这个群离字典,它是由多个bucket跟一个me这么一个言数据组成的,好吧,那咱们这个权力字典使用啊,就给大家讲到这儿呗。
14:12
那咱们这个全力字典用完以后啊,那咱们接下来再讲最后一点,就是咱们这个快照表啊,咱们之前讲过一个东西啊,就是咱们那个。咱们这个K每一次在读取原数据做这个Q补构建的时候,它的这个EP就这个实实表,要么全量构建,要么增量构建,而我的维度表呢,就比如说我的第1PT啊,而咱们这个维度表也有可能会数据变化,那我这个K是怎么保存咱们这个维度表变化呢?它每次啊都都对你这个维度表咱们做一个全量快照表,所以说啊,咱们这个第5.3 5.3.3这章节咱们讲的就是这个快照表它的一个构建性能一个优化啊就是这个snap,呃,Snap short的table就是快照表,每一张快照表就对应咱们have的一个维度表,那为了实时记录咱们这个have维度表一数据变化是吧,Kding的cub每次构建都会对咱们的have维度表创建一个新的快照,那以下是咱们这个快照表这个调参数,注意啊,咱们这个快表快照表存在哪个目录里边啊,存在这么一个first project里边有这么一个table number shot,我们一起来看一下,好吧,大家打开咱们这个first project,这么。
15:20
目录在这个目录里边是吧,咱们这个目录啊,这个tablesh存的就是快照表,大家在这个快照表里边啊,明显能够看到咱们这个dept啊,是有这么一个快照的是吧?你的你的每一次构建它都会对对这个dept生成这么一个快照,大家应该能看到,能能能能看出来是这样的啊是这样的,你看刚才这是我最后一次构建啊,是咱们这个这么一个花招,OK啊嗯。那咱们这个快照表在构建过程中能够怎么调优啊,它有两个参数来调优啊,第一个就是开启咱们这个分布式构建是吧,并行构建保持开启这么一个参数啊,是分布式构建咱们的快照表啊,第二个是咱们这个快照表它每一个分区存这个文件的大小啊,默认是128兆,那如果你的CPU资源充足,你可以把这个值适当调小啊,增加咱们并行度,那这样一来咱们这个并行度111多,那我这个快照表在构建的时候速度就会很快啊,这个官方建议啊,咱们这个并行度应该是在Spark应用CPU总核心数的三倍以内。
16:19
啊,就比如说你一共有五个核,那这并行度应该是在15以内好吧,就并行度等于咱们这个原表数据量除以咱们这个参数这样的啊,那所以说啊,咱们这个快照表跟咱们这个全字点啊,就给大家讲到这里好吧,当你设置好了适当参数啊,设置好了全字点啊设置好了快照表,那咱们这个K里那个Q不构建的速度会必然调快,大家可以通过这三个方向啊去调优咱们这个Q不构建,OK啊,那讲到这啊,那咱们整个Q的一个构建优化就给它讲完了,大家适当了解一下好吧啊。
我来说两句