00:00
好,接下来呢,我们正式开始我们的driver系列,对吧?哎,Driver里面呢,这个比较好写,它是固定的一个套路,那这里面呢,你可以说是七步,也可以说是八步都行啊,那我们来看吧,我这里面就以七步为准吧啊。好,那个没方法,那这里面七步给大家写一下啊,大家这七步啊,一定要记住啊,一定要记住,第一步呢叫获取job。第二步。叫设置Java路径。下。入境啊。第三步呢,叫关联,关联reducer。Re d c。E啊也就是re啊也就是OK,那第四步呢,叫设置map的输出的KY流类型。
01:00
嗯。这个一双击它就出这个map输出的K。类型OK,第四步。啊,第五步叫设置最终输出的K类型。最终。输出的。TV。类型啊,那这里面为什么不是这个reduce的最终输出呢?因为reduce它其实不是最终的输出啊,有的这个map还没有reduce呢,是吧?啊这里面给大家提前说一下啊,就是有的map这个程序啊,它没有reduce,只有map阶段啊,还有呢,这个reduce输出之后,它有一个auto啊,进行一个控制。好,那最后呢,这个呢叫设置。输入路径和输出路径。如果你把这个拆开,那就是八步,如果没拆开,把这个输入路径和输入路径放在一起,那就是七步啊。
02:00
那第七步呢,叫提交照吧。哎,提交作业好,那下面我们来看一下,第一步呢,叫获取job,那这个job对象怎么获取呢?哎,直接用这个job,然后去点,那还是啊,这里面这个导包非常重要,你看我一打这个job,首先出来一个map reduce。嗯,应该我看还有没有别的啊,这个还有一个你看map right千万别导错了啊,千万别导错了找他。Job。点get instance,那我们来传第一个哈,Conflict传参数这个。点腕。Stop,那我们需要一个配置参数,那就new一个con con Fi。好,那这个也别别倒错包了啊,这里面最大的难点呢,就是倒包。只要你认真仔细,就没有问题。那把这个com呢添加进来。然后呢,Alt加回车。
03:01
哎,把这个异常抛出去,那下一步呢,是这个设置架包,设置架包呢就是job.set哎,Set set架,Set架里面一个呢是set架,一个是set架by class。它呢是通过我们一般是这个啊,通过这个全列名,通过它来反射获取到我当前这个价包在什么位置,那方便后续一个执行啊,那行fight,嗯,这样by class,那我就把这个当前这个全类名。第2CLASS把它传进去,诶后续呢,程序呢,会通过反射来获取到他想要的信息。那接下来呢,我们要关联一下map和reducer,比如说你真正这个加班程序跟map和reducer如何来产生联系?跟你这个,你写的这个driver,呃,写这个map和reducer怎么产生联系呢?那这里面我们就通过这个job.set map class。哎,把它塞进来,那不就产生联系了吗?对吧,哎,这样就产生联系,然后z.set。
04:03
Reducer class,那我们就是word can't。Reducer点。诶,就OK了,呃,现在呢,他们三者之间drive map reducer产生了对应的联系,那下面第四步,那这里面我们要关注的是map输出这个类型需要我们手动设置一下,那怎么设置呢?job.set map,哎,Map output key,哎,Map阶段输出的key的类型,那我们输出的类型是什么呢?还记得不?Map输出的类型,哎,单词为K,然后一那就是test对吧,那你这块传的就是test.plus。那下一个job.set map。我这里面是output value class。那传谁呢?Y6是一呀,一呢是int。writeable.class。
05:00
哎,就OK了,那当然了,你也可以去哪呢,去这是吧,哎,去看看着他去写也可以啊,没有问题啊。那再回来,回来之后呢,我们设置叫最终输出的KV类型。那这里面job.set它不是reduce,直接就是output。那我们最终输出的这个KPL类型,我们可以看一下它。嗯,在。截一下。是不是就是这这个类型啊,好,我把它拿下来。那你回到这儿,回到这儿之后,那第一个key的类型呢,就是test.class。再来drop.set output。Value,那就是int.class。对吧,哎,把这一搞定好拿下。那下面呢,我们要设置一下这个输入路径和输出路径,那这是是不是还是用这个job来设置呢?哎,不是了啊,大家看一下这个源码。嗯,这是源码的map往上看。这呢是may方法里面,你看啊,它最终设置这个输入路径和输出路径,分别用的是file input format和file output format用它来设置,然后把这个job呀传进去这种方式。
06:12
那么也按这种方式来。那第一个呢,叫file input。Format,那input format同样道理,还是要注意这个导包,诶用这个MAP6用长的对不对?哎,选择长的这个短的不好用啊好。Input format。第2SET in pass路径,那set in pass路径啊,你CTRL加P,你发现第一个参数呢,是把你这个job传进来,那第二个参数呢,你要给一个路径,你看这里面还可以传多个路径,那这里面就给一个就行了啊嗯,因为我们简单一点pass,那in pass我输入的路径。在D盘嘛。先拿一下。在地盘input。Word。他哈。把这个拿过来。
07:03
对吧,哎,往这一放就OK了,那这个双斜杠,它自动给你双斜杠呢,是这个转移的意思啊转移。行,那这个完事,Input搞定,那下面。Output format,同样道理,还是要倒包的事啊,这个倒包很重要,反复强调,就是因为错的同学太多了啊,一遍一遍说,Map map right,对吧?Output,它。第二,Set out不等。Pass啊,那你看那个output pass就是一个job加上一个pass,路径也是输出路径就一个啊set。把job传进来,然后呢,需要一个pass,那就又一个pass,那这个输出路径我输出到哪里呢?我输出到。还是D盘我放到拍,哎,在这下面放,再创建一个out put啊。放下它。然后呢,OUTPUT1。
08:00
这样行吧,哎,那这个呢,加斜线。哎,转译的意思行,那这个输入路径和输入路径我们就设置完了,那再往下呢,就是提交job job点正常提交有一个submit对吧?哎,Submit我们不用这个,我用谁呢?用wait for complic,然后里面传一个参数。看一下。按住CTRL键点进来,点进来发现啊,这里面它本身它就有一个sum,同时额外又增加了这些信息。那这些信息它能不能走呢?取决于你传进来这个参数,如果你传进来的是一个处,那这个叫monitor and print job啥意思啊?监控并打印job相关的信息。那我们这里面希望能够获取job的信息越多越好,诶辅助我们后续的一个,呃,调bug呀啊,或者观察job的运行情况啊,对吧,那这里面呢,我们怎么传呢,把它传进来一个出。就OK了啊,点Y那返回一个结果ret啊。Out,加回车。
09:01
那行,那这个之后又怎么处理呢?你还是再来看一下它的源码,看下这块。这原码怎么写的,Job wait for complication处,嗯,然后呢,是啥意思啊,三元运算符,好,那我们写一下啊,王照他写一下。System点退出啊,然后呢,Result。如果成功返回零,否则返回一。是吧,Out ctrl out加L进行一个呀。可以进行一个格式化啊,CTRL加L。格式化,格式化完毕之后呢,整个这个程序啊,我们也就已经写完了,写完之后呢,我们再来捋一遍这个对应的这个代码啊,首先呢,第一步呢是获取照吧啊没什么难度啊,传进来对应的这个配置信息就可以,下一步呢是关联这个架包啊架包那架包呢,就是把你这个drive类啊啊,他点class set进来就可以。
10:00
再往下呢,是这里面哎,要设置你的map class和reduce class,主要是将map reducer和driver它们三者之间让它建立联系,它的纽带呢,就是通过这个job啊,设置在一起之后呢,这里面我们要设置map输出的key和map输出的V。以及呢,最终代码输出的K和V,哎,那如果你有reduce的话,我们一般就选reduce对应的这个KV就可以。那在后面呢,就是它输入路径和输出路径的一个设置,诶把这个一选就行了,那这块唯一的主要需要注意的地方就是导包啊,导包真的容易太出啊,太容易出错了哈,要注意。下边呢是正常的提交job啊,提交job呢,这块传一个处就行了啊,让他打印的信息更多一些,那最后呢,这段呢,是仿照这个,呃,这个官网的这个word count的案例,加上这么一句就可以了。行,那这就是Java程序。
我来说两句