00:01
好,咱们介绍完大小合并之后呢,紧接着咱们来研究一下小合并的一个控制机制啊,同时呢,给大家讲述一下通过文件合并最终啊在HD上面会如何存储这么一个文件啊,那小合并机制呢,有五个参数啊来进行控制,这些参数呢都有默认值,第一个参数为合并文件选择算法中使用的一个比率啊,这个比率呢,会直接决定你最终产生文件的一个形式啊,这个比例呢会在后面算的时候呢用到。第二个参数呢为小合并最少的一个文件个数叫最少是三个文件啊,最少是三个文件一次合并啊,一般呢,也就是根据三个文件一合并来的,最大呢是十个文件,如果超过十个文件,后续要等到下一次才会再来进行合并,好下面呢,这个值呢是最小的一个文件大小128兆,如果你刷写下来的文件啊小于了128兆,那默认这个文件啊是一定会被合并的啊,就加到那个合并里面啊,加到合并里。
01:02
下面呢是一个最大值,如果你的文件最大值超过这个值的话,那永远都不会被合并,当然这个值是不会让你超过的,它默认是没有设置这么一个控制权限的啊,因为这个值呢,等于long值的最大值,我们知道浪的最大值非常非常大,对不对,所以它默认呢是不会使用到的啊好,根据这个机制呢,我们来看一下如何进行合并,它首先呢,拉取当前store里面的所有文件做成一个及格,之后呢,从旧到新进行便利,先考虑旧的啊,先考虑旧的,好旧的时候呢。它会有三个判断条件啊,一次次如果你过小的话就合并,过大的话就不合并,过小就是那个128兆,如果这文件小于128兆,一定会被合并,如果超过那个最大值,如果你设置那个参数的话,会生效对不对,如果你不设置那个参数的话,它不会生效的啊,不会生效的,你可以手动去设置嘛,比方说超过一个G就不要再合并了,对吧,就让它保留在那里就可以了啊,这也是可以的啊,也是可以的,好,这是第一个啊。
02:04
基本上就前面有叫小于128兆,一定会被合并小文件嘛,第二个呢,叫文件大小除以刚才那个比例,那个比例呢,默认是1.2的一个float啊float数,它其实就是1.2嘛,如果你当前文件除以这个文件的比例小于剩余文件的一个大小和,它是从旧到新,剩余文件就是当前选中之后别的文件如果小于剩余文件大小和呢,那你会参与压缩,所以把比值啊,如果设置的过大的话,比方说你设置为十,它最终呢,会合并成一个特别大的文件,因为你当前这个文件不管多大,你有一个G,你除以十,你还是很大,可能小于后面文件的所有的和,所以你最终啊还是会参与到合并里面,如果你把这个值设置的非常大,那这个文件会一直合并,一直合并,最终呢,合并成。一个特别大的文件,相反,如果你把这个文件设置的很小,比方说0.4,那你当前的文件除以0.4,哎,你除以一个小于一的数,你不就变大了嘛,对吧?那你变大了之后呢,你这个值很容易就大于了剩余文件的一个大小和,那你最终呢,会产生四个当菲尔,你可以算一下这个比值啊,算一下这个比值啊,一旦你超过之后,你不会被合并,它连着数三个都不会被合并,只有第四个后面的文件稍微有一点之后呢,它才会拉进来啊,会合并,那同时呢,我们不建议修改这个默认值1.2是这个作者啊,经过精心调控选出来的一个结果啊,那大神调控过了,咱们就不要去动了,和以前这个值还不是1.2啊。
03:35
好,最后呢,还有啊,如果满足压缩文件的个数,达不到个数的要求,则不压缩啊,就是说你如果它是从旧到新。从旧到新一直进行选择的啊,选择到三个的时候就会去进行压缩,但如果你想一下我就生成了两个文件,不到三个,那它会合并吗?不会,两个文件永远不会合并,对不对?你首先得达到三个,其次你一直往新的数,新的文件生成了20个,它会都合并吗?也不会,它只会从旧到新先合并十个,就是这个意思啊,先合并十个啊。
04:11
好,那为什么要这样设计呢?或者说设计成这样,最终我们合并会是一个什么样的结果呢?哎,可以给大家捋一下啊,首先它为什么从旧到新,从旧到新,然后去判断这个文件大小啊,这里面其实有个隐藏条件,它的合并呢,通常是小合并和大合并综合起来进行的啊,综合起来进行的小合并的结果我们不太好推测啊,情况呢,还比较复杂,但是大合并的结果。非常好推测,你不管怎么样使用,大合并过后总是会产生一个旧的。它首先是旧的,因为它会放在最后旧的,然后是最大的这个文件啊,是旧的最大的一个文件,你想一下是不是对吧,那它小分件其实在干嘛呢?从旧到新开始变利啊,从旧到新开始变利,然后设置了一个比例1.2,也就是说如果产生了旧的这个大的文件啊,大的文件除以1.2之后啊,除以一点之后,比后面的所有文件一般来讲是都要大的啊,一般来讲都要大的,它这个目的呢,还是在小合并的时候,不要拉过大的数据来一起去合并,过大的数据合并呢,交给大合并来执行,它有了一个特别旧的大文件之后。
05:28
啊,他在做了一个大文件之后,首先又生成了一个刷新文件,会不会合并呢?不会两个文件吧,再来一个刷新文件。三个文件之后会不会合并呢?哎,也不会啊,一般来讲也不会啊,你可以判断一下,这个特别大啊,它一般啊是大于两个文件合并的一个结果的啊,一般是大于两个文件这个大小加起来的,因为它大合并之后它肯定是有好多个文件,对吧?假设它是1G,你每次刷写是128兆,你可以算一下对吧?仪器呢,很明显1.1倍除以1.1也大于两个122相加,然后再来一个128兆。
06:04
三个文件了,会不会合并呢?哎,你自己算一算对吧,你自己算一算这个文件。不会参与进来,这个文件很明显它是小于两个相加的,它会参与进来,对不对,这个会不会参与进来呢?取决于你这个128兆跟这个128兆,哎,除以1.2。它是小于它的,如果它也是128的,对吧,它会参与进来,那最后一个会不会参与进来呢?它除以1.2小于剩下的文件啊,小于剩下文件为零了,对不对,会不会小于剩下文件不会对不对,那它呢,不会参与进来啊,不会参与进来,你这么算呢,只有两个文件参与进来,会不会合并呢?也不会合并啊,也不会合并,相当于它的合并呢,有一定的延迟,你只有再来一个文件128兆。好,那会把中间的这三个文件给它合并起来。能理解吧啊,它就是攒着啊,攒着攒够一定个数的文件了,然后判断一下,如果太小的话呢,就加进来,如果不是太小的话,就不加入进来啊,够了就合并一次,如果这个生成的文件呢,小于128兆了,它只有十兆,这种小文件显然没有存在的一个必要了,那在合并的时候呢,会默认把它给加进来啊,把它给加进来,然后呢,执行一个合并啊,以此类推就可以了,就先攒着。
07:21
攒够一定数量合并一次,那合并的时候呢,不会去合并最开始的那个非常大的文件啊,那这个呢,就就是它整个的一个机制啊,小合并默认进行在代码里面呢,会进行一个控制,那大合并呢,需要你。手动去设置啊,默认的是七天执行一次,那经过大合并之后,我们h base里面的文件它总是固定的,就是一个大文件啊,一个大文件可以看得出来我们的H呢。也倾向于把这个文件尽量合并的数量少一点啊,大致控制在几个呢?一到五个左右。啊,一到五个左右,你可以去捋一下对吧,大概达到这个值之后呢,它会进行一定的合并啊。
我来说两句