00:00
好,接下来呢,我们往下讲,讲什么呢?讲自定义音input同学们。那为什么这个系统给我们提供了这么多,你看啊,给我们提供的有什么呢?有这个fair input啊,Combine test啊,还有这个key value1部以及这个一部啊。Line这么多数据类型的处理,为什么还给你提供了一个自定义呢?就是因为系统提供那些啊,并不能解决企业开发中所有的问题。他满足不了这个所有的应用场景,那就需要用户自己去自定义这个input通话了,来解决一些实际问题。啊,像定义他和争定义二合同啊等等这些都是企业开发中啊。比较常见的啊,我们来看一下,那么如何自定义这个。非常之简单,自定义一个类继承file input。没问题吧,都是。司机了哈,然后呢,在这里面哎,改写它的record reader,就说改写它的读数据的这个类实现呢,一次读取一个完整的文件,封装为KV。
01:10
为什么说叫改写为一次读写一个版文件呢?因为默认读取的什么。一次是不是读取一行啊啊,一次读取一行,那现在呢,我一次读取一个。文件可以把它处理掉。甚至呢,这个自定义不能袜子还能干什么事呢?哎,有一些特殊的这种格式。啊,特殊的这个文件格式。啊,你制定你这个原来的这些,呃,时间类都解决不了,那怎么。你也可以自定义,然后呢,通过你的手段把这个对象解析成你能。这都是妈能干的事情啊。在输出的时候使用的是out不?诸村合并文件,这是一个文件类型啊,一会儿呢,我会带大家去看这个文件类型,它有什么特点呢?
02:02
他这里面存的数据呢,是以。文件的名称为keep。啊,文件的内容为value。或者路径吧,啊都行,然后文件的内容为外流。存放的是一个一个的。把多个文件都存到这种格式的文件里面去。合成一个大的愿意处理什么呢?用于处理合并小。假文件书又出了一招啊。呃,之前讲过几个了。两个,一个是号是吧,号归档,另一个呢是。Combine,下一个就是自定义。啊,对角文件进行一个合并处理。好,我们往下看。看一下这个阿利需求。比如说自定义这个案例。无论HDS还是M60处理小文件时呢,效率都非常非常低。占用的面临处理大量小文件的场景,这个场景是非常多的啊。PM说过,在京东你跑一个MR有可能会产生几百万个小文件。
03:10
那怎么处理呢?现在呢,就需要有相应的解决方案,可以自定义这个音符,怎么放呢?实现小文件的一个合并。那下面看详细的需求。将多个小文件合并成一个sequence file文件。特殊的文件格式啊,普通的不行。那这个文件什么特点呢?C文件是high do,用来存储二进制形式的KV,对的文件格式。这里面存的是文件。一个文件里面包含多个文件,File里面存储了多个文件,存储的形式呢是文件路径加名称为key,文件的内容为。KKV。那你看一下,这是输入文件,有三个。啊,都很小哈,都很小,随便打一个看一下。
04:01
这么多内容。之后,那它最终的输出格是什么样的呢?复制出去。看一下啊。呃,你隐隐约约能看到这里面是不是一个二进制的这种形式。那你看我这里面有哪几个文件呢。呃,E盘阿1PART0啊,然后。他的文件名称我们找到一下。往后看对,往后看看这这个呢是一盘。先找到文件的名称。是不是这个文件名称啊,哎,这这不是万吗?对吧,那这往后转one里面存的内容是什么呢。其实是呢,之前那些老学员的名字啊。鹏啊,伟东啊。
05:00
为难呢啊?真的啊。南哥,号称南哥。可厉害了。然后呢,这里面是这么多名人,这是万里面,那你再看其他的再往回看。看这是不是有个瑞啊,哎,瑞里面呢,这里面有啊,这是肠膜。啊,这是真强啊,等等。这不太全啊,应该是一个万呃,一个to一个three啊都有,就是呢,他存的时候呢,是以这个文件的路径加名称为key啊,里面的是具体实实在在的内容。是这个意思啊好,那是这种格式。那下面我们来看啊,自定义这个input案例的一个解析,详细的步骤你需要怎么去写。首先呢,你需要自定义一个类继承小一不怎么办?
06:01
因为呢,你这个处理的是文件这种形式哈,就进仓。那好,那在这里面呢,需要重写一个is。这个熟悉吗?在切片的时候是否可切割,是不是判断了它,哎,是它啊,那这个地方呢,我们不允许的切割,因为我们目的是不是就将小文件进行合并呢?哎,合到一起我还切它干什么啊。肯定不切了啊好,那这往后重写它的create record reader啊,这个方法呢,是你必须得重写的。啊,它会,你只要一继承这个file,它默认呢就要重启它,那在这里面呢,其实就是需要创建一个record read b项。啊,并对它进行初始化啊,一会儿我们看。啊,这个非常简单哈,需要啥来啥就行了。之后这核心的是这个改写这个record啊,在这里面呢,有。N多个方法。但是呢,最核心的是一个。就是nice k啊,我们一会。看到啊,在这个ne k value里面,我们主要实现什么呢?一次读取一个完整的文件,并封装到PV里面去。
07:04
一次变成读一个文件,由原来的一次读取一行变成一次。就是你自定义的一个目的哈。啊,往下。那详细的就是呢,采用IO01次读取一个文件。突出到Y流中。把一个文件封装到value里面。那因因为设置了这个不可切片,最终把所有的文件都封装到这个value里面去了。这个Y流里面存的是所有的文件,那么K是谁呢?文件的路径加名称。那获取文件的路径和名称,并设置为T。其实目的就是为了封装这个keep value。不过呢,这个K呢,是文件的路径啊。加名称Y流值呢,是具体的这一个完整的文件。再往下,那剩下的就是设置这个专门驱动了。Java系统里面呢,需要设置两个,一个呢是你刚才写了一个这个自定义的这个input,那当然你要用的就是它。
08:06
他就直接就没有意义了。那另一个呢,是设置输出的这个奥步的。输出的时候呢,如果你不把它设置成它默认的是什么。Test out,怎么那它输出的格式呢,是按行去写的啊,这不行,这呢是按照这种格式去写才能将三个小文件输。出到一个这种file文件里面去。就是这个。那下面呢,我们开始写一下代码。
我来说两句