00:00
好,上节课啊,我们证明了时间戳拦截器它是有用的,而且在证明的过程当中啊,我们点开了对应的生成日志的文件夹,发现这里面产生了大量的小文件。你看这是多少?在50个页面,然后每个页面里面有这么多小文件。那还记得当初我们讲小文件的时候,它有哪些危害了吗?哎,首先从两个方面,一个是存储层面,另一个呢是从计算层面。存储层面主要占用的是内的内存,因为每一个小文件它都会占用NN150个字节左右,不管你文件多大。是这样的情况吗?好,那下面那么这个从这个计算层面,因为啊,咱们这个默认的这个切片规则是按照每一个文件单独进行切片。你只要是一个文件,那我就要切一片,切完一片,未来就要用到一个map task。进行来处理。那每一个ma和默认内存是一个G。那你想一想,这有几百个文件,你瞬间就要开启几百G的内存,那对于你这个资源呢,还是严重的浪费?
01:07
好,那下面呢,我们就来想一下如何来解决掉对应的这个小件问题。是吧,哎,那我们之前在这个配置文件当中还记得,哎,留了一个。配置吗?比如说这三个配置啊,我们是没有配的。记得吧,哎,那这三个配置到底是什么含义呢?我们来看一下HDFS,它到底是怎么解释的,对应的这三个参数吧。打开官网。过来之后h DS think往下找,找到对应的这三个参数在哪呢?在这呢?哎,这三个字。首先来看一下第一个值啊,Interval说30啥意思呢?Number of seconds,比如说30秒的时候to wait啊,Before,滚动文件比说到达30秒的时候,哎,它会形成一个新的文件。那就像刚才那个,每一个新增文件30秒形成一个,30秒形成一个。
02:04
那这个是不是有点小,哎,从这个时间上啊来说,那下面看这个啥啥音呢说Rose。比如说你个文件达到多大的时候,它会滚动形成一个新的文件。那多大呢?默认的是1024个字节,只要到达1024个字节,它就要形成一个新的文件啊,这是另一种方式,那下面还有一个roll count。也就说十啥意思呢?Number of events,也就说你的这个的个数啊,达到十个的时候,它也会形成一个新的文件,是这样一个情况,那我们希望怎么配置呢?比如说在生产文件当中,我们是不是希望这个文件啊能达到128兆的时候。是不是形成一个文件呢。哎,那这样不就没有没有小文件了吗?知道吗?哎,那128兆用哪个控制呢?就用这个控制,哎size,哎,也就说我们刚才这个配置文档当中,是不是这块配置它它是多少呢?128兆。文件。
03:01
好,那上面还有一个roll这个啥含义啊,哎表示呢,是30秒钟哎就会形成邮件。什么意思?你这既然有大小了,怎么还有一个时间呢?那如果你传送过来的一个数据,它始终就没有128兆,假如说它一共就10KB。那你非得等到128兆,那不就一直卡着了吗?那它这里面设设置了这个双重机制,你说万一你这个大小没达到啊,哎,你这个时间达到了也可以,比如说30秒到了,那也也会形成。那很显然30秒的话,那这个时间是不是有点太短了,那是不是它必然还会导致产生大量的小文件呢?那真正在生长环境下,这个值会配置多少呢?比如说你可以配置3600秒,比如说一个小时我滚动一次。可以吧,或者半小时,半小时就是1800秒啊也可以,那一天的话就是48个文件,那如果是这个的话,一天就是24个文件。哎,这是完全可以接受的。
04:00
那你为什么看到这里面,我们为什么设置的是十呢。哎,设子十啊,原因是很简单啊,原因呢,我们是希望啊,哎这个呃,十秒钟产生一个文件啊,因为后续项目中会读取这里面的这个文件,因为这个文件如果说没有到达这个周期的话,它始终后缀会带上一个time文件,那如果后缀有这个time文件,你后续想读这里的内容是读不了的。啊,因为他是认为是临时文件,你可以往里写,哎,远远不断往里写,你即使没有数据的话,会等待,等待你这里面任意一个条件达到。啊,那但是对于我们开发来说,哎,我们这文件呢,瞬间会写到这里面去,我们希望呢,下游在处理这些数据的时候能够及时的处理,你说你这里面真配置了3600秒。那你后续写代码的时候,你要真得等一个小时之后,你才能读到这里面的数据,或者说才能让你去读这里面数据,那对于我们后续的这个,呃,编写代码叭较麻烦,所以说这里面我就配置了一个十啊,那后面还有一个值,同学说海哥这还有一个roll count,那这个roll count呢,是达到你这个设置值的个数,哎,我就允许形成一个文件,那真正在企业开发的时候。
05:06
我会不会设呢?哎,通常情况下呢,是设置这个零把它禁止掉,为啥呀,因为每一个even的大小,它是大小不一的。啊,有的一般大小呢,可能是1KB,有的是2KB,有的再给你来个3KB,那你完全按照这个数来切的话,那后面形成的文件呢,就大小不一,那你切片的时候呢,就容易切成这什么呢?跨节点的一个通讯,明明是一片切成了两块,那这块呢在这个节点,另一块在这个节点。那这样的数据传输效率就比较低下啊,所以说通常在企业里面开发,我们就配置是两个就行了,一个呢是大小到达128兆,另一个呢是时间,比如说是半个小时或者一个小时啊,甚至两个小时也可以。那一个小时的话就是3600秒OK吧,嗯,行,那把这个参数呢,我们也给它配置上啊。直接拿过来。配置到我们的这个文件当中来到104。
06:02
VM卡不卡进来。进来之后来到这个位置O。插入。那这样呢,就配置完毕了,配置完毕之后啊,还是老规矩,我们这个杀死一下。当前这个杠9200。六三走。行,那现在啊,这个我们就已经删掉了,哎,删掉之后呢,我们再把它启动起来。拿这个。启动完毕之后啊,我们仍然来到这个页面啊,也就是说hi豆op这个控制台页面啊,把它删掉。把这个删掉。准备工作做好了,那下边呢,我们来到102上。再次执行命令。
07:01
然后来到这页面进行一个刷新。好来了,来之后进来进来进来之后看一下,这里面是有这个后缀啊,目前是time文件啊,哎,Time文件别着急刷新。你看哎,这就行,十秒钟哎,形成了一个新的文件,然后缀呢,下一个文件呢,仍然是tap,但是这个大小你看是不是比以前已经大多了啊,已经大多了,因为他收集的是十秒内的一个数据啊。那现在呢,就已经都OK了。诶,这呢,就是这个小文件对应的一个处理方式啊。
我来说两句