00:00
好,接下来呢,我们思考一个问题哈,上一个案例当中啊,我们是al表和生这个产品表,这两张表进行招引,在哪招引呢?我们是不是传到reduce端进行一个音。那大家思考有问题啊,在生产环境下,比如说这个订单表每天呢,2亿多条。算比较正常的。那你这么多订单表最终都要汇总到radio?那会发生一个什么情况?比如说在指六端,它的数据量非常庞大。对吧,那你一个能完成吗。够呛哎,容易产生这个一直卡死的状态。或者说运行的时间非常久。那怎么办呢?吃烤鸭怎么办?我在端这个非常耗时间。那我谁多呀?我说卖鸡蛋多呀。我的这个个数也多,而且一个里面只处理128兆的数据,就相对来说压力不是那么特别大呀。
01:02
那我能不能将这两张表的合并操作放到map阶段来完成,避免在端进行表的一个招新操作?这样效率不就高了吗?那思考一下,我如何来将这两张表传入到map阶段,进行一个专业承诺。那我这两张表哈,那每张表是不是都是切片的时候单独切片。那单独切片就决定了他未来进的是不是map test1,还有一个map test2。因为他俩就不会进入到一个map task里面,那他们两个怎么招呢?对吧,是这个问题吧,好,那我就你看能不能这样,我将其中一张表缓存起来,缓存到一个内存。然后呢,我把这个凹表。哎,正常的加载到map task1。迈步探测。然后我执行map test的时候,我通过内存传进来。
02:04
对吧,我这个内存里面存的是零幺,诶,比如说放到以集合的方式存储,然后小米。然后零二华为。零三格力好吧,已经存起来了,存起来之后,接下来我这个map,我把这里面的值一行一行便利,比如说取出第一行过来。那取出第一行之后我拿啥呢?我把这个PID传给你对应的内存这个集合,比如说你是哈希map。对吧,哈希麦克我传进去,我传进去K,我是不是就能取出来对应的值。取出来对应的这个值之后,那我是不是就可以拼接这部串拼接到这里面。这样不就完成了对应的噪音操作吗?好,那大概有个思路之后,那下面我们来看啊,呃,刚才已经解释了啊,比如说reduce噪音操作呀,在企业里面开发的时候很容易产生数据倾斜,原因就是因为大量的数据都在radio端进行一个汇总,那这样效率比较低,那通常的解决办法呢,就是如果能在map阶段完成的操作,我们尽量在map阶段把它实现,那本个案例呢,我们就是采用map招来重新再实现上面的一个需求。
03:15
嗯,那这个呢,是map噪音使用场景说map噪音呢,适合一张小表和一张很大的表,那为什么说是一张小表呢?你想想我们要把一张表缓存到内存当中,如果你这张表特别大,内存是不是就爆了?对吧,那我们这个产品表啊,呃,商品表相对来说非常小,所以说在内存里面没有任何问题啊。那下面这是业务逻辑啊,没啥说的,看具体实现,怎么实现把一张表缓存在内存当中呢?那步骤有这么几步啊,第一步,在map的set阶段将文件读取到缓存集合当中,那读取的前提是你得有一张缓存的表,那缓存的表可以在驱动当中。进行设置,比如说你看如果是本地文件file e盘,什么catch pd.p.t如果是ADS的话,那路径AS1,嗯,开度102,然后对应的KPDF啊,Pdt。
04:13
哎,这是成熟的方案啊,OK,那下面看一下三个需求对吧,三个需求仍然是订单表,产品表这两张表进行招引。诶输出的结果呢,跟上一个需求也是一模一样的。把这个PID替换对应的。那只不过呢,现在我们这次要求在map阶段进行一个完成。再来看详细的步骤哈,第一步,首先我们先写驱动类。在驱动当中加载缓存文件,这是第一步。第二步,我们现在啊,就不要reduce阶段了,我根本就不走reduce,我在map集团就已经招聘完了,我还走什么reduce,那这块怎么取消掉reduce呢?直接set reduce text个数为零。之前咱们也设置过吧,而且还给大家debug讲的时候回忆一下。
05:03
啊,那这是这两步,这两步完事之后,那接下来看一下到map task,首先进入到这个set up方法进行一个初始化。初始化干什么事啊,你这缓存了一张表,我是不是得取出来呀?对吧,哎,取出来,那在s up里面取是不是最合适了。对吧,因为setup执行完之后才执行Mac,那我先把这个我要取的表加载到内存。那获取缓存文件我得读啊,哎,读这个缓存文件,缓存文件路径在这呢嘛,对吧,哎,正常读读过来之后,那我还是正常的一行一行的去读这里面的内容,哎,读完之后切割。对吧,切割之后把它放到集合里面。那这个集合KVK呢,Pidv呢?Name。没问题吧,诶放在这里面了。好,集合里有了之后,关流结束,比如说准备工作,准备完毕了,那接下来map开始,那这个是谁的map,是不是order表那个map task。
06:04
对吧,因为我这个PD表是通过缓存加载过来的,那下一步我就开始读order表里的内容。来获取一行对吧,切割啊截取,然后获取PID。然后获取订单ID和商品名称,那这地方很重要啊,先获取PID。获取它干嘛呀?我现在是奥德表,我获取PID,我获取PID,我是不是就可以从这个集合当中取出来对应的P了?因为只要我把我对应的PID传过来,对吧,PV的方式我就能取出对应的Y流值,那我就拿过来了吗?拿过来之后下一步把订单ID商品名称也拿到了,我说一拼串。P就OK了。哎,就是这样一个流程哈,那再往下拼接,最后写出。这就是整个我们实现的一个思路,那接下来呢,我们就来写一下代码哈。
我来说两句