00:00
好,呃,刚才呢,我们把这个代码已经跑通了,那下面呢。啊,我先演示一下这个错误哈,呃。先演示一个错误,什么错误呢,把这个格这一块呢,我先不写它看啊,我先把它出掉。先注释掉,然后运行一下,你们看看会报什么错误啊。右键。运行。咋了吧?报什么了呢?来瞅瞅。放了一个空指针。异常啊,在比较的时候报了一个时针。为什么空了?其实你没有设置的时候,是不是就是这个force,哎,也就是说。在你。在这地方,你这地方没有给他传一个错的值回复来啊。
01:01
在你这地方没有传值,它实际上所有的值都给你支成了空啊空,那他肯定报的就是公子针啊,这异常啊,所以说这地方呢,千万别给我遗漏了哈,把它恢复过来,OK,这是这个处。那下面还有我们如何来B一下,看看这个方法什么时候调用的。顺便呢,让大家了解一下reduce是如何通过的啊。我们来到这三。右键。啊,别先打断点,先打断点。在那个里面打个断点啊,然后来到这个里面打个断点就有了map map就不用看了吧,是不是很熟了。然后呢,在B对象也不看了。加点数据啊。这回把这个数据量加上来,否则不好看。
02:00
Into的word。Good。在这。在这里面我加点数据量,看我就是一个复制啊,只是将这个订单二的里面的数据是不是增加了一些。他几个订单号啊,一个两个三个四个五个六个。七个对吧,七个订单二两个订单三,一两个订单一对吧。就是纯是增加的数据。右键。Bug运行。走起。走到一下就走到这了吧,那走到这说明什么?说明哎,它是不是在reduce之前呢。对吧,没有一下进到reduce吧,我也打断点了啊,并没有进去,那好走到这之后向下走一行。1228是订单一里的228呀,那下面再来。订单一,订单里的33块八,你看这钱啊。
03:05
心的了。刚才呢,一个是228订单一里面还有一个是。三块八。啊,这个33块八啊,不错,25K没问题了,我觉得。眼力这么这么好是吧。好,那来到这之后往下走,比较判断比较判断,看什么情况。他是不是认为它相同啊,ID是不是就相同,就是一啊,不都是一吗?你看一。你是相同,相同,你只好往下走走。下。Class是吧,比较吧,哎,你再往里进。这是到哪个reduce实现类,这不还是比较吧,再往下走啊,这是一个方法两个方法三个四个。
04:03
出去了啊,出去之后它是返回的是处啊。这地方你看啊,他比较完之后,他这地方给你返回的是一个。这六下进去进去。哎,是不是radio吧,Radio里面它那他刚才是不是返回来一个数啊,那是不是得进来。就进来了啊,进来之后来进到这个方法呗,你这个方法先get k,那你获取一下这个K值,你看是多少。知道吧,哎,再往下走出去。那再进是不是Y6了,进Y6了,那你进去看Y6等多少。这是不是一个迭代器啊,不。好看出去。再找。
05:04
洗完走走走走。修来的这个比较辣,哎,刚才那个小辣又来了,又来了一看。1.338是不是最后一,呃,第一组的最后一个啊,然后再往下呢。第二组的。7724了吧,啊,你往下看啊,往下看,注意看走走。现在是负一,是不是不是零啊,不样了吧,进。放了吧,哎,是不是放,哎记住了啊,是false出。这里面有一个汉子帽。就是下一个面是否还有数据是有啊,但是呢,Next is the same是否相同呢?不相同对吧,那不相同能不能走这。
06:01
你看这个是满足要求处是吧,那这个是不是false,那是不是肯定是false。说出来了,呃,汉帽可以啊,这种。这是一堆。往下走下输出下下,那你看一下这地方哈,叫Y6,这个叫反系数化吧。是不D加D吗?第civil是不是反系的话,刚才还应该有个key吧,这呢是不是key是反系的话,那现在就能证明一个什么事呢?在你map阶段往出写的时候,是不是要系列化,系列化可以系列化外流,那现在在reduce端这个数据是不是反序列化的过程。这能理解吗?呃,因为这个map和reduce,它在集群中不一定在一台服务器上。啊,也就是说map和reduce,它可能是在不同的服务器。
07:02
这个不难理解吧。这是反击的话,往下下。再往下走。小级像这些代码呢,你们不用晕啊。看不懂没问题啊,往下走呗,对不对啊,核心代码就这几个嘛,比较的地方判断是否相同下。香。还是不想挠这种。啊,出来了,出来之后往下看,一个是27224,一个是25228对吧。往下看啊看。谁等于几零相同了吧,走。下走啊,这块比较相同,哎,居然相同,那再往下走。再找,再找。再找。那又来到这儿了,对吧,又来到这儿,那你看。
08:03
二。二在这。相同。相同。这个肯定上下都相同,一个是汉字帽,是否有数据有这个呢?相同的,哎,往下走。就来这儿了,你再往下。走。那你发现一个什么道理,他有没有在这在这个期间进reduce。看啊,你再看再来。这块是不是全相同啊,你看又来这了。这个能理解的吗?这就是所有的数据过来,它是不是一直在攒呢,你在找啊,下一个数据跟他是否相同对吧?哎是否相同,而且下一级是否有数据,他不断在比较再来。
09:02
到这,那这个呢,就是next。函数对吧,啊,还是相同再走呗,它只要相同它就不进入到。Reduce,他要把后面所有相同的数全站在一起啊。你想想进入到你这个后面这个拿这张图啊。调啥?就拿这个原理来说。他最终规定完的数据是这种数据,这个数据规定完。在这个缓冲缓冲区里面,它所有的数据全部都是有序的,这能理解吗?你看啊,前一级拷过来的数据是不是都是有序的。但是他是从不同的这个map跑过来的,是不是还得最终进行一个总的排序啊。啊,否则的话,他们两个之间,你这么感觉是一个分片存在的。那最终他对所有的数据都要进行一个排序,排成一个大的啊。
10:00
大的文件归定排序,排完序之后,它会不断的跟下一个去比,只要下一个相同,它就展着等。哎,等待下一个再跟他不相同的时候,就是把前面的都跑过来了。看。那这块啊,它会将这里面K相同的一组分别放在这里面去。那么这个分组排序就是想办法,假如说这两个当中是一个,并对象只有某一个字段相同,或者某两个,某三个相同,但是所有的字段不相同的情况下。我可以伪装成让他。认为是想。干这么一件事,那他最终不就能传到里面去了吗?抽了吧,好,那回来再回到这儿,那现在仍然这个二,这个还没有进到这,也就说你看我这里面多设了几个订单ID为二的。走呗,来走。
11:03
最主要是比较,比较的时候,他比较了很多东西啊往下。这个回潮这个是吧。诶删了啊,终于要到了是吧,啊往下走。一说你就不行了是吧。来负一下比较,这不相同了。对吧,不往下走。啊。这次是不相同啊,他这个是差了一个啊,你看这回是上一个是三。算了吧,哎,他把上一组拿走了,上一组二拿走。他的再次行,它是进哪。像看没这回才进倒数68,哎,也就是。
12:05
是不是来到这儿了?这回能能深刻体会一下这个reduce进到这里面的数据的这个形。治了吗?它都是一组一组的value啊value。只有相同的key才能进入到这个reduce方法里面去啊。他在进来之前是进行不断的跟下一个K进行比较,判断它是否是一个哈。就是这个情况。执行完哈。这样呢就好了,应该是。最终呢,就结束了哈,所以说这个呢,Bug呢是必须必的要会的,否则的话,你对这个代码的理解呢,你肯定。你也不太上去是吧。这个呢,你玩一玩啊,看一看它这个数据变化你非常清楚啊,它最终呢,传到reduce的时候,它是按照相同P进入到一个方法里面去,都是在这一个一个的比较。
我来说两句