00:00
好,接下来呢,我们稍微总结回顾一下这个自定义input啊,这个。呃,这个音音不的话呢,它的原始需求是这样的,将这个小文件最终合并成一个C文件。这个文件呢,就像这个刚才。是冯杰说的啊。我后面没跟大家说啊,时间有点紧张,是这样的,这个在合并这个文件过程当中,他其实开的还是。三个切片。它是三个切片,因为三个文件嘛,因为我这个文件都没有达到这个一百一百二十八兆,所以说呢,它都是三个切片。那最终它合并成一个文件,就是在合并的过程当中,它并没有产生优化。只不过呢是合并之后,那这些小文件呢,都变成了一个文件,那这个文件有什么作用呢?日后你再启动job去处理分析这个文件的时候。哎,是这个作用啊,这个呢,这个跟谁像呢,跟这个号文件。
01:00
这个小文被打,你回忆一下。当时呢,我们是一个内部note下面呢,有三个或者多个小文件,哎,经过这个号归档之后,我们是归档成这样。哎,各这样对外呢,形成一个统一文件的整体,但是对内呢,还是一个一个的小文件。那这个是一样的。它是什么意思呢?它是,哎,你这是多个小文件,最终我将你形成这么一个C公fair文件,在这个C公fair文件里面存储的,以这个K是。文件的路径和名称,Vicky。内容,这个文件的内容。这种这么一个文件,然后下一个又是这样的。那后面你要对这个数据进行分析的时候怎么办呢?哎,比如说我就想取出A文件,你说one啊one啊,这个one啊one.t。那我只需要输入他的key。我就能得到对应的。比如说文件内容。
02:00
是这个意思啊,是这种优化方式。如果你想这个真正的让这个小文件启动的时候,切片数量少那个什么。是不是有combine test input啊,这个处理的这个形式不一样啊,所以需要注意这个场景。而且呢,这个自定义进步的和它可不光是为了这个处理这个小文件而生的。他可以处理很多很多事情。就我之前啊说过,比如说你这个文件的类型,它是非正规的一些类型啊。不是我们这个F6直接能处理的。那就需要在这个input过程当中,提前对这个文件进行类型的一个转换,哎,转换成这个MR能处理的这种类型。啊,他能做的东西很多哈啊。多。就是我们想象的这种啊。那这个是自定义不同话的啊,下面呢,我们把这个案例啊。给大家一下看一看这个小文件,它到底是怎么走的啊。
03:06
一说你爸爸。我们打断你。大家别头疼问题。怎么去的?我告诉你,关心啥你就打啥。对吧,啊,就跟这个找对象是一样的啊。你关心谁,其实你就是想跟谁搞对象,对吧?比如说班长是吧,喜欢。知道了是吧,哎,对,关心则乱嘛,对吧,那我们现在关心谁呢?哎,我们就关心。这个没啥营养,你看就这么两个代码是吧,一个创新对象,一个初始化肯定不关心,最核心的肯定是这个后。那在哪打呢?啊,我一看这个不错,Nice k这里面是核心的业务逻辑啊。点在这儿,所以说就在这打断点。那像这个呢,初始化基本就没什么意义,那下面呢,你再往下看,这是get t get y,就返回一个值也没有任何意义。
04:04
下边这个干脆就没写。这时断点只能打在这。那打在这呢,正常情况下一个MAP60你都要打断点的什么呢。和他的比较。在这里面去打,就说无论如何这个迈克就是啊。以我的套路来说,我都会去打一下啊。除非我非常清楚,这地方不需要。啊,因为这个呢,关注了。呃,是你这个整整个程序运行的一个流程哈,你要分析清楚。好,回到这儿,回到这儿之后呢,我们就开始就行了啊,这地方就不用打了,提交流程这一块之前我们已经看过很多遍了,就不打了。右键。第八个孩子。大新在哪了啊,这个是我们提交的源码了,哎,从现在开始我就把它都取掉了啊。这个呢,说说话继续断掉,不要了。
05:03
啊,当然你可以有这个。这个bug有一个点吧。这些吧,是吧,啊,这些你也可以这么去取消啊,那我。我就带大家啊,顺便再过一遍这个核心的重点。帮你是吧。几个核心的函数的基度。这个切片。上下轴再呢,是还是切片内部的核心代码。再找这个是最核心的芯片嘛,对吧,芯片机制。往下走。这是干嘛的?是不是提交这个他卖老大。谢谢。进行。呃,这个呢,是提交这个检测过程啊啊。一下子他先到的是哪儿啊?居然先到的是nice的P,那也说这个nice k流是在map方法。之前掉的吧,一会在这打个断点。嗯,他没有先走,那先走的是nice ky6,那我之前说这个nice k6是谁呀?
06:06
是不是他呀。啊,那一会儿让你看一看是不是他。比如说调完nice k y6之后,接下来走的就是这。往下走呗。下这个标记呢,是处,那肯定要进来读到文件下,那看一看这个切片是谁。是不是其中的一个文件呢,哎,点test。好,那往下走。还流还流操作走走。封装完毕之后,这个Y轴里面就是具体的这个字跌。啊,直接对吧,是吧,啊,然后再往下。K里面封装的就是你看我之前说的就是它的路径,加上这个文件的名称。OK啊,再往下。Progress。那你看啊,我再往下走走。
07:02
到这了,K。这个呢,你看一下这个类是谁呢。Map test。那好,往下走。下来。返回啊是多少呢,是处。那出完之后它执行什么呢。哎,直行,这next p角再往下走。来哪了?这是哪儿啊?哎,大家这种手艺吧,哎,就是map.class。那好,那我们返回的值还记得什么吗?是处是吧,还处啊。下。来到麦了,哎,这样就来到麦了,然后你再往里面进。这是白领出。为什么他会进到这呢?就是因为他在执行这个方法之前,他先要获取相应的。
08:02
参数啊,所以说刚才进的是它,那如果你再进一步呢,就是。对吧,OK啊,这个要知道先进的参数,然后再进行这个方法。好,接着说。再下一个数卖了。出来了。这个数就是我们写的办法。啊,这个代码流程要要要清楚啊。这块要注意好,那就来到这之后呢,就写出了,那写出呢并不会map没有全部执行完之前,他不会执行reduce。这没问题吧,他是要将所有的map阶段处理完之后才能够开启。那我刚才是只能说一个处理文件啊。啊,后面还有好多文件呢,好,那我再填入运行看啊走。是不是到这儿了啊,又到这了,那你看这回是哪一个文件。
09:03
这个结束再数去。在下。哪个文件呢?对吧,嗯,那你能不能感觉到他是不是在处理这个a.T b.t.T的时候啊,就是。之外。Three。这么在处理这三个文件的时候。他是不是三个文件要开三个map。三个map test啊,这里面其实开的是三个map test,你。你看我刚才在读完这个文件之后,他是不是执行了一次这个force。就是相当于这个map已经结束了一次。那在我现在再进来,他的map已经是第二个map设计成了。这能理解吗?他不是一个进程啊,不是一个map test。
10:00
再跟这把我们慢一点啊,继续往下走。还是依然走到这,这个还是卖不另一个卖了这个是。那往下。又来到这个map里面啊。你看相当于这个上一个循环已经结束了,那是上一个也是map test1。执行完了,那这回再走的应该是MAP2,下一次再走的是MAP3。然后最终将这三个词。那数据汇总到。那继续进去。又来到这儿了。这样又写出,那你全数运行看啊走。
11:00
到这到这你发现这个is progress是不是for啊,相当于他再往下读的时候,已经读不到了,你看读不到,读不到了,他要退出。出去。那这次呢,它返回的result就是false,那它返回的false,那你出。你看是不是都已经执行了,执行相当于这个这次运行已经结束了。假如那个we test结束之后,那进入到下一个map test,那这时候你看这个is progress是变数了。来就变成数了啊进下,那同时这个切面也变成了。第三个呢?有声啊好,那这块呢,我们旋殊运行快一点进,直接来到这个麦网络写出。三个麦克是不是都处理完了?该到哪了?
12:01
是不是该到了,OK?一样。这次是false对吧,啊执行完了,那就到了这个reduce啊,到时。文件。那发电是要写出去啊啊。那我再跑一下,把这个K变成。这个呢?出去。再进来。然后你这个这个循环下去啊,你让他出去。出去之后再进来。结束了是吧。结束了吧,来看下结果。一呢?好的好的知道。这样最终就形成了这么一个C文件,这个文件什么作用?日后你再想获取这里面的内容的时候,你可以输入相应的这个文件的key。
13:11
那就能得到这个文件后面的内容,进行再次的一个分析,比如说再说它这也是文件的名称,那后面这个是你文件的内容。跟那个哈尔文件有非常类似的地方。对外是一个整体,对内还是一个一个的独立的文件?形式啊。
我来说两句