資源描述:
《Hadoop編程入門》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、Hadoop編程入門Hadoop是GoogleMapReduce的一個Java實現(xiàn)。MapReduce是一種簡化的分布式編程模式,讓程序自動分布到一個由普通機器組成的超大集群上并發(fā)執(zhí)行。就如同java程序員可以不考慮內(nèi)存泄露一樣,MapReduce的run-time系統(tǒng)會解決輸入數(shù)據(jù)的分布細節(jié),跨越機器集群的程序執(zhí)行調(diào)度,處理機器的失效,并且管理機器之間的通訊請求。這樣的模式允許程序員可以不需要有什么并發(fā)處理或者分布式系統(tǒng)的經(jīng)驗,就可以處理超大的分布式系統(tǒng)得資源。 一、概論 作為Hadoop程序員,他要做的
2、事情就是: 定義Mapper,處理輸入的Key-Value對,輸出中間結(jié)果?! 《xReducer,可選,對中間結(jié)果進行規(guī)約,輸出最終結(jié)果?! 《xInputFormat和OutputFormat,可選,InputFormat將每行輸入文件的內(nèi)容轉(zhuǎn)換為Java類供Mapper函數(shù)使用,不定義時默認為String?! 《xmain函數(shù),在里面定義一個Job并運行它。然后的事情就交給系統(tǒng)了?! 』靖拍睿篐adoop的HDFS實現(xiàn)了google的GFS文件系統(tǒng),NameNode作為文件系統(tǒng)的負責調(diào)度運行在mast
3、er,DataNode運行在每個機器上。同時Hadoop實現(xiàn)了Google的MapReduce,JobTracker作為MapReduce的總調(diào)度運行在master,TaskTracker則運行在每個機器上執(zhí)行Task?! ain()函數(shù),創(chuàng)建JobConf,定義Mapper,Reducer,Input/OutputFormat和輸入輸出文件目錄,最后把Job提交給JobTracker,等待Job結(jié)束。 JobTracker,創(chuàng)建一個InputFormat的實例,調(diào)用它的getSplits()方法,把輸入目
4、錄的文件拆分成FileSplist作為Mappertask的輸入,生成Mappertask加入Queue。TaskTracker向JobTracker索求下一個Map/Reduce?! apperTask先從InputFormat創(chuàng)建RecordReader,循環(huán)讀入FileSplits的內(nèi)容生成Key與Value,傳給Mapper函數(shù),處理完后中間結(jié)果寫成SequenceFile.ReducerTask從運行Mapper的TaskTracker的Jetty上使用http協(xié)議獲取所需的中間內(nèi)容(33%),So
5、rt/Merge后(66%),執(zhí)行Reducer函數(shù),最后按照OutputFormat寫入結(jié)果目錄?! askTracker每10秒向JobTracker報告一次運行情況,每完成一個Task10秒后,就會向JobTracker索求下一個Task?! utch項目的全部數(shù)據(jù)處理都構(gòu)建在Hadoop之上,詳見ScalableComputingwithHadoop。 二、程序員編寫的代碼 我們做一個簡單的分布式的Grep,簡單對輸入文件進行逐行的正則匹配,如果符合就將該行打印到輸出文件。因為是簡單的全部輸出,
6、所以我們只要寫Mapper函數(shù),不用寫Reducer函數(shù),也不用定義Input/OutputFormat?! ackagedemo.hadooppublicclassHadoopGrep{ publicstaticclassRegMapperextendsMapReduceBaseimplementsMapper{ privatePatternpattern; publicvoidconfigure(JobConfjob){pattern=Pattern.compile(job.get("mapred.
7、mapper.regex")); } publicvoidmap(WritableComparablekey,Writablevalue,OutputCollectoroutput,Reporterreporter) throwsIOException{ Stringtext=((Text)value).toString();Matchermatcher=pattern.matcher(text); if(matcher.find()){output.collect(key,value); } }
8、 } privateHadoopGrep(){ }//singleton publicstaticvoidmain(String[]args)throwsException{ JobConfgrepJob=newJobConf(HadoopGrep.class); grepJob.setJobName("grep-search"); grepJob.set("mapred