00:00
好,那我们看啊,假如说我们刚才所说的,如果说这个。浪值,上午我们所聊的接着上的,嗯,空气过滤掉这种方式,那是在我们使用量罩语器不要这个值的情况下,我们才能够给它过滤掉,但是如果虽然你是空值,但这个数据呢,我们还需要呢,那我们能给它过滤掉吗?那肯定不能了,对吧?啊,我们要,那如果说要的话,我们直接去做join,这样的话效率不高对吧?啊,那特别是不仅效率不高啊,它还有一个很严重的问题,如果说我们有很多空值,大家想在生产环境当中,我们数据量比较大,肯定会有多个videor。那么文因为我们按照一个ID作为group,它在分组的时候,就是说它指定的的key是不是就是那个ID在写mmr的时候,对吧?它得根据这个内容把它发送到同一个radio里面去,那么你为那的是不是为no的值,它都会发送到同一个reducer对吧?这种有可能会造成我们所说的叫数据倾斜,对吧?那某一个reducer里边数据量比较大嘛,其他的reducer可能数据量里面了。
01:18
比较小,哎,那这一个呢,跑的比较慢,其他跑的很快,那这个就叫数据倾斜,有一个或者某几个任务跑的非常慢,对吧,甚至都跑成功啊,这种呢,我们称为数据倾斜,所以呢,对针对于这种情况我们做一些处理啊,首先呢,我们看一个最普通的啊,就是说正常的我们不做处理的,我让他的reduce个数呢为五个啊,设置一下reduce的个数啊为五,接下来呢,我们直接去照引数据啊,最后呢,我们看结果。还是一样的,从这个空的有空的去level join我们的大表。对吧,两张大表进行一个照应,其实说实话100万数据啊,根本就不算大表,如果说真的生产环境当中的话。
02:05
但是对于咱们虚拟机来说已经够大。所以说大家不用担心,我说那我没有接触过这么大的一个数据量,那怎么办?在最后我们给大家安排的那个实战项目里边,我们就不用大家的这个虚拟机了,呃,换成阿里云,然后那个应该是有千万级的数据。啊,千万记得,因为平时我们做项目的时候啊,可能数量都比较小,因为去拟经他你数量大了,他根本就跑不了。对吧,根本就跑不了,没办法。呃,然后我们就看一下这个结果啊。
03:05
对吧,另外一张表里面去洗了,我们主要看第一次抓你的那个效果五个。好,那我们就看一下日志啊,还是切到我们的日志。看看这个日志啊。切到咱们的history,呃,MAP3,哎,这个不是,我们应该看前面。前面这个啊,你看啊,这两个东西它是属于同一个任务的不同阶段的,因为刚才我们是不是看到有两个mmr任务对吧?开始呢,是状元的任务,那我们点过来这边五个点开,呃,主要看什么东西呢?看它啊。
04:00
你定在这十八十三八十一十二,呃十八十三还好一点,那18还有一个八对吧,类似于数据信,也就是某一个呢,会比较高啊,然后呢,有的东西比较低啊,差距比较大,因为数据分布不均匀嘛,所以他们完成的时间呢,差距会比较大,那我们做一个什么处理呢?我们可以,那也就是说刚才我们所聊的,也就是nu值发送到同一个reduce里面了,导致了水机斜对吧,那我们想办法把这个nu值给干什么。给它分散到分散到其他的维硫C里面,对吧,那可以怎么去分散呢?把一个浪值,现在呢,你不做任何处理,它是不是按照自己的哈希值来就发送到,肯定发送到同一个reduce里面了,对吧?现在呢,我们要把它想放到不同的reduce里面,那这个怎么搞。可以怎么做?
05:02
有同学说给一个默认值mal,然后呢,这个字段是吗?呃,后面呢,我给一个12345,给个一还给二不好吧,应该给一个什么随机数对不对,我们要分散吗?给固定的,如果说我都给了一,那么就是还是进到同一个维六色里边了嘛,你肯定说这个钠纸给的东西呢,大家给的不一样,对不对,对吧?啊,那我们就可以这样看啊。装的时候呢,我们俩。如果这个东西为档的,我们给一个什么随数,但是你给的时候注意啊,假如说你比方说这边ID本身就是12345,假如说你给的随机数也能出来12345,能这样给吗。就是说我右边的这个ID本身就是什么12345,然后你给的这个随机数也是12345,能这样给吗。
06:01
不能这样给啊,你本来是照用不上的,你给之后把他们俩干什么装一上这个也是不对啊,就假如说这边ID呢,是12345,我随机给的时候写一个什么随机函数,对吧,我给什么abcd。就原本你是,那你是不是跟右边肯定照移不上啊,对吧,你在给随机数之后,是不是还应该保证它撞移不上,然后在这个基础上去分散数据金能听懂这个意思,你不能说之前人家交易不上,你随便给一个随机数,导致他撞一上了,那你结果不就错了,能理解这个事吧,我们只是为了分散对吧?好,那我们看一下这个内容啊,康C拿过来啊,就相对来说能够均匀一点,其实我们数据量还不够大,100万的数据量不够大啊,所以说你看不出来那么明显的一个效果啊,稍微能好点,而总时长可能比刚才要稍微长一点。76,因为就算数据倾斜,它没有新鲜那么多嘛,对吧,这是76啊,因为我们在判断这个东西是否一道,然后再给一个随机数的时候,这个东西要不要时间的,它也是要时间的,对吧。
07:49
等大家走完啊好,总时间呢,跟刚才其实差不多对吧,七十六七十一总时间啊,然后我们来看一下他们各自任务之间的时间,刷新一下,应该还是这个吧,哎,不对啊,再往前走,嗯,过了应该是还是一样的这个这一这个任务对吧?啊看下面的这上面那个是往另外一张表里面写的那个任务啊,然后呢,赵云的任务在这。
08:19
五个点开,诶不对呀,我刚才没有去刷新是吧,没有刷新,所以说刚才看到那个数据完全怎么样一样对吧?嗯,那我们看一下啊,应该是两组就对了,这就对了吧,嗯,C341又是一次C341对吧,我们应该看这个20啊,刚才又点了18,呃,看他点开。六是五个。是不是相对来说要均匀一点了,对吧,大家的时间呢,可能都增长了一些,都增长了一些,但是呢,比较均匀一些了啊,因为如果说你出据信息特别严重的话,刚才我们这个任务啊,第一个任务很有可能会跑不成功,对吧,现在成功了倒还好啊,那这个是不是比刚才那个数据要均匀很多了,时间上对吧,基本上就十六七,然后一个12,刚才是最高是18,最低是多少啊八对吧?啊,就是差距特别大的,这种情况下你要考虑,那嗯,大家都在一套集集群上去跑的,那更重要的问题就是数据量不同,那多个任务数据量不同,严重情况下那就数据信息,其实我们这个还不能叫数据信息,因为你总共才100万条数据,其实它还构不成生产环境当中的数据倾斜问题啊,而且呢,它只是里边的纳值,其实我们里面呢,有很多还不是nu值的,也就是说纳值发送到一块了,对吧,我们能看到,呃,对纳值处理之后有明显的什么好转,对吧,有明显的好转是这个意思吧。
09:46
这是我们所聊的第二种方案,对这个nu值呢,负随机数对吧?啊,但是呢,大家能发现呢,第一种跟第二种啊,都是跟这个nu相关的,万一我数据当中就是两个大表没有那么多nu呢,甚至说没有nu值呢,是不是存在更多的可能存在这种情况对吧?好。
我来说两句