00:00
好,接下来呢,我们来看一下combine test音不通啊,为什么有这种切片机制呢?来看一下这个默认的这个框架,它有什么问题,默认的这个test音不通骂呢,它切片呢,是按照文件一个一个去切,对不对,它不管你多小的文件,它都会单独给你切个文件。啊,切一个片,那之前举个例子啊,1KB。1KB,如果你有100个,1000个,1万个,甚至1亿个小文件,那你得开启多少个Mac task,那你整个集群直接就瘫掉了,所以说啊,在这个大数据场景下,这个小文件问题是非常大的一个问题啊,后面会给大家详细的去整理一下如何来解决这个小文件。那其中这个就是一个解决办法啊,采用这个combine test,那就来看。Command text发呢,用于小文件过多的场景,可以将多个小文件呢,从逻辑上划到一个切片当中,然后这样呢,多个小文件交给一个map text啥意思啊,你说多个文件统一进行切片,那并不一定交给一个半啊,可以交给多个。
01:01
这个呢,看你是切割成,就是整体,这些文件加在一起,它是否大于你的切片,如果大于的话,那就可以多切。那下面这里面有一个参数,说虚拟存储切片最大值的一个设置啊,那这个参数呢,其实是控制这个切片大小的,那那这个说这个切片大小是四兆,那是不是一定是四兆呢?还不是啊,这里面啊呃,相对说要复杂一点,它中间有一个叫虚拟存储的一个过程,那下面来看一下啊,看一下这个机制,一张PPT全搞定啊。那假如说刚才这个值啊,我们设置的是四兆,那他会怎么做呢。它分两步,第一步呢叫虚拟存储过程,比如说啊,前面输入端呢,有四个文件,第一个文件A呢是1.7兆啊b.T加T呢5.1兆,3.4兆,6.8兆,那他先这样去做,第一步先拿着第一个文件跟这个四兆去比,你这不设置的四兆吗?你看小于它吗?小于它来单独单独放一份对吧,来单独放一份,那再来说我这个是5.1兆,5.1兆大于大大于十兆对吧,但是它小于两倍的。
02:07
是的。对吧,哎,小于两兆是吧,那怎么画呢?它会将这个5.1兆除以二。哎,切割成两块没毛病吧,哎,两块,那再来那3.4兆。它小于四兆,那单独画一块没问题,那6.8兆,6.8兆呢,仍然是大于四兆,但是它小于二乘以四兆也小于八兆,那我是3.4兆一一块,3.4兆一块。除以二,那最终就会形成这样的一个虚拟存储过程啊,记住哈,这是虚拟的,并不是真实的。他把这个先切割完,处理完了,放在这,放在这之后,他下一步说判断虚拟存储文件大小是否大于它,然后大于则等于,嗯,则单独进行完成一个切片,啥意思呢?他这样去说啊。呃,如果不大于,则跟下一个虚拟存储文件进行合并。
03:01
就这意思,你看这两个它文件它是否大于适道呢,小于小A之后,它会跟下一个进行合并,那下一个合并它俩加在一起多少。是不是就已经大于四兆了,哎,大于四兆它俩就放在一起了。那同学该问了,那我这你现在是海哥你这么放的这个顺序。那他万一他不这么放呢,他这么放呢,说1.7啊,1.7跟3.4放在一起,有没有这种可能。有,那取决于什么,这个顺序取决于什么呢?取决于你文件名称的字典顺序,它会对你这个文件名称啊,按照字典顺序进行一个排序,排完序之后,然后让他们之间产生这种相连挨着这种关系啊,所以那我们这个正好是字典顺序,那它就会按照这个去切。对吧,那这个切的话,它就会这样说1.7加它。诶大于四道,那放在一块,那二点五点,嗯,2.55加3.4放在一起,又来一张三点四加3.4放在这,那那最终呢,就会形成三个切片。那这样去做的哈。
04:01
啊,那这个做完之后,那下面我们来真正的实操一下,看一看是不是他真的按照我们说的这种方式去做了哈,下面这个文字啊,就不给大家读了啊。直奔这个阿里实操,阿里实操内容是将输入的大量小文件合并成一个切片统一处理,那这里呢,给大家准备四个小文件,那这个四个小文件我在。输入文件夹里面应该有。Input input。Command。找一下啊。嗯,对吧,这有四个文件,那四个文件的大小看一下分别是1.7啊,5.1啊,3.4,这个应该是6.8啊,啊这四个文件,那这四个文件我们就来读一下它啊。那这个先放在这儿,怎么来处理呢?我们打开这个地方。我们之前是不是写过这个word count呀,这个word count很有用啊,呃,我们再创建一个包吧。
05:00
Package,再来一个com test input。你说啊,然后将这里面word count3个类拷贝过来。哎,同一粘啊,一定要是统一粘,统一粘过来之后。来到driver里面。修改一下路径,那我这个路径啊就变了,这个输入路径就变成它了。好拉过来输出路径呢,我们这里面变一下output。Combine c1啊,Com一行吧,哎一那现在啊,我只是改变了一下它的输入路径,诶,但是我并没有设置它的一个切片规则,按照什么切,那它默认按照什么切,它默认肯定是按照text input方法切,那如果你按照text音普发的切,我这是四个文件切割出几片。
06:02
那是不是四片呢?那就应该运行四个map test来看一下是不是啊。右键。执行。执行完毕了,那执行完毕啊,借着这个机会啊,正好给大家,呃,教大家如何来看这个日志,呃,从上往下走看哪呢,首先看这。这里面说number of splis是不是四片呢?诶跟我们想象的一样,因为它默认的用的是text input这种欺骗机制,那它有多少个map task呢?你往下看。看这。看到这吧,啊,Map test,那这是第一个map test,那再往下走,这是第一个。然后往那走到这这个呢是第二个map task,哎,这里面有对应的执行日志再往下。这是第三个map task。
07:00
再来。第四个map task,你看一共四个map test,那再往下,下面这个谁呢?下面这个是,你看中间是RR呢,就是reduce对应的task,那reduce task只有一个啊,只有一个,那为啥reduce task只有一个呢?默认情况下你不设置这个map map task,这个reduce task,它就是一。后面呢,我们会给大家去,呃,设置这个test啊,设置多少个比较合适啊,都给大家去说啊,先有印象,那默认值呢,就是一个reduce test,那这里面对应的四个ma test,那希望呢,我们就来。改变一下,怎么改变呢?我们首先改变一下它的切片规则,用这个combine test把它拿过来。那这怎么改呢?在原来这个代码基础上找一个位置找这。哎,稍等一下啊。飞过来之后呢,Out加回车倒一下包倒哪一个倒长的对不对,哎,大家都喜欢长的啊啊拿下,呃,这也是他倒过来,倒过来之后还差一个参数,那是这个。
08:09
虚拟存储大小这个设置,那这里面我们就先来一个四兆试一下,四兆的话,我们刚才计算的时候它是多少呢?是不是应该切三片呢?啊切三片那我们再运行一下把它拿下,换成二看它是不是三片。好,执行完毕,我们再来看一下日志啊,拿到上面。拿到上面看一下,你看number of spli是不是就变成三了,哎,三片,那再往下上面map task个数一个。两个。三个。然后下面是不是radio test了,哎reduce test,哎三个map test,一个radio test就结束了,所以说这个呢是可以控制的,那同学说这个你这个视兆啊,从原来的这个四个切片变成三个切片,其实没有多少进步啊。
09:06
对吧,这个没有减少,减少这个ma态的太多,那如果你把这个虚拟存储设成20呢。对吧,你四个文件啊,三兆的四兆的,五兆六兆的,你加在一起都没有20。那它会切多少呢?对不对?哎,我把这个值改一下啊,这是20兆。嗯。长加D复制一下。变成20兆,那这个变成三,那20兆的话,按照我们的计算规则,它是不是就应该切割成一片啊,好试一下。处理完毕了啊,这个比较快啊。那这里面number of spli就变成了一片啊,一片,一片之后几个map test呢?一个map test。
10:02
下面一个radio test,哎,这就结束了啊,所以说这个combine test input啊非常有用啊,后面呢,我们在处理这个小文件的时候啊,经常使用,尤其在生产环境下啊,用这个command泰膨的也是非常多的。
我来说两句