00:00
好了同学们啊,那咱们一起接着再看一下啊,咱们这个查询性能还有什么优化啊,就是这个63章节,它讲的也是这个查询性能一个优化,就是咱们这个K点4.0啊,可以通过设置一些参数来减少咱们这个小的或者不均匀的这么一个PA文件啊,首先啊,我们在这个查询的时候,如果你这一次任务读取太多的小文件,或者几个太大的文件,会导致咱们这个查询性能低下。那为了避免这种问题呢,咱们这个KN4.0,再将这个Q补数据啊,作为咱们这个park的文件构建的时候呢,我会按照一定策略对咱们这个park的文件进行重分区啊,就是每一次啊,我会重分区一下,那咱们怎么重重重分区啊,就是我为了就是减少咱们这个小的或者培训的文件,我每次都会重分区。那咱们这个重分区你看啊,怎么分的啊,它有这么一个策略啊,首先它跟这几个参数有关系,就是存储参数有关系啊,首先啊,咱们先介绍这几个参数啊,第一个参数就是有咱们这个沙特麦列那么一个帕的文件,它的最大大小是吧,默认值是128兆啊,第二个参数就是咱们这个每一个帕的文件,它能存的最多的一个行数啊,我们默认是250万,就是我每一个文件啊,默认只能存就最大只能存250万行。
01:12
那第三个参数呢,就是咱们那个q boy的它的一个bit特麦大小,也就什么意思啊,在咱们那种有那种精确去重的那个任务里边,它的一个全离字典,也就是说它的一个呃,Q boy的那个bit map是吧,它最多是100万行,就咱们这个精确驱虫跟那个不去虫咱们这个文件是不一样的,如果你有那个精确驱虫,它是100万行,如果你没有那个精驱虫是250万行啊,这个是不一样的啊,两个参数来控制好吧,最后一个就是咱们那个每个part文件啊,注意啊,第一个是有时的败列的part文件,最后一个就是每一个帕的文件,它的最大大小都是这个128兆,好吧,那我们接下来就来看一下咱们这个重分区的一个检查策略。首先啊,它有三个条件,第一个第一个条件就是咱们这个q point有这么一个设败列啊,第二个就是咱们这个park文件,它这个频均大小,你必须小于咱们的这个设置的这么一个大小,注意啊,咱们这个参数是不是就咱们的这个,呃,第二第三个第四个参数啊,就是咱们每个帕的文件那个最大小128兆,就首先你的这个park的文件频大小,它不可能大于它,因为他们最大嘛,是吧,它必须小于它。
02:19
并且咱们这个park的文件的数量它就大于一啊,那这种情况啊,我我我的目的就是为了避免咱们那个小件太多啊,第三个条件啊,就是咱们的这个park的文件,它这个数量你必须小于谁啊。小于咱们的这个park文件它的一个总行数,首先咱们这个park文件是不是有个行数啊,那么这个总行数你得除以谁啊,你得除以咱们这每一个park文件就最标行数。啊吹这个二二百五十万留出完之后呢,你还得乘以0.75,它有一,它有一个这个,呃,留存就是你稍微有一个存档是吧,稍微有一个门槛就是你不能大于它大大于它0.75倍啊,因为太多咱们这个power零件放不下是吧,所以说啊,那如果说这个qbo的有这个精率去重,我会我还会把这个公式里边的这个东西是吧,250万换成这个100万啊来代替它,那这种情况啊,我们也是为了避免咱们这个不均匀的一个文件。
03:12
那如果说这三个文件你满足条件之一,咱们这个就是咱们这个Q5在查询的时候,它都会进行一个除分区,那么这个分区的数量啊,怎么计算啊,我们一起来看一下啊,咱们也是两个公式啊,首先我会拿你这个的文件这么一个大小是吧,是一个照币的单位,我除以谁啊,我除以我这每一个park的文件它的一个大小啊,因为咱们这个总大小除以每一个大小是吧,我会得到一个向上取整的整数。那这个整数值就是咱们这个文件的一个数量。好吧,那这个文件数量有了,那么接下来还有一个文件的行数,就是用咱们这个park的文件的一个总行数是吧,除以咱们这每一个文件的一个行数啊,就得到这么一个向上取整的一个行数,就是每个文件的一个行数,那接下来咱们这个分区数量就等于谁呀,就等于咱们的第一个啊的大小加上第二个大小它的平均值啊,然后然后呢,我再下上学整,就最终就得到了咱们这个查询的一个这个分区数量,好吧,这个东西大家简单了解一下啊,就咱们这个Q补啊,每次查询的时候为了避免。
04:18
读到太多的小文件或者太大文件,它会进行一个重分区,但是重分区是有要求的啊,就看你是否有这么一个杀白链啊,如果有又会怎么样是吧,它有个计计算计算方法,再简单了解一下好吧,那当你合理的调整咱们这个参数的方式是怎么调啊啊就是既然它它可以重分区,那我们就可以调整这几个参数来调整它分区啊,大家可以看到啊。就比如说官方案例啊,就是就这块儿啊,就是官方给了一个案例啊,就大家可以给简简简单看一下,咱们在这个官方案例里边,如果我不调整我这个重新参数,它默认分期数有809个,那这809个分区就对应809个小文件呗,是吧,那我我们因为既然咱们这个文件数太大了,那我就可以适当调整参数啊,让这个位数变变变小,我们看一下啊,我增大我这个我每一个park的文件它的一个总行数。
05:09
和咱们这个什么呀,和咱们的一个,呃,B map那个去重的一个总行数,把这两个值增大以后呢,你重新构建,你会发现咱们的这个分区数明显就会变小,从809个分区是吧,变成了三个分区,那这样一来,也就是说咱们调整这两个参数的值,可以降低咱们的分区数。那只要这个分级数你降低了,那这个小文件也就没有了,好吧,那所以说啊,咱们的一个构建速度啊和一个查询速度都会提升很多,所以说啊,咱们这个底层存储的一个文件大小是能够影响咱们的一个构建速度和这个参与速度的,大家要简单了解一下好吧,那明白这个以后呢,那咱们这个K点还支持将咱们多个小文件读到同一分区里面。是吧,如果说你这个小文件实在是太多了,我也可以一个分区读多个文件,那怎么设置啊啊,当咱们已经构建好的这个本词是吧,有很多小文件的时候,我可以修改一个参数,就是咱们这个每一个Spark任务,它读的一个文件数啊,最大文件数是吧,默认你把这128兆是吧,你可以把这一些小文件读到单个分里边啊,就是你把这个你把这个最大分区数的值你给我调小,就可以读多个文件了啊,从而避免多个它的小任务啊,那如果说有多有足够的资源,你也可以把这个参数。
06:28
减小是吧,来增加咱们那个并行度啊,同时需要减少谁啊,减少咱们那个单个文件它的存储大小啊,这个你也给我减小,因为咱们这个派的文件啊,最小的一个分割单元就是这个group,那如果这个入group你不减少,那咱们这个文件数也不减少啊,所以说啊,这两个参数你给我配合使用,就可以降低咱们这个单个文件值,然后提升咱们这个pop的文件它的一个并行度,好吧?啊,除此以外呢,咱们还可以设置这么一个对外内存,咱们这个对外内存是吧,如果设计好了,那咱们这个插询速度也会变快啊,因为咱们这个Spark是吧,都说过。
07:03
无论是构建任务还是查询任务,我都可以使用两种内存,第一种叫堆外内存,第二种叫堆内内存,那这个堆内一般我们是通过那个ex内存还是那我这个对外呢,就可以通过咱们这个op hi是吧,来设置咱们这个对外内存,如果这个对外内存你设置好了以后呢,那咱们这个杀过程中,它的速度就会变快,是这样的啊,那所以说啊,咱们的一个查询性能优化啊,就给大家讲到这里,OK啊。
我来说两句