版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
實(shí)訓(xùn)3.2單詞計(jì)數(shù)1.實(shí)訓(xùn)目的基于MapReduce編程思想,編寫WordCount程序。2.實(shí)訓(xùn)內(nèi)容理解MapReduce編程思想,掌握編寫MapReduce版本W(wǎng)ordCount,了解該程序的執(zhí)行流程,結(jié)合執(zhí)行過程與結(jié)果,理解MapReduce的原理。3.實(shí)訓(xùn)要求以小組為單元進(jìn)行實(shí)訓(xùn),每小組5人,小組自協(xié)商選一位組長,由組長安排和分配實(shí)訓(xùn)任務(wù),具體參考實(shí)訓(xùn)操作環(huán)節(jié)。小組成員需要具備HDFS分布式存儲基礎(chǔ)相關(guān)知識,并確保具備前面的實(shí)訓(xùn)環(huán)境。4.準(zhǔn)備知識(1)MapReduce編程編寫在Hadoop中依賴YARN框架執(zhí)行的MapReduce程序,大部分情況下只需要編寫相應(yīng)的Map處理和Reduce處理過程的業(yè)務(wù)程序即可,因?yàn)榇蟛糠值拇a,Hadoop已經(jīng)幫我們寫好了。所以編寫一個MapReduce程序并不復(fù)雜,關(guān)鍵點(diǎn)在于掌握分布式的編程思想和方法,主要將計(jì)算過程分為以下五個步驟:①迭代。遍歷輸入數(shù)據(jù),并將之解析成<Key,Value>鍵值對。②將輸入的<Key,Value>鍵值對映射(map)成新的<Key,Value>鍵值對。③依據(jù)Key對中間數(shù)據(jù)進(jìn)行分組。④以組為單位對數(shù)據(jù)進(jìn)行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自定義的序列化接口,實(shí)現(xiàn)該類的接口可以用作MapReduce過程中的Value數(shù)據(jù)使用。⑤WritableComparable:在Writable基礎(chǔ)上繼承了Comparable接口,實(shí)現(xiàn)該類的接口可以用作MapReduce過程中的Key數(shù)據(jù)使用。因?yàn)镵ey包含了比較和排序的操作。5.實(shí)訓(xùn)步驟本實(shí)訓(xùn)包含四大步驟:準(zhǔn)備運(yùn)行環(huán)境、準(zhǔn)備統(tǒng)計(jì)數(shù)據(jù)、編寫MapReduce程序、打包并運(yùn)行代碼。查看運(yùn)行結(jié)果這幾個步驟,詳細(xì)如下:(1)準(zhǔn)備運(yùn)行環(huán)境啟動三臺節(jié)點(diǎn),然后在master中啟動HDFS和YARN:start-dfs.shstart-yarn.sh(2)準(zhǔn)備統(tǒng)計(jì)數(shù)據(jù)新建待統(tǒng)計(jì)文件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包本次實(shí)訓(xùn)繼續(xù)使用實(shí)訓(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();//實(shí)例化配置文件類Jobjob=newJob(conf,"WordCount");//實(shí)例化Job類job.setInputFormatClass(TextInputFormat.class);//指定使用默認(rèn)輸入格式類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);//指定使用默認(rèn)的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);//指定使用默認(rèn)輸出格式類TextOutputFormat.setOutputPath(job,newPath(args[1]));//設(shè)置輸出結(jié)果文件位置System.exit(job.waitForCompletion(true)?0:1);//提交任務(wù)并監(jiān)控任務(wù)狀態(tài) }}(5)打包并運(yùn)行代碼打包后的文件名為hadoop-project.jar,上傳到master節(jié)點(diǎn)的/root/jars目錄。主類WordCount位于包c(diǎn)om.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)計(jì)成Reduce文件的個數(shù)。注意:“/word.txt”、“/wc_output”、“1”之間都有一個空格。同時需要啟動HDFS和YARN。(6)實(shí)訓(xùn)結(jié)果程序運(yùn)行成功控制臺上的顯示內(nèi)容如圖3-15、圖3-16所示。圖3-15向YARN集群提交應(yīng)用圖3-16程序運(yùn)行結(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.實(shí)訓(xùn)總結(jié)實(shí)訓(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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 縱軸套課程設(shè)計(jì)
- 生活物品配對課程設(shè)計(jì)
- 文學(xué)音樂融合課程設(shè)計(jì)
- 法醫(yī)實(shí)驗(yàn)課程設(shè)計(jì)
- 電路板原理課程設(shè)計(jì)
- 真空泵課程設(shè)計(jì)
- 愛國課程設(shè)計(jì)體育
- 污水廠課程設(shè)計(jì)sbr
- 樁身配筋圖 課程設(shè)計(jì)
- 電容器制造中的空氣質(zhì)量控制考核試卷
- CypTube激光切割軟件用戶手冊V6.4.0
- 學(xué)前兒童健康教育形考任務(wù)4試題及答案
- 區(qū)域檢驗(yàn)中心項(xiàng)目構(gòu)建書-定稿
- 肺栓塞最新版課件
- 股權(quán)轉(zhuǎn)讓情況明細(xì)表
- 安裝手電筒基礎(chǔ)工業(yè)工程課程設(shè)計(jì)
- 導(dǎo)管相關(guān)性血流感染PPT
- 2022年四川省成都市武侯區(qū)七年級上學(xué)期期末語文試卷
- 過程開發(fā)流程圖
- 企業(yè)內(nèi)部申請北京工作居住證管理制度
- 08S305-小型潛水泵選用及安裝圖集
評論
0/150
提交評論