00:00
好,接下来我们开始写代码,那写代码怎么写呢?诶,仍然是实现这个word count功能,只不过呢,跟原来的这个定义三个类啊,就是map reducer和Java啊不一样了,现在呢,我们先定一个word count。那在word count下面要干什么事呢?你看啊,这里面实现了一个突接口,然后这里面有个run方法啊,这个呢用来日后呢,用这个to runner的方式进行运行。那他map在哪呢?Map在这呢?静态内部类reducer reducer在这。好,那我们写一下啊。首先第一个类实现一个图接口。创建。OK。实现。Two接口。哎,吐血口,别导书包了啊,那他现在应该这个包还没过来,没过来之后呢,你来这刷新一下。妹妹。刷新。嗯,稍等一下啊刷新。行,刷新完之后呢,回过头来再看一下。
01:00
Alt加回车实现。不是这个包把它干掉,这个包啊,很容易出问题哈,所以说下面看啊,到下面这个包啊,还是我下的包。OK。然后呢,Alt加回车实现里面的方法啊,一共呢有三个方法,一个是run方法,未来呢,由这个driver驱动类来调用,那驱动一会儿还得额外传成一个驱动,那我在这个word count里面完成的是map和reducer啊,以及部分驱动代码哈。好的,那这个run呢,这里面是核心方法。嗯,核心驱动吧,嗯,核心也是驱动啊,驱动一部分。驱动,只不过这个驱动呢,这个配置信息啊,这个康复需要传进来。需要传入,也就说不能拗拗这个com了啊,那下面这个呢是呃,获取这个配置信息,哎,获取你这个配置信息,那这个呢,啊,这是获取这是set啊设置OK,那下面在这里面我们可以写对应的map。
02:07
和对应的reducer。这样人写,那我们先把word看的这个迈和给他写了啊,这个比较简单对吧,呃,帕布雷克,呃,Sta克。然后呢,哎,我们这里写的是word count map对吧,Word。看看大家这个啊,以前的这个东西还记不记得哈麦。Map啊,然后呢,继承。Class啊。对吧,Class啊,然后呢,它继承。啊。发型long。Writetable。嗯,浪W,嗯。对吧,哎,让么。没问题吧,然后下一个呢,是这个test。OK,主要是导报名啊,那我们word count那单词为key test,没问题,输出去in readable。
03:08
点它这个反应比较慢啊。嗯,OK,应该是没问题。是吧,啊,它反应慢啊,那反应慢没关系,那写下来,那下面呢,这个嗯,重写它这个map方法。OK,在这里面,那你还是啊正常的,比如说假如说宋松啊苍老师对吧,哎,这一行内容进行处理呗,那首先第一个呢,就是获取一行。老生常谈了啊,Y6。点to string,点那这个呢是一行,那下一步呢就是切割。哎,切割line点呃斯布利特,我们的内容word count应该是空格。用的空格啊。嗯,点吧。来。Word啊沃斯,那下一个就循环便利呗,写出呗。
04:02
循环便利写出OK,那就是word c.for轴啊,增强for循环往出写,写的话呢,就是contexttest.right那right的话呢,你现在需要一个K,需要一个value。那叫特,嗯。Test。Output。等于new一个test。拿下private,我包,然后。等于又一个泰斯特。OK,哎,不是太啊,这个是啊int right哈,那给它一个值直接就是一呗,对吧,嗯,一行,那out v可以直接就位了啊给过来。那前面呢,还差一个这个out key out key的值需要给一下。A key.set加上这个word set进去。
05:03
这样是不是就OK了,嗯,这这个代码呢,一定要会哈,首先卖不起完,那下面我们再写一下这个reducer。那仍然是public课啊,Static课class,嗯,我们是word。Count reducer。嗯,然后继承reducer。REDUCER。嗯,到包。导长了对吧?嗯,导长了,咱们应该都有经验哈,行,那接下来输入的这个单词为k test特,嗯,然后int。最终的输出呢?仍然是泰斯特。OK。好,那重写里面的reduce方法拿过来。那上来这里面先定义一个累加的变量值。嗯,那直接定吧。In。Sum等于零没问题吧,哎,然后呢,我这里面遍利这个Y6丝。
06:06
第二。放啊放,循环。可以吧,放循环,然后就是萨加。等于啊value6.get获取里面的值,那下面就写出呗,contexttest.right那right的话呢,这个单词为K。直接把它拿到。没问题,那我的value是不是就是个sum,那你这个sum它是in red包类型,那你得。定一下啊private。T out。喂。啊,Outv等于另一个in rest OK,那这就不能给一了哈,那来到这,来到这的话呢,就是out we.set将sum再进去,那这块给出来的就是al v。可以吧,啊非常简单,那么这个写完之后,那接下来我要写驱动程序了,正常情况下是这样吗?那驱动程序呢,你可以在这个run里面去写,但是这里面的配置信息你就不要。
07:05
直接拗了啊,怎么写呢?哎,仍然是那么几步,比如说job。别到书包,哎,这个第2GET intense以前的套路呢,我们是上面这个new对吧,哎,那现在不要拗直接呢,呃,我在上面写一个叫。Private。然后呢?对吧,并没有给它值直接给到这。啊。这样呢,拿到一个照对象。那我这个康复从哪赋值呢?来到这里面。下面这个位置。哎,你别人从我这获取的话,你直接拿走,那set呢,Set这样。this.com等于。com,也就说通过外部传进来,这个很关键啊,外面呢会调用这个方法把它塞进来,那这面呢,我就能够获取到了,那谁来这个创建这个C呢?未来我们会创建一个真正的driver,在drive里面主要处理的是啊,To runner。
08:06
呃,一个功能,好吧,那我们先假设我们现在已经拿到了这对应的这个配置信息,那下面就对应的几步呗,job.set还记得吧,Set价啊,那这样的话我们这个driver。程序那还没有啊,还没有,没有的话呢,先放在这儿啊,再往下那job.set。那麦有啊,麦在这儿呢。第class再来,再有个点,Reducer class。Word count reducer.class OK了,哎,这三个件set完毕之后,那接下来job.set这个map output key。那K呢,是单词为K泰斯特点class OK。点map outp value呢是int点。
09:00
job.set最终输出,那就是output。他嗯,然后呢,它是test class。job.set我这个呢是。Out put value了吧,哎,好,Value value呢,就是int right点。可以吧,那再继续,嗯,再继续呢,就是这个输入路径和对应的输出路径了。那。呃,铺的。Input format。MAT啊对吧,那这里面导包别导错了。找长的OK。啊,然后点在这个输入路径,那我们这个输入路径肯定是要传进来的,对吧,因为未来要放大集群上旁,那我输入路径,那这里呢,仍然是二零。哎,正常处理,那再来。File。Output。Out。嗯。Formate format。
10:03
长的OK,第2SET输出路径,把job传进去,然后二一。哦,这个路径啊,这个路径要注意一下,他得你一个pass掉啊。把他放弃。好,又一个。Ha。对吧,哎,放进去行,那这个做好了之后,那最后这块返回谁呀,这块呢,你要提交啊job.wait for complication,哎处。监控,嗯,然后如果你执行成功的话,返回零,Else,返回一。这就对上了,那现在呢,我们还差一个drive驱动,对吧,这个位置没有写,那下面我们就创建一个drive驱动。那这也叫word。Hunt。Driver问题吧,哎,Driver。Java里面仍然是没方法。那这块就可以写上了,补齐了,呃,叫word count'。
11:03
Driver点啊。哎,整个这个驱动。Map radio写完,那我们再写一下这个driver,这个driver里面就是专门来处理对应的这个to接口相关的一些事情。那这里面用什么处理呢?首先呢,那这里面就得创建配置信息了啊叫创建。配置那就拗一个。Con。点半,那这样呢,就拿到了这个。那下面他还要处理一个,你看啊,我们之前的痛点是什么痛点啊,我们之前的痛点是这块。你传进来这个这个参数杠大地。他不应该把它认为是输入路径和输出路径,但实际呢,它确实传进来了。那我说的把它替掉,然后把剩余的这些内容传给真正的刚才我们写的那个word count那个,呃,那个main方法里面去,对吧,也就说我们要需要把这个处理掉之后。
12:00
把你前面的传连值去掉之后,然后再真正的传给他,然后X对应的2021,我们是这样操作。那在这里面就要处理这个事儿,那怎么处理呢。Switch。OS。第一个参数。来,我先判断你传进来第一个参数,那怎么判断呢?Case。如果你传进来参数是word。胖了。没问题吧,哎,我看看。那如果是word的话。那这时候我们就要拗一个突接口了啊,拗一个突接口。又有个word count,因为这个word count,它是不是实现了这个突接口啊,哎,实现突接口反过来,哎,我这样去用一个把它呢,变成全局的啊CTRL2加F。变成属性啊,提交上去后面我们还得调用它还得用呢,对吧。
13:05
如果不是,哎,如果说执行的不是这个word程序,那直接就new一个异常。没有。这个突接口,那这个突接口叫什么名呢。对吧,那你传进来谁就是谁,你传进来没有,那有的话呢,我就正常的创建一个它,那创建完之后这块呢,相当于是一个合法性的一个校验。对吧,那后面才是真正的执行。那怎么执行啊?Runner看到吗?哎,有这么一个它,然后点run方法,那run方法这里面有这个两个参数的啊,有商参数的,那选哪一个呢。选三个参数呢。啊,现场第一个传进来是一个配置信息,那给进来框。CTRL加P第二个参数呢,叫突接口,那把这接口给过来。
14:01
比如说给的接口就是word这个程序,那后面接下来。接下来你要传参数了,那现在哈,我如果运行的是图接口,那我传进来第一个参数是杠大D,然后对应的一个配置信息,然后再往后是X0X1知道吗?哎,那这块呢,其实我这块希望能够传到这个word count里面的只剩下输入路径和输入路径。那这块怎么处理呢。哎,他可以这样处理哈。哎,有一个copy of r,那这里面呢,是比如说两个数组之间的一个拷贝,我把你传进来的这个阿斯,它是不是多个参数啊,哎,我只取后面的两位,那怎么取呢。
15:00
哎,这样进行。哎,我将你传进来这个参数啊,哎,我从一开始拷啊,拷贝到你后面的所有的长度啊,现在就把后面的参数拷不过去,那从默认数组这个是从第零位开始啊,按把把这个零给你干掉啊,那个零呢,他认为是突接口相关参数,那这个呢是输入路径,它是输入入径。好,那这里面。哎,抛出异常。行,那这也是正常的一个处理,看到吗?这是执行程序,哎,这个to run,然后执行执行你一个突接口啊,然后把你这个阿克斯哎处理之后传过去,那这个呢,是对应的这个配置信息,配置信息呢,在这只扭一次。那这个写完之后,我们打包这个运行一下看看效果啊。
16:03
打包。看能不能执行。执行完了对吧,嗯,执行完了刷新一下,好,这个你刷新一下就有这个加班了,那这加班呢,我们来进去看一下哈。看一下这里面open。进到这个文件夹,然后把它拷贝出来。拿来之后这个名字有点太长了哈,我给他改个名字。哎,就叫这个可以吧,把它拿掉啊,下班OK,那拿到它之后啊,我把这个上传到这个对应的集群上。集群上传到就到这儿。拽过来。OK,执行完毕,那上传过来之后呢,下面呢,我们开始执行这个程序,那现在怎么执行呢?这样执行。
17:01
雅安架包啊,雅安这个价,然后呢,全列名对吧,哎,驱动的全列名,然后work count input output,先看它能不能正常的执行。直接执行。看看它能不能执行啊,先保证这个正常,这个代码得OK,然后呢,我们再考虑这个增加参数。好,执行完毕了,那执行完毕之后呢,我们来看一下效果。刷新OUT1打开打开。对吧,哎,Word看程序呢,是没有任何问题的,可以执行,那接下来我们来试一下,我给它加上对应的这个杠大D这个参数之后,它能不能正常运行。啊,这一参数。好,那我们再来执行一下。
18:04
现在说这个out已经存在啊,因为我们这个改成OUT2是。看目前运行良好。感觉有希望了。是吧,哎,加上它呢也能运行,不加呢也能运行。好是吧,OK,没问题,那下面我再来变做一个变化啊,这样变化。呃,我把它呢变成这个word count2,你说我传着一个非法的这个图接口,那看它会提示什么。你看说这个no such to work on to对吧,这就是我们抛那个异常吧,在这个位置。嗯,这个位置抛的啊,自己抛的哈,行,那我们看一下这个刚才这个OUTPUT2这个结果对不对啊。OUTPUT2,这是OUTPUT2吧,然后打开。是吧,也是OK的哈,行,那这个呢,就是这个突接口在企业开发的时候啊,也是大量的一个使用啊,非常有用哈,啊下面如果说整个这个雅安集群你执行完毕之后,你可以恢复到这个快照之前的状态啊,恢复到雅安一对吧,之前咱们嗯在讲这个案例开始的时候啊,已经做好了这个快照,你可以进行一个恢复啊。
我来说两句