00:00
好,那接下来我们看啊,我们来带一下,比如说这个K败后,我直接做聚合,我能不能。加随机数实现双重聚合呢,对吧,我用第一种方案啊,比如说我采用这种方案。那呃,那他要怎么做,比如说刚开始呢,是一个理由对吧,DS啊。DS,首先第一步我要干什么事了,我要map对吧,比如说我本来要按照ID分组对吧,那我这样写啊ID对吧?好ID加一个随机数。对吧,加一个随机数好,然后呢,我们去K。击败啊,呃,这个呢,我假如说叫新ID可以吧,击败这个ID啊。K这个ID就写法上啊,K这个ID我我就没写那么多了啊,我大概写一个伪代码对吧,大家知道一下啊,然后呢,我们去reduce吧。Windows啊,做一个聚合对吧,聚合以后呢,我们再map把这个ID呢,首先它此时呢,是这个ID加什么随机数对吧。
01:05
随机数,我们要去掉这个内容吧,好,又变成什么呢?又变成一个。ID对吧,好再进行什么KD。再就是一层。是,是不是这样写,如果说我要加随机数实现双重聚合,是不是应该这样写,能看懂吗?就是第一步我先加随机数,按照加好的这个ID做聚合一次,再把随机数去掉对吧,然后再按这个ID分组,然后再聚合一次,这个没毛病吧,当然这个运行肯定运行不了啊,我写的伪代码,我没必要去写一个嘛,这个应该能看懂哈。这个能行吗?应该没问题吧,好,那我们想着我们代码呢,肯定这样写啊,我们代码肯定这样写,但是有没有同学能告诉我这个可不可以,能不能行呢?大家觉得。
02:01
这个他得不得行呢。对吧?啊,如果这个不行,我们就得想一个办法,那预聚合应该怎么做呢。什什么,怎么变回去。怎么变回去是什么意思啊?就是就是这个东西怎么找到这个ID是吗?哎呀泽总你你这个就真不应该了。对吧。我我只是写我说了写的伪代码吗。对吧,我我真写的时候肯定要加一个特殊的分隔符呀。对吧,你你这个问题问的就没有水平了,就不像泽总问的问题啊。这个你应该清楚,我非要我说的这伪代码你肯定得清楚,那这个随便加一个随机数,加一个这个分割符不就好了吗?对不对。
03:03
对吧,这个问题问的我不高兴了啊。你们走走,钓鱼了。对吧,你。为什么呢?你你怎么感觉的啊?辛总,辛总你说感觉不行啊,你为什么这么感觉,哪块出了问题。其实大家呢,听课听多了,应该也能感觉到,我既然这样问哈,我既然这样问,我都把代码写完了,如果可以的话,我们就直接过了,是不是啊,我既然还这样问,大家应该能知道他其实不行,对吧?那你想一想他为什么不行?对吧,你可以思考一下他为什么不行啊。哈希,碰撞导致聚合的可能不对。
04:02
什么玩意儿?闹呢,陶总?你这这哎哟,那那你以前那个聚合都不对了。我以前一直用的都是一个冰度,你还记得吗?他要K相同的,它又不是说哈希值相同的就放在放在一起聚合,它哈希值相同的放在一个并度。然后还是按K聚合呀,曹总。他还是按P聚合,哎。他怎么能把不同的K聚合到一起呢?K变多了。K变多了有有什么问题吗?对啊,我就K变多我打散呢,对吧,我要打散数据,我K不变多,我怎么打散呢。对吧,你比如说。我的是这个10万条数据,我本来10万条,现在呢,我加了十个随机数。
05:00
加了十种啊,零到九对吧,我在后面加了零到90种,那这10万个是不是变成了1万乘以十。变成这么多种啊。对吧。因为K败两次变慢了。不对。这肯定不对呀,你你你变慢了,你之前说的倾斜说倾斜你认为都跑不了,你你说句倾斜你任务不更慢吗?对不对?你说的倾斜,你任务不更慢吗?你怎么能因为两次K2任务变慢了呢?没有仔细想啊,这是礼物啊,来看啊,我给大家画个图,大家明白了,比如说啊,他之前呢,假如说是四个A可以吧。四个A。好,那么呃,这样吧,我们这样说。我呢,有两个零度。这边有两个A。这边呢有两个A,好,那我们这边如果直接做KPI啊,先不考虑优化对吧,我们怎么情况,那这个A呢,进到同一个分区吧。
06:03
好,这个空的这个呢,同一个,这个是不是我们说的数据倾斜现象啊,没毛病吧,就是我们不加随机数,它是不是四个A一定进同一个边度,这个有没有问题,没问题扣一。这是我们所说的数据倾斜,对吧。好来看啊,我们解决方案来看啊。大家看不出来这个问题是吧?好还是A啊。这个呢,我画小一点,因为我们的流程变多了。对吧,首先第一次啊,加这个地方的map加随机数啊,加随机数可以吧。留还是一个个过来解决不了,你你看着啊,你看着。这个是map这一步呢,加随机数啊好,加随机数以后呢,我们K。啊,不光解决不了,不光解决不了。
07:04
不光是解决不了的问题。啊,还有一个更严重的问题,好,这是K。这是第一次K对吧,好K以后呢,Map又做一个map吧。这又是一个脉搏,这干什么,这是去掉随机数对吧?去掉随机数以后呢,我再做一次什么提问。好,这个图有没有问题,大家能理解吗?看啊,这又是第二次KPI啊,KPI之后呢,这是some,这是聚合对吧。这是聚合啊,这是聚合。弗流处理来一条,数据处理一条,并向下游发送。对于第二阶段来说,数据不仅没有介绍,还重复计算。对了,辛总答案完全正确,两个问题都答对了,不仅没有减少,还重复计算。啊,辛总说的这个完全没有毛病,全对啊,全对。
08:00
来,我们把这个图一画,大家就明白了。对吧,这就是实时跟离线它的一个不同。啊,它不同对吧,比如说我这边呢,加随数,我的第一个加A1,第二个呢A2可以吧,好这边呢也是A1。A。好。那比如说A一进这二,A2进这二可以吧,好,那么两个A1是不是进这二首先来了一个A1啊A1好,那我们要K半K半A1啊,它呢是一个一对吧,输出好,那到这儿到这儿呢,我把随数干掉,随数干掉呢,它就变成A1啊又变成它了,对吧?好。然后呢,K假如A呢,进第一个病毒可以吧,它的输出结果呢,应该是什么?A1啊,第一次输出是A1。这个时候我们就要一条一条数据来看了啊,是不是A这个A1走完结果是不是有一个A1了,有没有问题。有没有问题跟上啊,跟上我现在呢,是一条一条数据来聊啊。
09:01
这个A1过来走这对吧,它变成A11嘛,聚合啊,然后呢,去掉随机数变成A1,然后呢,输出结果是A1嘛。跟上思路啊。好,那么A2来了,A2来了呢,比如说我让A2进这个温度对吧,随数嘛,我打散,哎,这个不是打散了吗?对吧,刚才都进这一个温度,那现在两个温度了对吧?好,那你继续往后看啊,那我去掉随机数,它是几啊,它还是A1对不对。去掉随机数是不是A呀。对吧,把随机数干掉A1好,那这个A1呢,是不是进这,因为你按A进行K嘛,所以进这,那么第二条数据来了,输出一个A2。输出一个A2,其实这个时候就已经有一点问题了。就已经有一点问题了,什么问题啊。这个就是辛总所说对吧。他并没有减少数据量,你看这个任务啊,看这个reduce任务来了两条,他是不是处理两条。
10:05
看见没来了两条数据,它处理两条数据。对吧,好,它里面还有一个严严重致命的错误,还有一个错误对吧,来看啊。比如说这个A1来了,这个A1来了是不是KY之后进这进这之后呢,它是不是A1,哎,上面有个一,我是这注意啊,这是一个sum任务啊,就是reduce任务对吧?好,这变成二啊这变成二,那么接下来呢,我要把这个所入去掉,那这个呢是A2,好A2呢,按A分组进这吧,A2。第三条,数据来的时候,他结果直接变成谁了。变成A4了。第三条数据来的时候,它的结果变成了A4了,看见没对吧,你再想第四条数据啊,第四条数据呢,是这个A2对吧,A2呢,进到这是一个二对吧?好,那变成A2 a2呢,按A分组是不是进这又来一个A2,最后结果A6。
11:05
完了。对吧。这是新总所说,刚才是不是两个点全中第一,你看啊,原始数据四条,那我对于这个任务而言,是不是处理四条数据,数据没有减少。对吧,处理的数据没有减少,那你要原数据这个倾斜了,那你这不还是属于倾斜吗?对吧,你看这边没有这空的,这边处理四条。好,关键问题在于你最后结果你搞了这么一场,你结果还不对。你的结果还不对,关键这是最关键的对吧,所以刚才辛总所说的没毛病啊,没毛病啊,对吧,两个啊,那这个呢,这也行啊,不可。不可不行啊,如果你要写在这样写,但是呢,他不行。对吧,那依据和能不能行呢。具盒可不可以呢?
12:04
就是我提前把这个数据呢。聚合一次。关键问题在于我是一个理对吧,我不像离线。离线呢?他有这个map。Map结束的时候,那这个流怎么实现啊,是不是不行啊。这这个这是个流哎。这是硫,我怎么做预聚合呀?啊,应该可以,别墅靠海是吧,靠错了吧。预制和行不行啊?你想慢跑?Map呢?我们我们的have里边或者MR里边,它是不是有map跟radio,你map这个数据是不是有读完的时候,我读完了,我是不是聚合一次把它写出去啊,但这个硫你要做预聚合,你怎么做呢?
13:06
是不是不行?是不是?这是个里外。有读完的时候吗?啊,新的改了不行对吧,是不是不行啊,其他同学呢。源源不断的过来的啊。他总说无。无是什么意思啊?辛总,真好玩啊,挖个坑你就往里跳。啊,挖个坑你就往里跳啊。啊,就说不行啊,源源不断要出事,别墅靠海。
14:02
哎,如果两个都不行,我写在这干嘛呀?心总,心总被忽悠了,弗林格夫有状态,对了对了,状态就是我们,他留啊,虽然是源源不断过来,那我能不能用定时器呀?我定时器加状态。我假如说你不是源源不断过来吗?但是呢,我攒个五秒,攒个十秒。我一输出可不可以呢,对吧?辛总笑死我了。辛总。对吧,能理解吗?能不能理解了,就是我能不能用一个定时器加状态,把这个数据先缓存一部分啊,我没有说把流全部缓存下来啊,对吧,我把它缓存一部分,我聚合一次写出去不就好了吗?对吧,假如说五秒钟啊,我呢把这五秒钟的数据,这五秒钟呢有十个A,本来呢,你要输出A10次,对吧,现在呢,我这五秒钟攒一下,诶写一个什么A10。
15:12
写一个A10出去对吧,你本来写十条,现在呢,我写一条。对不对,我下游数据量处理的数据量是不是减小了。有没有毛病?没毛病吧,对吧?啊,辛总被忽悠了啊,这个地方呢,其实可以用定时器加状态来解决这个问题,对吧?我们可以用这个事情啊,在本地每一个必度,每一个并行度里边,它自己先去聚合一下,对吧,然后再向下游发啊,再去K半,那这样的话呢,到了下游数据量会减少嘛,对吧,这是预聚合啊,这是预聚合啊,泽总不说话,泽总看你被调戏很开心是不是。好,呃,那我问一下大家啊,这边呢,我们既然用电视器压状态啊,那我能不能开窗呢?我直接开窗不就完了吗?哎,这个浴具盒我能不能用开窗浴具盒呀。
16:19
啊。这个地方我能不能开窗预聚合呀,对吧,我还要用定时器,还要搞状态对吧,这个状态呢,还得用一个什么,这个至少得reduce状态或者list状态,把数据都保存下来,对吧?那我能不能开窗一聚合呀。啊,我套路套路多了。我套路多了,是不是大家不敢不敢回答了啊?看到辛总被无情套路是吧?不敢回答了,那么回答没事啊,我又不打你对不对?我又不打你啊,这还活跃气氛呢,对吧?
17:05
那就光扣666有啥用啊。啊,郑总感觉不行,为什么呢?你不要总是感觉不行,开窗你不是还要KPI,对了啊对了。对了,泽总果然还得折总出马,是不是啊,就是开窗不行啊,为什么?因为你开窗聚合的时候啊,你是不是要批呀?你本来是为了解决KBY带来的数据倾斜问题,对吧,然后呢,你引入一个开窗,你去KBY,那不是有毛病吗。对吧,啊,这个不行啊,不行对吧,泽总你看一打直接打到点子上没毛病啊泽总是吧,好,这个咱们就搞定了,咱们呢,而且这个状态呢,要用这个operator state,不能用k state啊,不能用监控状态,用普通的算子状态,这个我们写一下啊。它是普通的算子状态对吧,你不能用监控状态啊,因为你监控状态怎么样。
18:04
你要KB对吧,我们就是为了不做KB,在KB前要做语矩盒对吧,所以呢,你只能用普通的算子状态,你不能用什么呢?监控状态啊,不能用监控状态,那不行对吧,好这个。
我来说两句