00:00
好,还有这种抗的驱虫的一个统计。这种统计是不是针对于某一个字段,先把它去除之后再进行统计啊,啊进行统计,那这种啊,它的一个处理的一个工作量很大,想想看为什么。你去重的这个操作。他要放在一个里边去处理吧。你去重了对吧,你想想看,你要把所有数据全部拿到,你才能知道有没有重复的吧,你拿局部数据,你说没有重复的等于没有重复啊,不等于吧,所以说哎,去除的它是。要交给什么一个reduce来处理的,那我们知道一旦交给一个reduce就产生了什么。数据倾斜吧,啊,数据倾斜或者说就这一个任务啊,会拖慢整个。咱们整个教母的一个节奏啊,整个教母的一个节奏,那我们要转换一下,哎,用这个钩中带。
01:04
啊,然后再count那勾半以后,它是不是按照某一个字段来分组的呀,哎,一个组里边它来count一个组啊,有多少个组。是这样的。来我们看一下它那个,对比一下它一个执行效率,这是创建一个大表,下载数据我们已经有了,然后reduce个数设置为五个,看一下我们应该没改,应该还是五个是吧,五个好,有五个色来做接下来。执行去重ID的一个查询。执行驱重ID的一个查询,我们先用count的这个方式来。啊,看他那个执行时间。通常呢,我们都是采用这种方式来查询ID的是吧,那你要就是这样给你一堆订单日志,让你查我这个网站有多少个用户,那你是不是要对于订单I订单这个日志里边的一个用户ID进行去重,然后统计呀,啊就类似于这种,那如果说你直接用count加distinct ID啊这种方式它会怎么样呢?来看一下它的一个执行的一个时间啊,执行的个时间。
02:18
他是将这个整个的ID发给一个去处理一去处理。他起了两个任务吧,起了两个任务。那第二个任务,你看它只有一个维流色。只有一个啊,去处理的,去重后的一个ID是。9万多条里边有只有不太多的一个内容重复是吧,不太多的一个内容重复用了58秒的一个时间是吧,58秒的一个时间,接下来我们通过这种格半啊这种方式代替。
03:02
这个驱虫代替这个驱虫来,它是select count ID from,你先查询一下ID。做了一个子查询来。你先group I ID之后,这个地方就是等于驱虫嘛,其实这个操作是不是等于的是吧,哎,这种方式来,然后最后你直接看到ID,因为这个查出来的就已经是驱重的ID了,你带了。那你想想半是不是他将这个ID的一个驱虫工作交给了。五个为调色去处理啊,对吧,因为我们现在设置的是五个嘛,他将去除工作交给了五个,五个去去做的来走一下。他这个地方跑了两个任务,你看他会跑几个任务啊。那这个一般涉及到这种子查询呢。
04:03
你想想看,他在此产品的结果上再做分析。他也是多个交换任务吧,多个交换任务。刚才是那个58秒,58秒。这是其中的第二个。用了是吧。你看他第二个任务分了几个啊。是不是五个来处理啊,刚才上一个是几个。只有一个了。上一个也是两个任务,但是第一次任务是五个,这没错,但是第二次的任务是一个吧,哎,因为你想想看的,刚才我们分析了,它只能交给一个reduce来处理啊,才能去除。
05:08
这个时间会比刚才那个要稍长一点,稍长一点,但是它是不是做了更好的一个什么负载啊。时间是长一点,时间肯定会长一点,但是你想想看,如果数据量很大的时候,你用去去融的时候,它会怎么样啊,把最后那一个reduce。撑爆了,哎,撑爆了,你想想看你这种驱重操作,那你写是不是加载到什么一个集合里面,然后去遍历啊,它有没有相同的呀啊有或者说往S里边放类似的是吧,往S里面放啊这种,但是这个无论你是往S里边放还是放到集合里面,然后一个一个比较,它都是把所有的一个。数据就是全量的数据交给了一个reduce策法,也就是说刚才我们100万条数据,你通过这个这种方式啊,它都是干什么,这100万条都会经过同一个维流侧,能理解这个吧,哎,都会经过同一个维流侧,但是我们用过带以后呢,因为它涉及到紫查询,所以它会多多任务啊,会多任务。
06:22
那这种方式,他在执行这个最终查询ID的时候,或者说做这个驱虫操作的时候。对吧,我们是不是子查询里边帮我们来做的这个去重操作啊,哎,子查询帮我们做系操作啊,这个子查询的时候,他是不是将所有的数据分发给了。五个瑞色呀,哎,分发给了五个色,也就是说他这个驱虫工作是由五个人来做的,而不是一个人。就是100万条数据啊,它会。将近分发给五个人来做,一个人处理的数据量很小的很小的。虽然会多一个叫本来完成是吧,这个叫本呢,就是这个子查询,这一个叫本,但是数据量很大的时候,我们是愿意牺牲这个时间的。
07:10
因为你数据量大的时候,不是什么时间不时间的问题了,你用的这种方式来。任务就有可能数据量太大的时候,任务就跑,跑不起来都有可能,是不是啊,跑不起来的内存撑包了,因为你往set里面放,这set是不是它虽然是干什么,它是一个不可重复的,那它是不是也放在内存里边的呀,你数据量很大的时候,内存还是放不下的,直接给内存冲爆了,冲爆了啊,所以这种方式就数据倾斜的这种一定要避免的,哪怕你时间会久一点。这都无所谓啊,这都无所谓,因为你任务能跑下去,你一旦数据倾斜了,你任务很有可能就挂了。你你任务都挂了,你还说追求什么速度快,没有什么意义了,是吧?所以你一定要理解,不是说哎这个执行的时间长,这个就不好,这个就不好,在数据量大的情况下。
08:08
一定是采用这种半线来驱动ID的。
我来说两句