MapReduce经典例子WordCount运行详解.docx
HaclpM叩RedUCe经典例子WordCount运行详解1、MaPRCdUCC理论简介1.1MaPRedUCe编程模型M叩RedUce采纳“分而治之”的思想.把对大规模数据集的操作,分发蛤个主节点背理卜的各个分节点共同完成,然后通过整合各个节点的中间结果,得刎破终结果.简洁地说,MapKwiuceM星一任务的分够及结果的汇总7在Hadwp中,用于执行MapRMcc任务的机器角色有两个;一个是JObTnlCk5另一个是TaskTrackcr.JobTrackcr是用于讽度工作的,TaskTruckcr是用于执行工作的.一个Hadwp奥群中只有一台JubTmcker.在分布式计灯中,MaPRUdUCe框架负货处理了并行编程中分布式存储、工作调度、负我均ft、容错均衡、容错处理以及网络通信等困用问趟.把处理过程离度抽象为两个由数:InaP和mducemap夕发把任务分解成多个任务reduce负货杷分解后多任务处理的豺果汇总起来。於要留意的是,川M叩RCdUeC来处理的数据”式或任务必需具的这样的特点:待处理的数据蛆可以分解成我多小的数据梁,而旦每一个小数据里都可以完全并行地进行处理,102MaPRedUCe处理过程理.每个reduce产生。或1个输出,reduce的输出也是<key.InputMappersMiddleResultI;11ISPliIo-ap()-5JII1M)lit2二BaP()jzZlMMapReduce处理大数据集的过程Value形式的.ReducersOutputr r<lv()UPartO_TT_1 rediwnO1parti在Hadoop中,每个MaPRCdlKC任务都被初始化为一个Job,每个Job乂可以分为两种阶段:nap阶段和reduce阶段.这两个阶段分别用两个函数表示,即map函数和reduce«ft.nap函数接收一个key,value形式的输入,然后同样产生一个(key.value)形式的中间输出,Hadoop函数接收一个Kkey.(listofvalues)影式的输入,然后对这个WdUe集合进行处2、运行WOrdCOUnt程序单诃il数是域新洁也迁址能体现MaPRalgC思忸的程序之、可以称为M叩RCdUce版-HelloWorid-,该程序的完整代码可以在Hadoop安装包的-srcexailesw书目下找到.单词计数主要完胜利能是:统计一系列文本文件中每个统词出现的次数,如下图所乐.2.1打算工作现在以"hadoo一般用户登录“Mcer.Hadoop”服务等.I)创建本地示例文件忏先在“h<hadoop”书目下创建文件夹"file".hdopMAStcr"J$11怨闰量141372-rw-r-r-.1hadoophadoop59468784w-r-r-.1hadooohadcoo85292206IhadoopOMaster*Jjakdir"/filehdoop9Mster11总冏量141376drwxrwxr-x.2hadoophadoop4096-rw-r-r-.1hadoophadeop59468784-rw-r-r-.1hadoophadoop85292206IhadooDOMastcr'$22703:312月2703:29jdk-631-liruxwiS86.bin3月205:312月2703:312月2703:29jdk-6u31-linux-i586.bin接着创建两个文本文件和.内容为使“肥11。WOrld”而.的内容为“Hell。Hadoop".flicecho,HelIoWorld*>fiIe1.txtecho"HelloHadoop">fiIc2.txthadoooaM03tcr7$odhsdoopPMasterfile$hdoop<jM3tcrfilc$hadoop?MasterfiieS总用手8-rw-rw-r-1hadoophadoop123月205:35filettxt-rrw-r-1hdccDhad。口133:had。ODQMAsterfiIe$morefiId.txtHelloWorldhadoopMastcrfile$morefiIe2.txt,clloHGdOODhadoooMasterfilcj$-2)ftHDFS上创建输入文件夹1.hadooliaeter'ihadoopfcFkdirinputhdooQ9Ha9tcrhodoopto-1«Found1itemsdrwxr-xr-x-hadoopsupergroupIhadoocXHiaster02O12F3-O205:417userhadgpinput3>I:传本地Iilc中文件到嶷群的inptI11IF1.hadoopillasterIhdo><VotorFogd2tffs-rr-r-r-1-rir-r-r-1:hadog*3ter')$hdcopft-put'filfiletxtinputhadoopfo-linputhdoopsupergrouphMguocrrouo202运行例子122012-03-0205:45u*crhdoop/inf>utfiIcl.txt132012-00205:45ucrMdooo/irwut/fiIc2.txt】)在蜒群上运行WoMCount科摩的注:以i5作为输入书目,output书目作为输出书目.已燎墉洋好的WonjCcmnt的Jar在ushcdoop"下面,-hndoop-cx<wlcs.O.O.jmr"就是,所以在下面执行吩叫时记得把路径当全U不然会提示找不到该Jar包."SH/Whadoooere©irhadoDM8g6W0M16htd&oph8g3732816had8oMdooo142465216hd8pha8g2S307371216hdopMdoeo287776IZlJ1600:39hdooo-11t-1.0.0.jfg39Mgpff1QD,00:39badooo"ei»no»e»*100jf00:39l'd<x>-tcftt-1.0.6.)rw39hggnrg8-100jr徜入,2出文科克Ihadooo*VaeterJlhdooorurhadoooMdoo<re*oe-1.O.Ojrw%stIneUt8QQut皿2HWnr<IC.fJ.rHF:t'2)MapRcducc执行过H显示信息(hdoo-,Mfloter;$Kadgpjrurhdooph<jooo-CBoIce-I0.0jenordcou11tInPVtoutput12O3C206:07:36INFOinout.FiIeInpvtormat;Iotalinputpathstoprocess:212/03/02120312/03/0212/03/0212/03/0212/03/0212/03/02M;07:3606:07:3706:07:5106:07:5206:06:06MgIlW;06;11IMFOg>rcd.JobCIcnt.INhORraoredJoM11entINFOaored.UObClientllr0forcd.SbCIicnt-IMFOvaoredJobCIientINFOaredJobCliMtINFOwhored.JobCIientRunn11job.job2012022922130002IW0reduce0%ciaoS0reduce0“0100%reduce0、o100%reduce100JobOOflpIctc:job2012022922U_0002Counter,29HWoOP吩咐会启动个JVM来运行这个M叩RedMC程序.并日动获得HadOOP的配ft同时把类的路径(及其依靠关系)加入到Hadoop的阵中.以上就是HadoopJob的运行记录.从这里可以看到,这个Job被给予了一个ID号:job_2。002,而且得知输人文件有两个(TOtalinputpathstoprocess:2).同时还可以了解mup的输入出记求(record数及字15数,以及reduce输入物出记录.比如说,在本例中,,固,的Usk敢垃是2个,reduce的task数录是一个,lp的舱入record数是2个,物出rcco11J数是4个等信息。2。3查看结果I)代看HDFStOUlPlrt书目内容02012-0X)206:08/ur<Joo0/out©uV.SUCCfeSS02012-03-0206:0,/uerdooooutCMt*.locs252O12O3O206:07/user/hodoop/output/part-r-00000IhadooodNafiterhadoopf«-Ieoutput卜。Und3Iteas"r<-r-r-1hScpuo<rcrupdrxr-r-hadoooSuoereroup-r»-r-r-1hadoopsupergrouphadocpOMaoter'J$从上图中知道生成了三个文件.我们的结果在“Part-r-<XX)00中.2)簧衣结果输出文件内容(ludoopfiter$hadoopft-catoutput/part-r-OO(XX)Iadoop1IIello2>orld1IhadoOPQltaSter'$3、WOrdCoUnt源码分析3.1 特殊数据类型介绍HadgP供应了如下内容的数据类型,这些数据类型都实现了WritabIeCOmparabkftl1,以便用这些类型定义的数据可以被序列化迸行附络传输和文件存储.以及进行大小比较.BooIeanWriiabIe:标准布尔也数值ByicWritabk:单字15数值DixibleWfitabIe:双字H,敢FloatWritabIc1浮点StIntWritablc:整型数1.ongWritabIc:长!KW数TcxtriSMJUTFS格式存储的文本NuIIWriiabk:'*l<key.vaue>中的key或value为空时运用3.2 IB的WOrdCoUnt分析I)海代码程序packageorg.apache<.hadp,examples:importjava.io.iOExcetion:importjavau(i1.Iterator:importjava.util.StringTokcnizcr;inc>11o.aacle.hadc.fs.Path:importorg.apachc.hadoop<io.IntWritabic:importorg.apchc.hadoop.io.1.ongWritable:importorg.apuchc.ha