00:00
好,我们接下来看一下他关于数据倾斜问题的一个处理。大家比较头疼的是,其实是看到这种合理设置这种字了,对吧,什么合理设置啊,什么根据情况而定啊,其实这种确实是要合定式是要根据情况而定,但是其实这种说了跟没说一样是吧,说了跟没说一样,但是我们主要看一下几种情况啊,你要考虑的几种情况首先是来通过。Input产生一个和多个map,那这个我们知道它是不是要切片啊,因为ma要切片。文件的一个总数啊,Input的一个大小啊,文件的一个大小啊,集群你设置的一个大小啊,是不是根据那个来推出来的一个计算啊,而且是默认是一个文件切一个吧,MR采用的text input form的时候,它是不是按文件来切分呢,对吧,好。然后还有第二个就是说他的一个卖数是不是越多越好,这不一定吧,凡事不能就单独的去说这种事,什么越多越好,越少越好,还是说又来了那句话是吧,视情况而定是吧,最恶心的就是这句话啊。
01:12
然后他说他举个例子,他说有一个任务有很多小文件,然后每个小文件当做一个快,那这种是我们知道的小文件处理是不好的。对吧,小分店太多了是不好的,那其实在have当中啊。他自己用的就是这种合并,他自己就帮助咱们处理了这种小文件了,啊,这是第一个,等会我们看一下第二个第二个点。那是不是他说保证每个麦克快都接近于128兆就很好了呢?那也不是,那你要看的问题啊,就是说你看他举了一个例子啊。看他大家能不能理解,他说有一个127兆的文件,那这127兆的文件,如果说你只按具体的128兆一个,快来。
02:03
切分的话,它应该是交给一个班粉来做吧,这没问题对吧?好,他说,而且我们这个块啊,肯定是一个表是吧,在汉字当中,它你看啊,它有个特殊情况是什么呢?这个文件只有一个或两个小字段。一个和两个小时的。也就是说你虽然是128兆,但是它一条数据啊,字很小,你想想看,你卖果单处理数据,你脉火是真什么什么内容调用一次麦果方法。一行数据吧,那你一行只有一个或两个小字段的时候,那128兆会可能成千上万几千万条,或者有可能上一条都有可能吗?是有可能的,那就是一个map,你想想看,执行那个map方法要执行多少次啊。那几千万条有几千万条几千万字是吧,那这种也是不合理的。那你就是,那这个时候你是不是要对你看个表数据要有一个把控啊,它到底是什么样的,这127兆,它包含了多少多少行数据,哎,你要知道,那对这种情况,我们肯定是希望把这个127兆的数据干什么。
03:14
让它分成多个。Ma来处理吧,啊,Ma来处理,那你这个时候127兆分成多个,你有没有办法呀。你怎么你有什么属性来控制它这个切片啊。忘了吗?你想想看,切片大小是怎么来的呀,它是128兆是跟快默认是一样的,它是怎么算来的吗?它有个最大值,一个最小值吧,它是根据这个来算出来的,所以那你想想看,你想要把128兆切成多个块来处理的话,那你就调那两个属性嘛,那我现在。是要干什么,降低它的一个什么。快大小吧,切面大小吧,那应该调的怎么调?
04:04
把最大值调小了啊,调到假如说你想十到一个,那你调到十兆就可以了吧,是这样的啊,一定不能忘了这几个属性的关系啊啊。然后他说针对于这是两种情况嘛,我们第一个是要什么减少脉搏输吧,小文件过多嘛,它一个文件一个小文件过多,那在my mydu的时候怎么来处理这个问题的呀。合并文件是吧,Com input。Input方法的吧,用combine合并小文件的这种方式来看一下,我们have当中它也是一样的,小文件合并它也一个combine have input方法的,而且你看它默认的。来CTRLC默认的是什么?就是小文件合并的方式吧,它默认的就帮咱们处理了啊,默认的就是这样的,好,这是它出了一个小文件,那来复杂文件增加一个脉搏数啊,增加脉搏数,那你看啊,这是当时从MAP6到源码拿出来的数据吧,源码拿的数据,那你降低它这个值。
05:22
降低最大值就等于降低了切片的大小了,提高最小值啊,就等于提高了一个切片的大小,是这样可以来通通过这个属性来控制它的一个个数的。控制个数的。这个属性来。C。在have当中,无论是map还是它都是856兆。看见没,它都256的一个啊,Reduce也是我们后面讲到这个合理设置reduce个数的时候,也是它256,那你是不是可以通过这个属性来设置啊,切片的大小,切片的一个大小来控制的,首先我们来看一下这个语句,谁select新come的。
06:10
这个东西你现在。按照你注意啊,这个属性,你像类似于这种属性要生效。它一定是你自己手动设定map改成负一的。负一的时候它才会走,具体的去根据你是吧。文件的大小来分片的,如果你设置成三个之前,我们是不是设置成三个,那无论除了order。还有其他的一些特殊的什么抗的这种类似的最后一个语句的时候,它执行一个之外,是不是都会根据你设置的这个值来做。顺着这个纸来做,OK。那我们先看一下这个select count的心啊,这种方式。就是现在我们的。Map呢,还是用它默认的256吧,那我们EP没有这么大吧,那它应该是分成了几个map。
07:06
只会有一个吧,只会有一个。切片数为一吧,啊,它的一个脉搏数呢,也是一,因切了一个片,所以它脉搏只有一个,接下来我们要测的是,哎,我们把自己手动的把这个设置成100之间。那我们EP这张表肯定是超过100个字节的是吧?跑完了是吧,14条来走一下。设置成了100个字典,然后同样的再走一下什么这个select count这个语句。这个就是你可以自己去根据需求来调整。你要map往上增还是map往上降啊,根据实际的一个情况。多少个片,六个片了吧,它可以设定啊,主要的应用场景呢。你要知道这两块的一个内容。
08:00
啊,这两块的一个内容,一个是文件啊,小文件太多,小文件太多,那你要减少脉搏书法,第二个情况是什么。就是你这个文件啊,虽然是128档,接近128,但是呢,它条数太多了,因为我们卖阶段我们都知道,它是针对一条处理一次,一条处理一次,条数太多了,那也不好,它一个脉搏任务呢,就会很大啊,就会很大,所以导致整个集群的一个时间啊,消耗的时间非常长,那你这个时候要增大它的一个脉克数啊,然后下面这两个是讲的是具体怎么增大它脉搏数,它怎么减小它的一个脉克数吧。也就是说这两个结啊,是对于这两个问题的一个解决方案,解决方案这个就不用看了,后面的一个结果肯定是14万。好,这是我们刚才所讲的这个。复杂文件,一个脉搏树啊,脉搏数好,然后还有这个。
09:00
Reduce的个数reduce的个数我们知道它可以手动的设定吗?手动的设定是不是通过那个M6点这么点什么REDUCE4是吧,加一个S,你可以设定它默认值是不是负一啊,应该设定它的一个大小。如果你不设定的时候,当然有一些特定的语法,像这种。这种语法它最终交给一个溶解词来处理吧,那这是没办法,这是没办法的事,好除此之外,如果需要自己判断呢,你设置,你要么就是用这种方式。第二个方式,手动的去设定它的一个大小,我们已经用过很多次了,对吧,设置这三个五个都设过,如果说这个值是负一,而且又没有order by,也没有什么其他的一些特殊语法的时候,必须要一个来处理的时候,那他走的是这个路径。走的是这个逻辑,自己来判断,根据文件大小来的啊,它的一个大小也是256兆,来看一下它的一个默认值。
10:00
刚下的,他也是的。256兆,它根据这个,那就是每256兆分割一个吧,但是那文件如果特别大,它超过了一定的大小的时候,它也要做一个限定,那这也是有一个值,就是说你reducer整个集群当中,你跑这个map任务,它有一个最大值。是1009。也就是说你的文件大到什么程度呢?256乘以1009比这个数据。你的文件的大小啊,点size。比这个还大啊,比这个东西还大,那不好意思,那你最终为的个数只能是1009啊,109它对最大值有个限定,有个限定啊,是这样的,那它这个计算规则就是这样,采用小的吧,采用小的啊这种方式来的,那你要知道的是这两种方式。
11:03
是冲突的吧,是冲突的,你必须在这个地方设置为负一的时候,它才会走这个业务逻辑,你要这个知道这个,当你把这个手中的设定了之后,他就不走这个了。不走这个啊,就根据你自己手动设定的值来走。顺直来走的,那后面就是讲了一些什么。你要不要是越多越少还是越小越好的问题,越少越好的问题,那你就要干什么,根据你集群的一个情况是吧,我也只能说看情况来合理设定了啊,来合理设定了。
我来说两句