版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
實訓(xùn)3.2單詞計數(shù)1.實訓(xùn)目的基于MapReduce編程思想,編寫WordCount程序。2.實訓(xùn)內(nèi)容理解MapReduce編程思想,掌握編寫MapReduce版本W(wǎng)ordCount,了解該程序的執(zhí)行流程,結(jié)合執(zhí)行過程與結(jié)果,理解MapReduce的原理。3.實訓(xùn)要求以小組為單元進行實訓(xùn),每小組5人,小組自協(xié)商選一位組長,由組長安排和分配實訓(xùn)任務(wù),具體參考實訓(xùn)操作環(huán)節(jié)。小組成員需要具備HDFS分布式存儲基礎(chǔ)相關(guān)知識,并確保具備前面的實訓(xùn)環(huán)境。4.準(zhǔn)備知識(1)MapReduce編程編寫在Hadoop中依賴YARN框架執(zhí)行的MapReduce程序,大部分情況下只需要編寫相應(yīng)的Map處理和Reduce處理過程的業(yè)務(wù)程序即可,因為大部分的代碼,Hadoop已經(jīng)幫我們寫好了。所以編寫一個MapReduce程序并不復(fù)雜,關(guān)鍵點在于掌握分布式的編程思想和方法,主要將計算過程分為以下五個步驟:①迭代。遍歷輸入數(shù)據(jù),并將之解析成<Key,Value>鍵值對。②將輸入的<Key,Value>鍵值對映射(map)成新的<Key,Value>鍵值對。③依據(jù)Key對中間數(shù)據(jù)進行分組。④以組為單位對數(shù)據(jù)進行Reduce。⑤迭代。將最終產(chǎn)生的<Key,Value>鍵值對保存到輸出文件中。(2)JavaAPI解析①InputFormat:用于描述輸入數(shù)據(jù)的格式,常用為TextInputFormat,其提供如下兩個功能:數(shù)據(jù)切分:按照某種策略將輸入數(shù)據(jù)切分成若干個數(shù)據(jù)塊,以便確定MapTask個數(shù)以及對應(yīng)的數(shù)據(jù)分片。為Map任務(wù)提供數(shù)據(jù):給定某個數(shù)據(jù)分片,能將其解析成一個個的<Key,Value>鍵值對。②OutputFormat:用于描述輸出數(shù)據(jù)的格式,它能夠?qū)⒂脩籼峁┑?lt;Key,Value>鍵值對寫入特定格式的文件中。③Mapper/Reducer:封裝了應(yīng)用程序的數(shù)據(jù)處理邏輯。④Writable:Hadoop自定義的序列化接口,實現(xiàn)該類的接口可以用作MapReduce過程中的Value數(shù)據(jù)使用。⑤WritableComparable:在Writable基礎(chǔ)上繼承了Comparable接口,實現(xiàn)該類的接口可以用作MapReduce過程中的Key數(shù)據(jù)使用。因為Key包含了比較和排序的操作。5.實訓(xùn)步驟本實訓(xùn)包含四大步驟:準(zhǔn)備運行環(huán)境、準(zhǔn)備統(tǒng)計數(shù)據(jù)、編寫MapReduce程序、打包并運行代碼。查看運行結(jié)果這幾個步驟,詳細如下:(1)準(zhǔn)備運行環(huán)境啟動三臺節(jié)點,然后在master中啟動HDFS和YARN:start-dfs.shstart-yarn.sh(2)準(zhǔn)備統(tǒng)計數(shù)據(jù)新建待統(tǒng)計文件word.txt,并上傳數(shù)據(jù)到HDFS上vim/root/datas/word.txt內(nèi)容如下:hellohdfshadoophivehellomapreducehellosparksparkaibigdata將word.txt文件上傳到HDFS集群hdfsdfs-put/root/datas/word.txt/查看是否上傳成功,如圖3-所示則表示上傳成功。圖3-查看上傳結(jié)果(3)引入編寫MapReduce程序相關(guān)的jar包本次實訓(xùn)繼續(xù)使用實訓(xùn)2.3的環(huán)境,但編寫MapReduce程序需要引入相關(guān)的jar包,此時繼續(xù)引入hadoop-mapreduce-client-core.jar包。如圖3-所示。圖3-導(dǎo)入MapReduce依賴包(4)編寫MapReduce程序編寫MapReduce程序主要是編寫Map類和Reduce類,其中Map過程需要繼承org.apache.hadoop.mapreduce包中Mapper類,并重寫其map方法;Reduce過程需要繼承org.apache.hadoop.mapreduce包中Reducer類,并重寫其reduce方法。在com.bigdata包(沒有則新建)下新建WordCount類,添加以下代碼:packagecom.bigdata;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.io.IntWritable;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapreduce.Job;importorg.apache.hadoop.mapreduce.Mapper;importorg.apache.hadoop.mapreduce.Reducer;importorg.apache.hadoop.mapreduce.lib.input.TextInputFormat;importorg.apache.hadoop.mapreduce.lib.output.TextOutputFormat;importorg.apache.hadoop.mapreduce.lib.partition.HashPartitioner;importjava.io.IOException;importjava.util.StringTokenizer;publicclassWordCount{publicstaticclassTokenizerMapperextendsMapper<Object,Text,Text,IntWritable>{privatefinalstaticIntWritableone=newIntWritable(1);privateTextword=newText();//map方法,劃分一行文本,讀一個單詞寫出一個<單詞,1>publicvoidmap(ObjectKey,Textvalue,Contextcontext)throwsIOException,InterruptedException{StringTokenizeritr=newStringTokenizer(value.toString());while(itr.hasMoreTokens()){word.set(itr.nextToken());context.write(word,one);//寫出<單詞,1>}}}//定義reduce類,對相同的單詞,把它們<K,VList>中的VList值全部相加publicstaticclassIntSumReducerextendsReducer<Text,IntWritable,Text,IntWritable>{privateIntWritableresult=newIntWritable();publicvoidreduce(TextKey,Iterable<IntWritable>values,Contextcontext)throwsIOException,InterruptedException{intsum=0;for(IntWritableval:values){sum+=val.get();//相當(dāng)于<Hello,1><Hello,1>,將兩個1相加}result.set(sum);context.write(Key,result);//寫出這個單詞,和這個單詞出現(xiàn)次數(shù)<單詞,單詞出現(xiàn)次數(shù)>}} publicstaticvoidmain(String[]args)throwsException{//主方法,函數(shù)入口 //TODOAuto-generatedmethodstub Configurationconf=newConfiguration();//實例化配置文件類Jobjob=newJob(conf,"WordCount");//實例化Job類job.setInputFormatClass(TextInputFormat.class);//指定使用默認輸入格式類TextInputFormat.setInputPaths(job,args[0]);//設(shè)置待處理文件的位置job.setJarByClass(WordCount.class);//設(shè)置主類名job.setMapperClass(TokenizerMapper.class);//指定使用上述自定義Map類job.setCombinerClass(IntSumReducer.class);//指定開啟Combiner函數(shù)job.setMapOutputKeyClass(Text.class);//指定Map類輸出的<K,V>,K類型job.setMapOutputValueClass(IntWritable.class);//指定Map類輸出的<K,V>,V類型job.setPartitionerClass(HashPartitioner.class);//指定使用默認的HashPartitioner類job.setReducerClass(IntSumReducer.class);//指定使用上述自定義Reduce類job.setNumReduceTasks(Integer.parseInt(args[2]));//指定Reduce個數(shù)job.setOutputKeyClass(Text.class);//指定Reduce類輸出的<K,V>,K類型job.setOutputValueClass(Text.class);//指定Reduce類輸出的<K,V>,V類型job.setOutputFormatClass(TextOutputFormat.class);//指定使用默認輸出格式類TextOutputFormat.setOutputPath(job,newPath(args[1]));//設(shè)置輸出結(jié)果文件位置System.exit(job.waitForCompletion(true)?0:1);//提交任務(wù)并監(jiān)控任務(wù)狀態(tài) }}(5)打包并運行代碼打包后的文件名為hadoop-project.jar,上傳到master節(jié)點的/root/jars目錄。主類WordCount位于包com.bigdata下,則可使用如下命令向YARN集群提交本應(yīng)用。yarnjarhadoop-project.jarcom.bigdata.WordCount/word.txt/wc_output1其中“yarn”為命令,“jar”為命令參數(shù),后面緊跟打包后的代碼地址,“com.bigdata”為包名,“WordCount”為主類名,第一個參數(shù)“/word.txt”為輸入文件在HDFS中的位置,第二個參數(shù)“/wc_output”為輸出文件在HDFS中的位置,第三個參數(shù)“1”表示需要統(tǒng)計成Reduce文件的個數(shù)。注意:“/word.txt”、“/wc_output”、“1”之間都有一個空格。同時需要啟動HDFS和YARN。(6)實訓(xùn)結(jié)果程序運行成功控制臺上的顯示內(nèi)容如圖3-15、圖3-16所示。圖3-15向YARN集群提交應(yīng)用圖3-16程序運行結(jié)果在HDFS上查看結(jié)果,如圖3-17、圖3-18所示。hdfsdfs-ls/wc_output圖3-17查看/wc_output目錄下的目錄和文件hdfsdfs-cat/wc_output/part-r-00000圖3-18HDFS上顯示結(jié)果6.實訓(xùn)總結(jié)實訓(xùn)基于MapReduce編程思想,編寫MRJava版
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國農(nóng)村醫(yī)療保障制度的補償模式研究
- 鞍鋼集團有限公司介紹
- 2025 除夕傳統(tǒng)文化介紹
- 二零二五年度區(qū)塊鏈合伙人退伙共識機制契約3篇
- 2025商業(yè)地產(chǎn)蛇年國潮新春廟會市集(敦煌非遺玩趣廟會主題)活動策劃方案-80正式版
- 軍令狀企業(yè)誓師大會
- 五金電工知識培訓(xùn)課件
- 可降解塑料餐具、5800噸塑料托盤、托盒項目可行性研究報告寫作模板-申批備案
- 二零二五年度房產(chǎn)贈與與文化遺產(chǎn)保護合同3篇
- 江西省上饒市2024-2025學(xué)年度第一學(xué)期九年級道德與法治學(xué)科期末綠色評價試卷(含答案)
- GB/T 12494-1990食品機械專用白油
- 西交大少年班英語考試試題
- 北京語言大學(xué)保衛(wèi)處管理崗位工作人員招考聘用【共500題附答案解析】模擬試卷
- 初中生物人教七年級上冊(2023年更新) 生物圈中的綠色植物18 開花和結(jié)果
- 水電解質(zhì)及酸堿平衡的業(yè)務(wù)學(xué)習(xí)
- CSCEC8XN-SP-安全總監(jiān)項目實操手冊
- 口腔衛(wèi)生保健知識講座班會全文PPT
- 成都市產(chǎn)業(yè)園區(qū)物業(yè)服務(wù)等級劃分二級標(biāo)準(zhǔn)整理版
- 最新監(jiān)督學(xué)模擬試卷及答案解析
- ASCO7000系列GROUP5控制盤使用手冊
- 污水處理廠關(guān)鍵部位施工監(jiān)理控制要點
評論
0/150
提交評論