史上最全的大數(shù)據(jù)面試題,大數(shù)據(jù)開發(fā)者必看_第1頁
史上最全的大數(shù)據(jù)面試題,大數(shù)據(jù)開發(fā)者必看_第2頁
史上最全的大數(shù)據(jù)面試題,大數(shù)據(jù)開發(fā)者必看_第3頁
史上最全的大數(shù)據(jù)面試題,大數(shù)據(jù)開發(fā)者必看_第4頁
史上最全的大數(shù)據(jù)面試題,大數(shù)據(jù)開發(fā)者必看_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

【某公司筆試面試題】使用mr,spark,sparksql編寫wordcount程序【Spark版本】valsc=newSparkContext(conf,2)〃加載valwords=paris.map((_,1))valresult=words.reduceByKey(_+_).sortBy(x=>x._1,false)〃打印result.foreach(wds=>{單詞:個(gè)數(shù):})sc.stop()【sparksql版本】valsc=newSparkContext(conf)valsqlContext=newSQLContext(sc)〃加載valdf=sqlContext.createDataFrame(rows,structType)sc.stop()的使用,內(nèi)外部表的區(qū)別,分區(qū)作用,UDF和Hive優(yōu)化⑴hive使用:倉庫、工具h(yuǎn)ive內(nèi)外部表:內(nèi)部表數(shù)據(jù)永久刪除,外部表數(shù)據(jù)刪除后、其他人依然可以訪問分區(qū)作用:防止數(shù)據(jù)傾斜UDF函數(shù):用戶自定義的函數(shù)(主要解決格式,計(jì)算問題),需要繼承UDF類java代碼實(shí)現(xiàn)classTestUDFHiveextendsUDF{publicStringevalute(Stringstr){try{}catch(Exceptione){}}}Hive優(yōu)化:看做mapreduce處理排序優(yōu)化:sortby效率高于orderby分區(qū):使用靜態(tài)分區(qū),每個(gè)分區(qū)對(duì)應(yīng)hdfs上的一個(gè)目錄減少job和task數(shù)量:使用表鏈接操作解決groupby數(shù)據(jù)傾斜問題:設(shè)置hive.groupby.skewindata=true,那么hive會(huì)自動(dòng)負(fù)載均衡小文件合并成大文件:表連接操作使用UDF或UDAF函數(shù):/ggjucheng/archive/2013/02/01/2888819.html的rk設(shè)計(jì),Hbase優(yōu)化aowkey:hbase三維存儲(chǔ)中的關(guān)鍵(rowkey:行鍵,columnKey(family+quilaty):列鍵,timestamp:時(shí)間戳)owkey字典排序、越短越好使用id+時(shí)間:使用hash散列:dsakjkdfuwdsf+9527+20160518應(yīng)用中,rowkey—般10~100bytes,8字節(jié)的整數(shù)倍,有利于提高操作系統(tǒng)性能優(yōu)化分區(qū):RegionSplit()方法不超過3個(gè)硬盤配置,便于regionServer管理和數(shù)據(jù)備份及恢復(fù)分配合適的內(nèi)存給regionserver其他:hbase查詢getscan使用startRow和endRow限制常用操作結(jié)束結(jié)束了線程2種方式實(shí)現(xiàn)、設(shè)計(jì)模式、鏈表操作、排序(1)2種線程實(shí)現(xiàn)類繼承TestCLth=newTestCL()〃類繼承Threadth.start()實(shí)現(xiàn)Runnable接口Threadth=newThread(newRunnable(){publicvoidrun(){〃實(shí)現(xiàn)}})th.start()(2)設(shè)計(jì)模式,分為4類創(chuàng)建模式:如工廠模式、單例模式結(jié)構(gòu)模式:代理模式行為模式:觀察者模式線程池模式【最熟悉的一個(gè)項(xiàng)目簡介、架構(gòu)圖、使用的技術(shù)、你負(fù)責(zé)哪塊】集群監(jiān)控(1)數(shù)據(jù)庫監(jiān)控(2)主機(jī)監(jiān)控(3)服務(wù)監(jiān)控(4)活動(dòng)監(jiān)控計(jì)算機(jī)網(wǎng)絡(luò)工作原理將分散的機(jī)器通過數(shù)據(jù)通信原理連接起來,實(shí)現(xiàn)共享!生態(tài)系統(tǒng)hdfs原理及各個(gè)模塊的功能mapreduce原理mapreduce優(yōu)化數(shù)據(jù)傾斜11系統(tǒng)維護(hù):hadoop升級(jí)datanode節(jié)點(diǎn)【講解項(xiàng)目要點(diǎn):數(shù)據(jù)量、多少人、分工、運(yùn)行時(shí)間、項(xiàng)目使用機(jī)器、算法、技術(shù)】【學(xué)會(huì)向?qū)Ψ教釂枴窟\(yùn)行機(jī)制及內(nèi)存原理運(yùn)行:I加載.class文件II管理并且分配內(nèi)存III垃圾回收內(nèi)存原理:IJVM裝載環(huán)境和配置II裝載JVM.dll并初始化JVM.dllIV處理class類、yarn參數(shù)調(diào)優(yōu)mapreduce.job.jvm.num.tasks默認(rèn)為1,設(shè)置為-1,重用jvm、Hive、impala、zookeeper、Storm、spark原理和使用方法、使用其架構(gòu)圖講解【某公司筆試題】1、如何為一個(gè)hadoop任務(wù)設(shè)置mappers的數(shù)量答案:使用job.setNumMapTask(intn)手動(dòng)分割,這是不靠譜的官方文檔:"Note:Thisisonlyahinttotheframework"說明這個(gè)方法只是提示作用,不起決定性作用實(shí)際上要用公式計(jì)算:Max(min.split,min(max.split,block))就設(shè)置分片的最大最下值computeSplitSize()設(shè)置參考:/strongerbit/article/details/74401112、有可能使hadoop任務(wù)輸出到多個(gè)目錄中么?如果可以,怎么做?答案:在1.X版本后使用MultipleOutputs.java類實(shí)現(xiàn)源碼:String.class);String.class);參考:/leejun2005/blog/94706發(fā)音:Multiple['m?lt?pl]--》許多的3、如何為一個(gè)hadoop任務(wù)設(shè)置要?jiǎng)?chuàng)建的reducer的數(shù)量答案:job.setNumReduceTask(intn)或者調(diào)整hdfs-site.xml中的mapred.tasktracker.reduce.tasks.maximum默認(rèn)參數(shù)值4、在hadoop中定義的主要公用InputFormats中,哪一個(gè)是默認(rèn)值:TextInputFormatKeyValuelnputFormatSequenceFileInputFormat答案:A5、兩個(gè)類TextInputFormat和KeyValueTextInputFormat的區(qū)別?答案:FilelnputFormat的子類:TextlnputFormat(默認(rèn)類型,鍵是LongWritable類型,值為Text類型,key為當(dāng)前行在文件中的偏移量,value為當(dāng)前行本身);KeyValueTextInputFormat(適合文件自帶key,value的情況,只要指定分隔符即可,比較實(shí)用,默認(rèn)是分割);源碼:StringsepStr注意:在自定義輸入格式時(shí),繼承FilelnputFormat父類參考:/vichao/archive/2013/06/06/3118100.html6、在一個(gè)運(yùn)行的hadoop任務(wù)中,什么是InputSpilt?答案:InputSplit是MapReduce對(duì)文件進(jìn)行處理和運(yùn)算的輸入單位,只是一個(gè)邏輯概念,每個(gè)InputSplit并沒有對(duì)文件實(shí)際的切割,只是記錄了要處理的數(shù)據(jù)的位置(包括文件的path和hosts)和長度(由start和length決定),默認(rèn)情況下與block一樣大。拓展:需要在定義InputSplit后,展開講解mapreduce的原理7、Hadoop框架中,文件拆分是怎么被調(diào)用的?答案:JobTracker,創(chuàng)建一個(gè)InputFormat的實(shí)例,調(diào)用它的getSplits()方法,把輸入目錄的文件拆分成FileSplist作為Mappertask的輸入,生成Mappertask加入Queue。源碼中體現(xiàn)了拆分的數(shù)量longgoalSize=totalSize/(numSplits==0?1:numSplits);longminSize=Math.max(job.getLong(org.apache.hadoop.mapreduce.lib.input.FileInputFormat.SPLIT_MINSIZE,1),minSplitSize);//minSplitSize默認(rèn)是1&分別舉例什么情況下使用combiner,什么情況下不會(huì)使用?答案:Combiner適用于對(duì)記錄匯總的場景(如求和),但是,求平均數(shù)的場景就不能使用Combiner了9、Hadoop中job和Tasks之間的區(qū)別是什么?答案:job是工作的入口,負(fù)責(zé)控制、追蹤、管理任務(wù),也是一個(gè)進(jìn)程包含maptask和reducetaskTasks是map和reduce里面的步驟,主要用于完成任務(wù),也是線程10、Hadoop中通過拆分任務(wù)到多個(gè)節(jié)點(diǎn)運(yùn)行來實(shí)現(xiàn)并行計(jì)算,但是某些節(jié)點(diǎn)運(yùn)行較慢會(huì)拖慢整個(gè)任務(wù)的運(yùn)行,hadoop采用何種機(jī)制應(yīng)對(duì)這種情況?答案:結(jié)果查看監(jiān)控日志,得知產(chǎn)生這種現(xiàn)象的原因是數(shù)據(jù)傾斜問題解決:調(diào)整拆分mapper的數(shù)量(partition數(shù)量)增加jvm適當(dāng)?shù)貙educe的數(shù)量變大11、流API中的什么特性帶來可以使mapreduce任務(wù)可以以不同語言(如等)實(shí)現(xiàn)的靈活性?答案:用可執(zhí)行文件作為Mapper和Reducer,接受的都是標(biāo)準(zhǔn)輸入,輸出的都是標(biāo)準(zhǔn)輸出參考:/archives/922012、參考下面的M/R系統(tǒng)的場景:--HDFS塊大小為64MB--輸入類型為FileInputFormat--有3個(gè)文件的大小分別是:64k65MB127MBHadoop框架會(huì)把這些文件拆分為多少塊?答案:64k>一個(gè)block65MB---->兩個(gè)文件:64MB是一個(gè)block,1MB是一個(gè)block127MB--->兩個(gè)文件:64MB是一個(gè)block,63MB是一個(gè)block13、Hadoop中的RecordReader的作用是什么?答案:屬于split和mapper之間的一個(gè)過程將inputsplit輸出的行為一個(gè)轉(zhuǎn)換記錄,成為key-value的記錄形式提供給mapper14、Map階段結(jié)束后,Hadoop框架會(huì)處理:Partitioning,shuffle和sort,在這個(gè)階段都會(huì)發(fā)生了什么?答案:MR一共有四個(gè)階段,splitmapshuffreduce在執(zhí)行完map之后,可以對(duì)map的輸出結(jié)果進(jìn)行分區(qū),分區(qū):這塊分片確定到哪個(gè)reduce去計(jì)算(匯總)排序:在每個(gè)分區(qū)中進(jìn)行排序,默認(rèn)是按照字典順序。Group:在排序之后進(jìn)行分組15、如果沒有定義partitioner,那么數(shù)據(jù)在被送達(dá)reducer前是如何被分區(qū)的?答案:Partitioner是在map函數(shù)執(zhí)行context.write()時(shí)被調(diào)用。用戶可以通過實(shí)現(xiàn)自定義的?Partitioner來控制哪個(gè)key被分配給哪個(gè)?Reducer。查看源碼知道:如果沒有定義partitioner,那么會(huì)走默認(rèn)的分區(qū)HashpartitionerpublicclassHashPartitionervK,V>extendsPartitionervK,V>{/**Use{@linkObject#hashCode()}topartition.*/publicintgetPartition(Kkey,Vvalue,intnumReduceTasks){return(key.hashCode()&Integer.MAX_VALUE)%numReduceTasks;}}參考:/gamer_gyt/article/details/4733975516、什么是Combiner?答案:這是一個(gè)hadoop優(yōu)化性能的步驟,它發(fā)生在map與reduce之間目的:解決了數(shù)據(jù)傾斜的問題,減輕網(wǎng)絡(luò)壓力,實(shí)際上時(shí)減少了maper的輸出源碼信息如下:publicvoidreduce(Textkey,IteratorvLongWritable>values,OutputCollectorvText,LongWritable>output,Reporterreporter)throwslOException{LongWritablemaxValue=nuII;while(values.hasNext()){LongWritablevalue=values.next();if(maxValue==null){maxValue=value;}elseif(pareTo(maxValue)>0){maxValue=value;}}output.collect(key,maxValue);}在collect實(shí)現(xiàn)類中,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論