00:00
好,那接下来呢,我们看这个数据倾斜对吧,那数据倾斜怎么判断呢?其实比较简单,就刚刚我们也给他打开看了对吧,那在我们的网页当中,诶,它有一个sub task,它呢会有接收到的数据对吧?接收到的数据诶那如果说这个现象不均匀,你比如说这个啊,看这张图啊,第一这个任务呢,1.74个G。而有的任务呢,你看。八兆七兆对吧,几十兆。那这个很明显,那就怎么样数据倾斜对吧,也就是说它其实也有对应的这个指标可以做到我们的一个。监控。对吧,啊,也可以做到这个监控啊,完全可以做到这个监控。对吧,啊,完全可以做到这个监控啊。好。那这个是数新年,这个现象我们就不多聊了,这个比较简单对吧,其实我们都知道了,就是接收到数据不同,那问题是关键是总总结原因以及我们要处理。
01:02
对吧,啊,咱们要处理啊,好,那么第一个。数据倾斜的一个解决,那么第一个问题呢,是K败前,我们分为两块,一个是K败前,一个K败后,对吧,那我们想K半前为什么会发生数据倾斜呢。对吧,我都没有做K,为什么会发生出倾斜呢?那。我KPI后数信息大家是不是能好理解一点?对吧,诶大家大家答的不错啊,辛总说数据导入的时候对吧,还有涛总所说的,诶数据源本身的数据就不均匀,那这个问题我们应该怎么解决呢。
02:03
我们应该怎么解决呢?增加分区啊,重分区,对呀,重分区不就好了吗?对吧,我们调用rebellance是不是做一个重分区啊。啊,用reb做一个全局轮询是不是就好了,自自定义自定义啥呀。自定义什么东西啊?自定义重分去算子吗?不需要吧,我们有re balance。官方不给我们提供了一个东西叫re balance吗?Re balance怎么充分区的呀?是不是全局轮巡啊,对不对对吧?那如果有可能的话,最好呢,在上游吧。
03:03
啊,最好在上游让他处理一下,因为这样的话,下游所有人消费到的人就不要再处理了,如果说你上游没办法处理,那下游处理的话,就是下游每个人消费这个主题的,那都要处理是不是。是不是都要处理啊?对吧,啊,他有可能都要处理,是这个意思对吧?好好,那也就是说我们可以用re balance做一个。全局轮巡就好了,那可以,最好呢是在上游对吧?啊,那其次呢是在下游,那上游做不了,假如说人家已经说封装死了,就这样了。没得改。对吧,那就在下一游呗,谁消费谁re balance一下,对吧,做一个全局轮询就好了,对吧,这是K代写啊,就是数据本身就会有倾斜啊,数据本身就不允许,对吧,用re balance re balance最好的,对吧,Balance全局类群那最好了啊好,这是我们所聊的数据倾斜它的一个现象,对吧,以及他K前如果出于倾斜了,我们应该如何处理对吧?这个很简单啊,我们把它。
04:04
呃,接下来呢,我们看一下K败之后造成的数据信息,对吧,那K败之后呢,造成。数据倾斜啊这种。是。非常常见的对吧?啊key by后的数据倾斜啊,我们写一下叫key后的数据倾斜。因为K嘛,我们很明显RK的哈希对吧,如果说你这个K的数据量它不一样多,那必然会造成这个数据倾斜。关键就在于,那这个问题我们该如何解决呢?对吧?啊,这边有两个啊,一个呢是KBY后直接聚合,还有一个呢是KBY后开窗聚合,这两种处理方案不一样啊,第一种呢是TBY后直接聚合。直接聚合。还有一种呢,是KBY后。
05:01
开窗聚合。啊,比如说我们有这两种,那这两种我们应该怎么做呢?对吧?好,那我们先想一想啊,以前呢,我们学哈杜学have的时候,关于数据新写,我们的处理方案有哪些,我们看能不能套用套用对吧?就是之前have啊,我们先回想一下学习have的时候处理数据新写的手段手段对吧。有哪些?三筒。辛总,你认真的吗?分筒能处理数据吸血问题吗?啊,自定义分区。自定义分区啊,你乱说的好,涛总说自定义分区器是吧?好,那么先写上啊,自定义分区器。
06:07
啊,杰总说了,这个加随机字段加随机数对吧,加随机数啊。加随机数。好。嗯。还有没有呢?没了是吗?其实自定义分区器在处理这种数据倾斜的时候不太好啊,不太好,因为假如说我一个K特别多呢。你自定义分区,你怎么分,这不还是进到一个分区嘛,对吧啊。这个其实不好,这种呢我们先放弃啊,这种呢,其实有的有的问题解决不了,所以加随机数,加随机数实现什么双重聚合吧。就是聚合两次啊,第一次呢加随机数打散,对吧,第二次呢,把随机数去掉,再聚合一次啊,那我们写一下啊,就是第一次就是加随机处打散。
07:09
打散数据啊呃,聚合一次。就喝一次对吧,啊,然后。去掉随机数,再聚合一次。对吧,所以呢,我们直接叫加随机数,实现双重聚合,还有呢。还有非常好用的有什么呀?没有了吗?大家就会这一种是吗?就会加随机数。实现双重聚合,没有了,没有其他的了是吗?
08:08
还有一个最简单的,看来被大家漏掉了,班长赶紧扣了一个666啊,缓解这个尴尬的气氛对吧?啊,最怕空气。啊,感谢班长的666对吧,缓解了一下这个气氛是吧,要不然咱们在这尬着也确实挺尴尬的是吧,嗯。调整并行度啊,调整并行度可以分批次join,嗯。我K,拜拜。KBY对应的肯定是group by呀,对吧?嗯,那肯定没用啊,调整度呢,能缓解一些,但是不好,还有一个最简单的方式,大家怎么能忘了呢?我真服了啊。还有一个简单的方式呀。
09:03
空气过滤。啊。你们怎么都在说join啊?我现在聊KBYK。He对应的have go by。对于have的group啊,跟卖也没关系啊,叶总。跟没有也没关系啊。就我们现在聊的是单表,哎,聊的是单表对吧,K呀。对吧。开启数据倾斜时负载均衡啊,开启数据倾斜时数带负载均衡的还是它。还是啥跟他一样的,他自己给你加随机数,这个地方呢,我们自己加,增加reduce个数可以缓解嘛,刚才辛总说了增加温度对吧,可以缓解啊,增加radio的分支数可以缓解对吧,如果是单K单K倾斜呢。如果是单K倾斜呢?某一个K倾斜呢?增加reduce个数有用吗?
10:07
如果是单K倾斜呢?有没有用啊,他没有用对吧,还有一个东西怎么能忘了呢,我真服了,哎呀。太难了,一个最简单的给大家忘了哈。啊,看来我今天钓鱼好像被这个输入法给暴露了,怎么变成渔具盒了啊?哎哟,头疼。玉具盒呀,玉具盒呀,在脉搏端做一个预具盒吧。啊。就是刚才大家所说的这些啊,看自定义,我把这个也写一下,自定义分区器对吧。
11:06
然后呢,增加video的个数。对吧,这些呢,都只能缓解。对吧,他呢要什么要多个K造成数据倾斜,像这种方案有用,如果单个K那没有用。对吧,再加上你们所说的什么空气。过滤。对吧,空过滤还有这个什么。这个注意啊,这个讲的是多表关联对吧,多表关联。多表关联的时候造成的数据信息,这不一样,跟我们现在我们现在描述的什么叫KBY,那KBY对应have里边什么呢?处理那group by造成的数据倾斜啊。听懂。我们link里边这个K。
12:01
对吧,是不是相当于have里边我们对于单表查询写group by造成数据信息是一个道理。能明白吗?对吧?你聊什么空k map draw,这不是多表关联吗?这不是多表关联造成的问题嘛,对不对,不一样啊,你得搞清楚在在聊什么对不对啊,你答的呢,确实也是属于新节,但是跟我想要的不一样啊,对吧,这个呢倒可以啊,它呢是什么东西啊,来比如说我举个例子啊,现在呢,我有ABC啊abcb好,他呢10万条。他拿1万条对吧,他拿10万条,他拿2万条。比如说现在呢,我分两个区。啊,增加radio是个数对吧,我分两个区为什么有用啊,给大家看一下,我分两个区,那么AC在一个区,然后BD在一个区对吧?按照我们哈西扣的嘛,对吧?好,那你看啊,AC加一块20万。BD加一块儿呢,3万。
13:01
好,本来差距最大的是他俩9万对吧,他俩差9万,现在呢,才27万,呃,17万。差距更大了,对吧,所以呢,如果我分四个区呢,我把reduce个数增加,我分四个区呢。对吧,你你就变成什么了啊,那呃A10万B是不是一人一个区啊,差距最大9万吧,对吧?好,那为什么它不适合这个什么叫单K倾斜呢?你比如说啊A10A100万。B呢,5000。啊,C呢2000。D呢,8000。可以吧,好这个很明显这样心眼啊,那假如说我分两个区啊,分两个区,分两个区呢,AC到一起对吧,BD到一起好你看啊,分两个区,那这是1002000对吧,他呢100万。他呢,8000啊13000。13000。对吧,他一万三啊,那如果分四个区呢。
14:00
分四个区,那一百万五千两千八千,这有用吗?没用对吧,所以你如果单K倾斜,你增加reduce个数没用啊,所以呢,他们都只能叫缓解。空K会有空分区啊,单K会会有空分区有可能啊。这个有没有空分区就看你数据了。对吧,假如说你数据只有ABC,只有ABC,你分四个区。当然有空分区了,对吧,你K的不够,那肯定有空分区啊,对吧。但是这个不一定啊,不好说,这个得看你数据啊,一般不聊这个空分区的事儿了,对吧,不聊空分区的事儿好,那咱们呢,处理方案呢,就是这两种。对吧,这两种呢,用的比较多啊,用的比较多,当然这些东西呢,我们未来在节后啊,在五一节后我们复习have的时候,我还要把这个事情跟大家详聊啊,因为嗯,确实大家都忘的差不多了,太菜了啊好。
我来说两句