00:00
啊嗯,刚才呢,我们讲的这个reduce啊,它有相应的自己的缺点,那么我们推荐呢,采用这个map。在map端对这个表进行招音合并啊,减少这个re端的数据压力啊,这么一个情况,那下来呢,我就来介绍一下啊,如何采用在map端对数据进行一个招引。Mac上呢,适用于一张十分小,一张表很大的场景有。也就是说,有一张小表和一张大表。啊,往往这个小表呢,就像这种产品表。啊,或者这个用户表啊等等,它不是都不是很大啊。都能把它缓存到内存中啊,那另一张表呢,是非常非常大的,在内存中你存不下的啊。这种情况啊好。那么思考一下,在re端处理过多的表啊,非常容易产生数据倾斜怎么办?我刚才也说了啊,就在map端缓存多张表,提前处理业务逻辑,这样增加map端的业务。
01:00
啊,减少水定酸的压力,尽可能减少数据倾斜啊。因为同时呢,这样呢,呃,不光是你这个招人这个过程。当时你传输的冲击量是不是也少了?啊,也说IO的过程少了。我之前说过,这个最废时间的什么过程?啊,是不是suffer过程,Suffer过程是最费时间的啊,所定要注意避免这个沙。那具体的办法呢,就是在map set up阶段。这个。你知道吧,是不是初始化的时候用它啊,在这里面将文件读到缓存集合里面,那我们就给它存到哈希。Map里面去啊。存到这里面去。在驱动函数中加载缓存。哎,你要提前将这张表转存到这个job里面去。缓存进去。就是通过啊,这这种方式就可以啊。那下来呢,我们还是看这个麦专这个案例。
02:01
呃,这个表啊,跟刚才这个reduce这个案例呢,是一模一样的,都是这个订单表和产品表。那最终的要求呢,也是一样的要求他实现。这个效果啊。两张表格合并。外部造影摄影小北情形飞机。你需要怎么做呢?首先哎,这里面要求你先写它的驱动。的驱动干什么呢?将你这张表缓存到这个job的内存当中。画出去之后,然后接下来这地方是设置它的reduce个数为零,上午的时候我介绍过。啊,将这个reduce定态个数设置成零,那是不是就没有reduce就到了。那其实也就减少了你这个沙过程,那么IO过程也都省了,效率非常之高,在企业开发中也是大量的使用的。大量使用。要注意啊,这种方式啊,非常好,我只开麦机的。
03:04
Reduce,我不开。那读取缓存文件,那就说你怎么读这个缓存文件,那这个读取缓存文件呢,其实是在它的map方法啊,或者map阶段处理的,因为只有map阶段嘛,也就是已经干掉了。在他的setup方法中做什么事情呢?获取缓存文件。循环读取缓存文件的一行啊。看这个内容有没有读完之后呢,要对这行进行相应的切割,其实就是为了封装啊,然后缓存到这个集合里面去。你看这个呢,是获取这个文件,获取到文件之后,你就可以读到这一行了,那读。那这一行呢,我是要把它切割成一个一个的字段。切割完之段,我要封装到。那就相当于进行一个缓存。啊,然后最后把这个流关掉就行了。好,那剩下的在map方法中,那就简单了,因为你这里面缓存了一张表,对吧,缓存了一个PD表,那你这里面能读到的是。
04:09
两张表,注意拼接。这种。片拼接都熟吧,对吧,哎,碎片拼接那就完事了。就实现了。在map阶段这两张表格。所以说那就相当于在。Set up阶段。挽出来一张PD表。剩下的事儿,所有的合并都在卖的方法中。甚至获取行截取啊,获取订单ID啊,获取商品这个名称。拼接输出。这边没有什么技术含量,就是一个拼接的一个操作。这个呢,就是这个整个案例的一个分析哈。
我来说两句