00:00
行啊,下面我们来看啊这个commander的案例,案例有这么一个需求,统计过程中对每一个map test的输出进行局部汇总。以减少网络传输量。即采用command功能啊。这是描述了一个事实哈,需求是这样的,这是输入数据。期望什么呢?期望commander输入数据多,输出时经过合并输出数据降低。这个可能描述不明显啊,我直接看这张图吧。睡觉。输入的是这个。啊,我希望呢,他在内部的时候切完之后进行一个合并。输出是这样的。啊,这个是控制台上的一个打印啊,控制台上打印。能不能看清楚啊,呃,这是一个一个的单词对吧?啊,班长你好啊,正常切应该是班长这个就得切除四个吧,啊,班长就得切了四个啊,都是一一。
01:04
那传输量呢,是超级大的。啊,那经过这个。合并combine合并之后,我希望的是你combine输入进去12个直接你查一下啊,12个单词,你查一下是12个网。三二这是五了吧,啊,五加一六。26132吧,对吧,啊12个,那我希望它输出的是五个,也就说最终是五个单词。啊,这是基数系啊,后来呃,后面会有一个专门营销给大家讲了一个基数系。啊,记录它,呃,输入的个数,输出的个数。进入combine之前,进入之后五个。那好,那这个搞定,你看这个它的收入多少。卖12。这是四。啊,一共走了这么多字节啊,这里面呢,看到的信息很多啊,啊信息很多。
02:00
好,方案一。啊,这里面有两个方案啊,一个方案呢,是增加一个这个。Count commander啊,我们是以word count这个单词这个案例为例啊。继承radio。复类之后呢,在这里面做什么呢?单词统计汇总,将统计结果输出,其实跟正常word的那个。啊是一样的啊,做的招数都是汇总输出。那方案二呢?超级简单。干什么呢?直接在这个驱动类中。设置一下这个是谁呀。直接是my word count的他的reduce。就搞定,一会儿你写这个的时候,就说你写完之后发现他跟你原来写的word count video设施。一模一样。那好,那我们来看来具体下剩下的案例哈。首先来到还是我们这个万能的word count来到这儿。
03:00
非常强大法律功能。呃,往下看有没有特殊的啊。没有了吧,啊,目前没有哈,还是这波放我们先运行一下啊,先运行一下看看效果啊。E盘有没有数据啊。输入的是input word啊OUT1对不对。运行。结束了。来查看一下。搞定吧,哎,搞定搞定之后呢,看看什么呢。看一下这个平台。看控制台。这块combine input output有吗?这块。数据没有啊,哎,这块就没有。那也就是说他没有执行这个combine这一步,那没有执行这一步,你看它叫map out put record12对吧?啊。
04:01
那map输出完之后,是不是才进这个commander进行合并?现在能能能看的还有印象吗。你看下这个原理图哈。摄像头。你是map结束之后,做一个这这地方这一个输出输出,那是不是在这个位置才进行合并呢。啊,在这个位置进行合并啊,所以说还没到这儿呢。那这时候他才输出一共是12个单词,那你看看是不是12单词。看的收入。你不的玩了。跟我那个一样的啊,班长你好。这是六个12个。那下面呢,我们来合并啊,这个加一个commander啊功能之后,看看它又是怎么样的一个效果啊。我们写一个。写一个这个类叫。
05:09
相当于在map阶段进行一个提前合并啊。那他需要继承。也就是啊。那reducer它的key和value分别是什么?输入的key是不是就是map的这个他和他呀。那你传进来的是?这个单词对吧,那后面这个是。那这个是test是不是单词的啊,那下面是单词的个数,那最终它输出的是单词为keyable value啊输出。那在这里面重写也就方法。
06:00
那在这里面做什么事情呢?你是不是要提前合并那个单词啊。好。Y6。这个是contest。啊,提前合并,那就是第一步呢,要累加求和。来加。然后之后呢,第二波洗出。那累加求和,那就循环便利呗。符号一起啊一起,那把这个单词拿过来来。那我们遍历的是要累加求和,你是不是得有一个和呀,还有没有和?那可得加上。Y6。value.get是获取这个值啊,啊个数值啊,那之后是写出那也是contest点啊value,那这个K是。
07:09
单词value是不是这个some?我们要定义一个上又一个in。嗯,那这个是V。拿出去了。那V点。Set什么呢,三三。那这个呢,正好就是可以。搞定。这就写完了,写完之后呢,你要在这个驱动类中啊,关联一下这个word count。怎么关联呢,设置一下来到这儿啊,来这在里面设置一下。点。
08:04
这里面填的就是。买点。这就OK了。那这里面啊,那我看一下啊,稍后给大家第八回一下。干掉。呃,我debug一下我在哪里呢?我在这个commander里面打个断点。进来,我在这个里面也打了你。外部里面也打了三点。啊也打了,那问大家你说我这个debug我会先进到哪里。卖嘛,对吧,之后呢。呃,这个word count commander之后。Word上的这就是吧,OK,那我们来进一步验证一下啊。又结。第八个。
09:01
走进来。那首先进来的是map对吧?啊,证明它是map map之后呢,那我这断点就取消了,那下一次应该进入的是。ER吧我。掉了。再往下这个是。你看这是不是其中有个合并的。看到了这地方吗?哎,合并combine runner。对吧,掉啊。是不是就到command了,哎,相当于在map test阶段啊,进行了一个提前的隔离汇总,你看一下传进来的key副班长啊,那个呢啊,Value没没出来啊,你可以在这循环。
10:08
下啊。好,出来了。就合并完了啊,提前进行合并,那我这边这个commander结束之后,他要到哪。是不是到reduce了啊,最终的reduce啊。这是。刚才那一下是不是也能证明呢,这在这呢啊,是不是先command之后才默规定吧,也就说你看这地方啊。是你前面这个合并完事之后,是不是才调到这个末的归并啊,哎,这块注意哈,掉它。好,那这块呢,干掉。开始前进,走。是不是到最终多射了,哎,这块才是到这德射哈,啊干掉之后就可以跑完了啊啊走。
11:06
这是整个一个流程,那我们来看一看效果。这边结果正常,那还看啥呢,看一下控制台。按压控台的数据。后台还是这个MAP6框架,输入输map的输出还是12个,那你看这块。是不是commander input的时候变成了12,输出的时候是不是就变成五了,哎,变成了五个,那它传输的时候是不是传输了五个五个单词啊,那你上之前你要没处理的话,就传输12个。那这效率这个变化还是非常非常明显的啊。这个意思啊,这个就是commander一个案例。那下面啊,再换一种方式。再换一种什么方式呢?刚才我们采用的是方式一啊,我们又自己定义一个类啊,继承了这个reducer,然后并重写这个reducer里面的内容。
12:04
那第二种方案呢,是你不需要这么写啊,直接用它就行,为什么这么说来我们看一下。这是word值,就是你可以比较一下啊,定一个变量循环累加set写出对吧,那你看。你这个写的,你写的什么?你写的看看好了,这是commander。变量累加求和。一模一样,哎,一个字都没差啊,那我们就不需要我们再重写。那怎么办呢?我一到这个driver里面,这个地方不关联它了,关联谁呢?Word。看呢。直接啊,Class已保存,那我们再来预习一下啊。
13:04
右键。变形。执行完了啊。讲了看结果。OK,最终结果没有没有影响啊,那看一下这几个控台。控制台一样是它,那在这一块依然是输入12,输出变成了五。啊,你看的输入也变成了五,输出也变成了五。这个是非常提高效率的哈,这就是其中的一个优化手段,在面试过程中,他最爱问的就是你如何对这个开框架啊,采用了一些优化措施手段啊,有哪些方式能提高这个high的运行效率。这个就是其中啊比较重要的一种一种。方式啊。
我来说两句