第15章 分布式大數(shù)據(jù)處理平臺(tái)Hadoop-習(xí)題答案_第1頁(yè)
第15章 分布式大數(shù)據(jù)處理平臺(tái)Hadoop-習(xí)題答案_第2頁(yè)
第15章 分布式大數(shù)據(jù)處理平臺(tái)Hadoop-習(xí)題答案_第3頁(yè)
第15章 分布式大數(shù)據(jù)處理平臺(tái)Hadoop-習(xí)題答案_第4頁(yè)
第15章 分布式大數(shù)據(jù)處理平臺(tái)Hadoop-習(xí)題答案_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第15章分布式大數(shù)據(jù)處理平臺(tái)Hadoop習(xí)題15.1選擇題1、分布式系統(tǒng)的特點(diǎn)不包括以下的(D)。A.分布性B.高可用性C.可擴(kuò)展性D.串行性2、Hadoop平臺(tái)中的(B)負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)。A.NamenodeB.DatanodeC.JobTrackerD.SecondaryNamenode3、HDFS中block的默認(rèn)副本數(shù)量是(A)。A.3B.2C.1D.44、下面與HDFS類似的框架是(C)。A.NTFS B.FAT32 C.GFS D.EXT35、以下關(guān)于SecondaryNamenode的說(shuō)法正確的是(B)。A.是元數(shù)據(jù)節(jié)點(diǎn)出現(xiàn)故障時(shí)的備用節(jié)點(diǎn)B.周期性地將元數(shù)據(jù)節(jié)點(diǎn)的命名空間鏡像文件與修改日志進(jìn)行合并C.與元數(shù)據(jù)節(jié)點(diǎn)之間無(wú)需交互D.對(duì)內(nèi)存沒(méi)有要求6、下列關(guān)于MapReduce的說(shuō)法不正確的是(C)。A.MapRecuce可用于處理分布在幾千臺(tái)機(jī)器上的數(shù)據(jù) B.MapReduce是一種處理大數(shù)據(jù)的分布式計(jì)算模式C.MapReduce程序只能用C語(yǔ)言編寫 D.MapReduce隱藏了并行計(jì)算的細(xì)節(jié),方便使用7、下面哪一個(gè)是一種編程模型,將大規(guī)模的數(shù)據(jù)處理工作拆分成互相獨(dú)立的任務(wù)然后進(jìn)行并行處理(A)。A.MapReduce B.HDFSC.HBase D.Pig8、HBase基于(A)存儲(chǔ)底層數(shù)據(jù)。A.HDFS B.HadoopC.內(nèi)存 D.MapReduce9、下面關(guān)于HBase錯(cuò)誤的是(A)。A.不是開源的 B.面向列的C.分布式的 D.NoSQL數(shù)據(jù)庫(kù)10、配置Hadoop時(shí),JAVA_HOME包含在(B)配置文件中。A.Hadoop-default.xml B.hadoop-env.shC.Hadoop-site.xml D.Configuration.xsl15.2填空題1、HDFS的基本數(shù)據(jù)存儲(chǔ)單位是(數(shù)據(jù)塊)。2、MapReduce按照時(shí)間順序可以分為輸入分片、(Map階段)、Combiner階段、(Shuffle階段)和(Reduce階段)。15.3簡(jiǎn)答題1、Hadoop主要有哪些優(yōu)點(diǎn)?答:擴(kuò)容能力強(qiáng)。Hadoop能可靠存儲(chǔ)和處理PB級(jí)的數(shù)據(jù)。成本低。Hadoop能通過(guò)普通機(jī)器組成的服務(wù)器集群來(lái)分發(fā)和處理數(shù)據(jù),服務(wù)器集群規(guī)??蛇_(dá)數(shù)千個(gè)節(jié)點(diǎn)。效率高。Hadoop能通過(guò)分發(fā)數(shù)據(jù),在數(shù)據(jù)所在的節(jié)點(diǎn)上并行地進(jìn)行處理,使得處理非??焖佟?煽啃?。Hadoop能自動(dòng)維護(hù)數(shù)據(jù)的多份副本,并在任務(wù)失敗后自動(dòng)地重新部署計(jì)算任務(wù)。高容錯(cuò)性。Hadoop能在不同的節(jié)點(diǎn)上維護(hù)多份副本,對(duì)于訪問(wèn)失敗的節(jié)點(diǎn),Hadoop會(huì)自動(dòng)尋找副本所在的節(jié)點(diǎn)進(jìn)行訪問(wèn)2、請(qǐng)用描述HDFS讀取文件的具體步驟。答:客戶端用分布式文件系統(tǒng)的open()函數(shù)打開文件。分布式文件系統(tǒng)遠(yuǎn)程調(diào)用RPC,獲取元數(shù)據(jù)節(jié)點(diǎn)的文件數(shù)據(jù)塊信息;對(duì)于返回的每一個(gè)數(shù)據(jù)塊信息,元數(shù)據(jù)節(jié)點(diǎn)只返回保存數(shù)據(jù)塊的數(shù)據(jù)節(jié)點(diǎn)的地址;接著分布式文件系統(tǒng)返回FSDataInputStream對(duì)象給客戶端,其中封裝了讀取數(shù)據(jù)的方法。客戶端調(diào)用FSDataInputStream中的read()函數(shù)開始讀取數(shù)據(jù);FSDataInputStream封裝了DFSInputStream對(duì)象中用于管理元數(shù)據(jù)節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)的I/O操作的方法,客戶端調(diào)用read()函數(shù)后,使用DFSInputStream對(duì)象中的I/O操作;DFSInputStream連接一直保持,直到當(dāng)前讀取的文件中第一個(gè)數(shù)據(jù)塊的最近數(shù)據(jù)節(jié)點(diǎn)中的數(shù)據(jù)讀到客戶端后,DFSInputStream會(huì)關(guān)閉和此數(shù)據(jù)節(jié)點(diǎn)的連接;然后連接此文件的下一個(gè)數(shù)據(jù)塊的最近數(shù)據(jù)節(jié)點(diǎn)。若在讀取數(shù)據(jù)的過(guò)程中,客戶端與數(shù)據(jù)節(jié)點(diǎn)的通信出現(xiàn)錯(cuò)誤,則嘗試連接包含此數(shù)據(jù)塊的下一個(gè)數(shù)據(jù)節(jié)點(diǎn);失敗的數(shù)據(jù)節(jié)點(diǎn)將被記錄,以后不再連接。當(dāng)客戶端讀取完數(shù)據(jù)時(shí),調(diào)用DFSInputStream的close()函數(shù),結(jié)束讀取過(guò)程。3、請(qǐng)描述HDFS寫文件的具體過(guò)程。答:客戶端調(diào)用create()函數(shù)來(lái)創(chuàng)建文件。分布式文件系統(tǒng)遠(yuǎn)程調(diào)用RPC,在元數(shù)據(jù)節(jié)點(diǎn)的命名空間中創(chuàng)建一個(gè)新的文件。元數(shù)據(jù)節(jié)點(diǎn)在確定文件不存在,并且客戶端有創(chuàng)建文件的權(quán)限后,創(chuàng)建新文件。創(chuàng)建完成后,分布式文件系統(tǒng)返回DFSOutputStream對(duì)象給客戶端,用于寫數(shù)據(jù)。文件系統(tǒng)返回DFSOutputStream對(duì)象給客戶端,用于寫數(shù)據(jù)。當(dāng)客戶端開始寫數(shù)據(jù)時(shí),調(diào)用DFSOutputStream中的方法將數(shù)據(jù)分成塊并寫入數(shù)據(jù)隊(duì)列;數(shù)據(jù)隊(duì)列由DataStreamer讀取,并通知元數(shù)據(jù)節(jié)點(diǎn)分配數(shù)據(jù)節(jié)點(diǎn),用來(lái)存儲(chǔ)數(shù)據(jù)塊(每個(gè)數(shù)據(jù)塊均默認(rèn)復(fù)制3份),分配的數(shù)據(jù)節(jié)點(diǎn)放在一個(gè)管道(Pipeline)里。其中,DataStreamer是在調(diào)用DFSOutputStream對(duì)象過(guò)程中開啟的線程。DataStreamer將數(shù)據(jù)塊寫入管道涉及的第一個(gè)數(shù)據(jù)節(jié)點(diǎn),第一個(gè)數(shù)據(jù)節(jié)點(diǎn)將數(shù)據(jù)塊發(fā)送給第二個(gè)數(shù)據(jù)節(jié)點(diǎn),第二個(gè)數(shù)據(jù)節(jié)點(diǎn)將數(shù)據(jù)發(fā)送給第三個(gè)數(shù)據(jù)節(jié)點(diǎn)。DFSOutputStream將發(fā)送出去的數(shù)據(jù)塊信息保存在ackqueue隊(duì)列里。如果數(shù)據(jù)塊傳輸成功的話,就會(huì)刪除ackqueue隊(duì)列里對(duì)應(yīng)的數(shù)據(jù)塊;如果不成功的話就將ackqueue里的數(shù)據(jù)塊取出來(lái)放到數(shù)據(jù)隊(duì)列的末尾,等待重新傳輸。當(dāng)客戶端結(jié)束寫入數(shù)據(jù)過(guò)程,則調(diào)用DFSOutputStream中的close()函數(shù),此時(shí)客戶端不再向管道中寫入數(shù)據(jù),并關(guān)閉管道。在等到所有的寫入數(shù)據(jù)的成功應(yīng)答后,通知元數(shù)據(jù)節(jié)點(diǎn)寫入完畢。15.4解答題1、根據(jù)用戶手機(jī)上網(wǎng)的行為記錄,基于MapReduce編程模型設(shè)計(jì)程序統(tǒng)計(jì)不同手機(jī)號(hào)的用戶使用的總流量。其中,數(shù)據(jù)記錄的字段描述如下。序號(hào)字段字段類型描述0reportTimelong記錄報(bào)告時(shí)間戳1msisdnString手機(jī)號(hào)碼2apmacStringAPmac3acmacStringACmac4hostString訪問(wèn)的網(wǎng)址5siteTypeString網(wǎng)址種類6upPackNumlong上行數(shù)據(jù)包數(shù),單位:個(gè)7downPackNumlong下行數(shù)據(jù)包數(shù),單位:個(gè)8upPayLoadlong上行總流量,要注意單位的轉(zhuǎn)換:byte9downPayLoadlong下行總流量。要注意單位的轉(zhuǎn)換:byte10httpStatusStringHTTPResponse數(shù)據(jù)文件具體內(nèi)容如下。136315798506600-FD-07-A4-72-B8:CMCC 2 24 27 2481 24681 20013631579950525C-0E-8B-C7-F1-E0:CMCC 4 0 264 0 200136315799107620-10-7A-28-CC-0A:CMCC 9 2 4 132 1512 20013631544000225C-0E-8B-8B-B1-50:CMCC 4 0 240 0 200136315799304494-71-AC-CD-E6-18:CMCC-EASY 9 視頻網(wǎng)站 15 12 1527 2106 2001363157993055C4-17-FE-BA-DE-D9:CMCC 9 18 15 1116 954 20013631579950335C-0E-8B-C7-BA-20:CMCC 信息安全 20 20 3156 2936 200136315798301968-A1-B7-03-07-B1:CMCC-EASY 2 4 0 240 0 20013631579840415C-0E-8B-92-5C-20:CMCC-EASY 站點(diǎn)統(tǒng)計(jì) 24 9 6960 690 20013631579730985C-0E-8B-C7-F7-90:CMCC 搜索引擎 28 27 3659 3538 2001363157986029E8-99-C4-4E-93-E0:CMCC-EASY 9 站點(diǎn)統(tǒng)計(jì) 3 3 1938 180 2001363157992093C4-17-FE-BA-DE-D9:CMCC 9 15 9 918 4938 20013631579860415C-0E-8B-C7-FC-80:CMCC-EASY 3 3 180 180 20013631579840405C-0E-8B-8B-B6-00:CMCC 2052. 綜合門戶 15 12 1938 2910 200136315799509300-FD-07-A2-EC-BA:CMCC 2 12 12 3008 3720 20013631579820405C-0A-5B-6A-0B-D4:CMCC-EASY 9 綜合門戶 57 102 7335 110349 200136315798607284-25-DB-4F-10-1A:CMCC-EASY 9 搜索引擎 21 18 9531 2412 200136315799004300-1F-64-E1-E6-9A:CMCC 5 搜索引擎 69 63 11058 48243 200136315798807200-FD-07-A4-7B-08:CMCC 2 2 2 120 120 200136315798507920-7C-8F-70-68-1F:CMCC 9 6 3 360 180 200136315798506900-1F-64-E2-E8-B1:CMCC 5 18 138 1080 186852 200答:我們需要從數(shù)據(jù)中統(tǒng)計(jì)出每個(gè)用戶的所有請(qǐng)求的使用的總流量,即統(tǒng)計(jì)用戶所有請(qǐng)求的上行流量(索引為8)、下行流量(索引為9)之和。得到結(jié)果后輸出到單獨(dú)的文件中。編程環(huán)境搭建: 創(chuàng)建一個(gè)maven項(xiàng)目,并導(dǎo)入Hadoop的相關(guān)依賴。集群環(huán)境準(zhǔn)備:將題目中給定的數(shù)據(jù)文件上傳到hdfs中。Step1:將用戶手機(jī)號(hào)、上行流量、下行流量、總流量封裝到一個(gè)自定義的bean中,由于這個(gè)bean需要在Hadoop中進(jìn)行傳輸,我們還需要讓bean實(shí)現(xiàn)hadoop中的序列化接口。importjava.io.DataInput;importjava.io.DataOutput;importjava.io.IOException;importorg.apache.hadoop.io.Writable;publicclassFlowimplementsWritable{privateStringphone;//手機(jī)號(hào)privatelongup;//上行流量privatelongdown;//下線流量privatelongsum;//總流量//無(wú)參構(gòu)造函數(shù)publicFlow(){}//有參構(gòu)造函數(shù)publicFlow(Stringphone,longup,longdown){super();this.phone=phone;this.up=up;this.down=down;this.sum=this.up+this.down;}@Overridepublicvoidwrite(DataOutputout)throwsIOException{out.writeUTF(this.phone);out.writeLong(this.up);out.writeLong(this.down);out.writeLong(this.sum);}@OverridepublicvoidreadFields(DataInputin)throwsIOException{this.phone=in.readUTF();this.up=in.readLong();this.down=in.readLong();this.sum=in.readLong();}@OverridepublicStringtoString(){returnthis.up+"\t"+this.down+"\t"+this.sum;}publicStringgetPhone(){returnphone;}publicvoidsetPhone(Stringphone){this.phone=phone;}publiclonggetUp(){returnup;}publicvoidsetUp(longup){this.up=up;}publiclonggetDown(){returndown;}publicvoidsetDown(longdown){this.down=down;}publiclonggetSum(){returnsum;}}Step2:編寫Map方法importjava.io.IOException;importorg.apache.hadoop.io.LongWritable;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapreduce.Mapper;importmons.lang.StringUtils;publicclassFlowSumMapperextendsMapper<LongWritable,Text,Text,Flow>{ @Override protectedvoidmap(LongWritablekey,Textvalue, Contextcontext) throwsIOException,InterruptedException{ //拿一行數(shù)據(jù) Stringline=value.toString(); //切分成各個(gè)字段 String[]fields=StringUtils.split(line,"\t"); //拿到我們需要的字段 Stringphone=fields[1]; longup=Long.parseLong(fields[8]); longdown=Long.parseLong(fields[9]); //封裝數(shù)據(jù)為kv并輸出<phone:flow> context.write(newText(phone),newFlow(phone,up,down)); }}Step3:編寫Reduce方法importjava.io.IOException;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapreduce.Reducer;publicclassFlowSumReducerextendsReducer<Text,Flow,Text,Flow>{@Overrideprotectedvoidreduce(Textkey,Iterable<Flow>values,Contextcontext)throwsIOException,InterruptedException{//<phone:{flow,flow,flow,flow}>//reduce中的業(yè)務(wù)邏輯就是遍歷values,然后進(jìn)行累加求和再輸出longup=0;//longdown=0;for(Flowflow:values){up+=flow.getUp();down+=flow.getDown();}context.write(key,newFlow(key.toString(),up,down));}}Step4:編寫方法入口函數(shù)importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.conf.Configured;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapreduce.Job;importorg.apache.hadoop.mapreduce.lib.input.FileInputFormat;importorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat;importorg.apache.hadoop.util.Tool;importorg.apache.hadoop.util.ToolRunner;publicclassFlowSumRunnerextendsConfiguredimplementsTool{@Overridepublicintrun(String[]args)throwsException{Configurationconf=newConfiguration();Jobjob=Job.getInstance(conf);job.setJarByClass(FlowSumRunner.class);job.setMapperClass(FlowSumMapper.class);job.setReducerClass(FlowSumReducer.class);//設(shè)置map程序的輸出key、valuejob.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(Flow.class);//設(shè)置輸出key、valuejob.setOutputKeyClass(Text.class);job.setOutputValueClass(Flow.class);FileInputFormat.setInputPaths(job,newPath(args[0]));//輸入數(shù)據(jù)路徑/flow/input//檢查一下參數(shù)所指定的輸出路徑是否存在,如果已存在,先刪除Pathoutput=newPath(args[1]);FileSystemfs=FileSystem.get(conf);if(fs.exists(output)){fs.delete(output,true);}FileOutputFormat.setOutputPath(job,newPath(args[1]));//輸出數(shù)據(jù)路徑/flow/outputreturnjob.waitForCompletion(true)?0:1;}publicstaticvoidmain(String[]args)throwsException{intstatus

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論