hadoop題0221_第1頁(yè)
hadoop題0221_第2頁(yè)
hadoop題0221_第3頁(yè)
hadoop題0221_第4頁(yè)
hadoop題0221_第5頁(yè)
已閱讀5頁(yè),還剩17頁(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)介

1、使用開(kāi)發(fā)過(guò)哪些應(yīng)用?思路?、 精準(zhǔn)廣告推薦。要求:統(tǒng)計(jì)微博日志中每條微博中對(duì)商品關(guān)鍵字的關(guān)注度。日志格式:微博id微博內(nèi)容結(jié)果格式:微博id關(guān)鍵字1:關(guān)注度,關(guān)鍵字2:關(guān)注度.答:關(guān)注度權(quán)重W=TF*log(N/DF)。TF:關(guān)鍵字在該條微博中出現(xiàn)的次數(shù)DF:出現(xiàn)關(guān)鍵字的微博條數(shù)N:微博的總條數(shù)。思路:三個(gè)MR。第一個(gè)mapreduce:計(jì)算TF、N。map中使用IK分詞器(IKSegmenter)分出詞組,計(jì)算TF(key:關(guān)鍵字_微博id,value:出現(xiàn)次數(shù)),并記錄微博條數(shù)(key:count,value:1)。自定義分區(qū),指定兩個(gè)reduce,輸出到兩個(gè)文件中。第二個(gè)mapreduc

2、e:以第一個(gè)mapreduce的輸出作為輸入,計(jì)算DF(key:關(guān)鍵字,value:微博條數(shù))。第三個(gè)mapreduce:計(jì)算關(guān)注度權(quán)重。將前兩個(gè)mapreduce的輸出作為輸入。在setup()中預(yù)先讀取TF、N、DF。、 好友推薦reduce:人2 人3人3 人2人4 人1人1 人4 .Combiner:人1 (人2,人3,人3)人2 (人4,人1,)人3 (人1,人1)人4 (人2) .Map:人1 人2人1 人3人3 人1人2 人4人2 人1人3 人1人1 人3人4 人2 .原始數(shù)據(jù):人1 人2人1 人3人3 人1人2 人4 .Map階段:以主作為key,從作為value輸出,同時(shí)以從

3、作為key,主作為value輸出Reuduce階段:將value存入set結(jié)構(gòu),set結(jié)構(gòu)能夠去重,然后對(duì)set數(shù)組自身做笛卡爾機(jī)運(yùn)算,即雙重循環(huán),循環(huán)過(guò)程中去重每個(gè)元素自身與自身的推薦。、 軌跡分析、1 Map/reduce接口體系,源碼類結(jié)構(gòu)關(guān)系?1.1 (1)體系整個(gè)編程模型位于應(yīng)用程序?qū)雍蚆apReduce執(zhí)行器之間,可以分為兩層,第一層是最基本的Java api,主要有5個(gè)可編程組件,分別是InputFormat、mapper、partitioner、reducer、outputformat,hadoop自帶了很多直接可用的inputformat、partitioner、output

4、format,大部分情況下,用戶只需要編寫(xiě)mapper和reducer即可。第二層是工具層,位于基本Java API之上,主要提供了4個(gè)編程工具包:Jobcontrol:方便用戶編寫(xiě)有依賴關(guān)系的作業(yè),這些作業(yè)往往構(gòu)成一個(gè)有向圖(DAG),Chainmapper/chainreducer:方便用戶編寫(xiě)鏈?zhǔn)阶鳂I(yè)。(?)Hadoop streaming:方便用戶采用非java語(yǔ)言編寫(xiě)作業(yè)Hadoop pipes:專門(mén)為c/c+程序員編寫(xiě)mapreduce程序提供的工具包。1.2 (2)API類結(jié)構(gòu)舊版存放著org.apache.hadoop.mapred包中,新版API則放在org.apache.h

5、adoop.mapreduce包及子包中。Ø 上下文封裝:易用性和擴(kuò)展性。好處:首先函數(shù)參數(shù)列表經(jīng)封裝后變短;其次需要修改或添加某些變量或函數(shù)時(shí),只需要修改修改后的上下文類。 (上下文概念和平時(shí)將參數(shù)封裝為實(shí)體類有區(qū)別嗎?)Ø 序列化:要求key、value均可序列化,即讓對(duì)應(yīng)類實(shí)現(xiàn)其Writable接口,由于key是排序的關(guān)鍵字,還需實(shí)現(xiàn)WritableComparable接口。Ø 回調(diào)機(jī)制,上述5個(gè)編程組件全是回調(diào)接口。Ø 新舊API提交作業(yè)的區(qū)別:(3)API解析1.2.1 InputFormat:功能:a、數(shù)據(jù)切分,將數(shù)據(jù)切分為若干個(gè)split,

6、以確定maptask個(gè)數(shù)以及對(duì)應(yīng)的split。b、為Mapper提供輸入數(shù)據(jù),給定某個(gè)split,將其解析成key/value對(duì)。新版api在形式上與舊版差別較大,但僅僅是對(duì)之前一些類的封裝,增強(qiáng)易用性和擴(kuò)展性。對(duì)于基類FileInputFormat,新版api的inputsplit劃分算法不再考慮用戶設(shè)定的map task個(gè)數(shù),而用mapred.max.split.size(記為maxSize)代替,即InputSplit大小的計(jì)算公式為splitSize=maxminSize,minmaxSize,blockSize1.2.2 OutputFormat接口getRecordWriter方法

7、返回RecordWriter類型,該類中的方法wrier將一個(gè)key/value寫(xiě)入文件。在task執(zhí)行過(guò)程中,mapreduce框架會(huì)將map()或者reduce()函數(shù)產(chǎn)生的結(jié)果傳入write方法。自帶Outputformat實(shí)現(xiàn),與InputFormat實(shí)現(xiàn)對(duì)應(yīng):FileOutFormat主要有以下兩個(gè)功能:(1) 實(shí)現(xiàn)CheckOutputSpecs接口:目錄檢查(2) 處理side-effect file:執(zhí)行推測(cè)式任務(wù),避免執(zhí)行慢的任務(wù)拖慢整體速度,優(yōu)化時(shí)在兩個(gè)節(jié)點(diǎn)上同時(shí)運(yùn)行同一任務(wù),先算完的將其side-effect file拷貝到輸出目錄中。文件的操作OutputCommitt

8、er(接口)完成,hadoop默認(rèn)實(shí)現(xiàn)了FileOutputCommitter。1.2.3 Mapper與Reducer(1) 初始化:Mapper繼承了JobConfigurable接口,該接口中的configure方法允許通過(guò)JobConf參數(shù)對(duì)Mapper進(jìn)行初始化。(2) Map操作:MapReduce框架會(huì)通過(guò)InputFormat中RecordReader從InputSplit獲取一個(gè)個(gè)Key/value對(duì),并交給下面的map函數(shù)處理。(3) 清理:Mapper通過(guò)繼承Closeable接口獲得close方法,用戶可通過(guò)實(shí)現(xiàn)該方法對(duì)Mapper進(jìn)行清理。注:不一定非要存在Mappe

9、r,MapReduce框架提供了比Mapper更通用的接口:MapRunnable,提供了兩個(gè)默認(rèn)實(shí)現(xiàn),MapRunner(默認(rèn))、MultithreadMapRunner(多線程),默認(rèn)情況下,每個(gè)Mapper啟動(dòng)10個(gè)線程,通常用于非cpu類型的作業(yè)以提供吞吐率。(新版)Ø Mapper由接口變?yōu)槌橄箢?,且不再繼承JobConfigurable和Closeable兩個(gè)接口,而是在類中添加了setup和cleanup兩個(gè)方法進(jìn)行初始化和清理工作。Ø 將參數(shù)封裝到Context對(duì)象中。Ø 去掉MapRunnable接口,在Mapper中添加run方法,以方便用戶定

10、制map()函數(shù)的調(diào)用方法,run默認(rèn)實(shí)現(xiàn)實(shí)現(xiàn)與舊版本中MapRunner的run實(shí)現(xiàn)一樣。Ø 新API中Rducer遍歷value的迭代器類型變?yōu)閖ava.lang.Iterable,使得用戶可以采用foreach形式遍歷所有value。1.2.4 Partitioner接口將同一組的數(shù)據(jù)交給同一個(gè)Reducer處理,它直接影響Reduce階段的均衡負(fù)載。提供兩種實(shí)現(xiàn)HashPartioner(默認(rèn))和TotalOrderPartitioner.2 簡(jiǎn)要描述如何安裝配置一個(gè)apache開(kāi)源hadoop。答:(1) 創(chuàng)建hadoop賬戶(2) 修改ip(3) 安裝java,配置/et

11、c/profile中java的環(huán)境變量(4) 修改Host文件域名(5) 安裝SSH,配置無(wú)密鑰通信(6) 解壓haoop(7) 配置conf文件下hadoop-env.sh、core-site.sh、mapred-site.sh、hdfs-site.sh。(8) 配置hadoop的環(huán)境變量(9) Hadoop namenode-format(10) Start-all3 請(qǐng)列出正常工作的hadoop集群中Hadoop都分別需要啟動(dòng)哪些進(jìn)程,他們的作用分別是什么,盡可能的全面些。答:Namenode:管理集群,并記錄datanode文件信息Secondnamenode:可以做冷備,對(duì)一定范圍內(nèi)

12、數(shù)據(jù)做快照性備份。Datanode:存儲(chǔ)數(shù)據(jù)ResourceManager:負(fù)責(zé)集群中所有資源的統(tǒng)一管理和分配,它接收來(lái)自各個(gè)節(jié)點(diǎn)(nodemanager)的資源匯報(bào)信息,并把這些信息按照一定的策略分配給各個(gè)應(yīng)用程序(實(shí)際上是applicationmanager)NodeManager:是yarn中每個(gè)節(jié)點(diǎn)上的代理,它管理hadoop集群中單個(gè)計(jì)算節(jié)點(diǎn),包括與resoucemanager保持通信,監(jiān)督container的生命周期管理,監(jiān)控每個(gè)container的資源使用(內(nèi)存、cpu等)情況,追蹤節(jié)點(diǎn)健康狀況,管理日志和不同應(yīng)用程序用到的附屬服務(wù)。4 啟動(dòng)Hadoop時(shí)報(bào)如下錯(cuò)誤,如何解決?E

13、rror node.NameNode:mon.inconsistentFSStateException:Directory:/tmp/hadoop-root/dfs/name is in an inconsistent state:storage directory does not exist or is not accessible.答:可能的原因:1、hdfs沒(méi)有啟動(dòng)成功,通過(guò)查看jps確認(rèn)下。2、確認(rèn)文件夾是否存在。5 請(qǐng)寫(xiě)出以下執(zhí)行命令1) 殺死一個(gè)job2) 刪除hdfs上的/tmp/aaa目錄3) 加入一個(gè)新的存

14、儲(chǔ)節(jié)點(diǎn)和刪除一個(gè)計(jì)算節(jié)點(diǎn)需要刷新集群狀態(tài)命令。答:(1)hadoop job list 拿到j(luò)ob-id, hadoop job kill job-id(2)Hadoop fs rmr /tmp/aaa(3)加新節(jié)點(diǎn)時(shí):Hadoop-daemon.sh start datanodeHadoop-daemon.sh start tasktracker (1.0?)刪除時(shí):Hadoop mradmin refreshnodesHadoop dfsadmin -refreshnodes6 請(qǐng)列出你所知道的hadoop調(diào)度器,并簡(jiǎn)要說(shuō)明其工作方法。答:Fifo schedular:默認(rèn),先進(jìn)先出的原則

15、。Capacity schedular:計(jì)算能力調(diào)度器,選擇占用最小,優(yōu)先級(jí)高的先執(zhí)行,以此類推。Fair schedule:公平調(diào)度,所有的job具有相同的資源。7 請(qǐng)列出在你以前的工作中所使用過(guò)的開(kāi)發(fā)map/reduce的語(yǔ)言Java、hive、scala8 當(dāng)前日志采樣格式為:a,b,c,db,b,f,ea,a,c,f請(qǐng)用你最熟悉的語(yǔ)言編寫(xiě)一個(gè)map/reduce程序,計(jì)算第四列每個(gè)元素出現(xiàn)的個(gè)數(shù)。val conf = new SparkConf();val sc = new SparkContext(conf);val line = sc.textFile(“文件路徑”);line.f

16、latMap(_.split(“,”)(3).map(_,1).reduceByKey(_+_);9 你認(rèn)為用java,Streaming pipe方式開(kāi)發(fā)map/reduce,各有哪些優(yōu)缺點(diǎn)。10 Hive有哪些方式保存元數(shù)據(jù),各有哪些特點(diǎn)。三種:內(nèi)存數(shù)據(jù)庫(kù)derby,挺小,不常用 本地mysql,常用 遠(yuǎn)程端mysql,不常用11 請(qǐng)簡(jiǎn)述hadoop怎樣實(shí)現(xiàn)二級(jí)排序答:第一種方法是, Reducer 將給定 key 的所有值都緩存起來(lái), 然后對(duì)它們?cè)僮鲆粋€(gè) Reducer 內(nèi)排序。 但是, 由于 Reducer 需要保存給定 key 的所有值, 可能會(huì)導(dǎo)致出現(xiàn)內(nèi)存耗盡的錯(cuò)誤。 第二種方法是

17、,將值的一部分或整個(gè)值加入原始 key,生成一個(gè)合成 key。這兩種方法各有 優(yōu)勢(shì),第一種方法可能會(huì)更快一些(但有內(nèi)存耗盡的危險(xiǎn)),第二種方法則是將排序的任務(wù)交 給 MapReduce 框架,更符合 Hadoop/Reduce 的設(shè)計(jì)思想。12 簡(jiǎn)述hadoop實(shí)現(xiàn)join的幾種方法答:mapjoin,reducejoin,常用的是mapjoin,可以將小表的數(shù)據(jù)加載到內(nèi)存中使用,然后匹配的大表的數(shù)據(jù),加快速度。13 請(qǐng)用java實(shí)現(xiàn)非遞歸二分查找1.  /* 2.      * 非遞歸二分查找算法 3.

18、      * 參數(shù):整型數(shù)組,需要比較的數(shù). 4.      */  5.     public static int binarySearch(IntegersrcArray,int des)  6.         /第一個(gè)位置.  7.  &

19、#160;      int low=0;  8.         /最高位置.數(shù)組長(zhǎng)度-1,因?yàn)橄聵?biāo)是從0開(kāi)始的.  9.         int high=srcArray.length-1;  10.        

20、0;/當(dāng)low"指針"和high不重復(fù)的時(shí)候.  11.         while(low<=high)  12.             /中間位置計(jì)算,low+ 最高位置減去最低位置,右移一位,相當(dāng)于除2.也可以用(high+low)/2  13.     

21、        int middle=low+(high-low)>>1);  14.         /與最中間的數(shù)字進(jìn)行判斷,是否相等,相等的話就返回對(duì)應(yīng)的數(shù)組下標(biāo).  15.         if(des=srcArraymiddle)  16.   

22、          return middle;  17.         /如果小于的話則移動(dòng)最高層的"指針"  18.         else if(des<srcArraymiddle)  19.   &#

23、160;         high=middle-1;  20.         /移動(dòng)最低的"指針"   21.         else  22.          

24、   low=middle+1;  23.               24.           25.         return-1;  26.     

25、0;     27.       28.   14 請(qǐng)簡(jiǎn)述MapReduce中combiner,partition作用答:Combiner:實(shí)現(xiàn)的功能跟reduce差不多,接收map的值,經(jīng)過(guò)計(jì)算后給reduce,它的key,value類型要跟reduce完全一樣,當(dāng)reduce業(yè)務(wù)復(fù)雜時(shí)可以用,不過(guò)它貌似只是操作本機(jī)的數(shù)據(jù)。Partition:將輸出的結(jié)果分別保存在不同的文件中。15 某個(gè)目錄下就有兩個(gè)文件a.txt和b.txt,文件格式為(ip username

26、),例如:a.txt zhangsan wangxiaoer lisi wangwu b.txt lixiaolu lisi每個(gè)文件至少有100萬(wàn)行,請(qǐng)使用linux命令行完成如下工作:1) 兩個(gè)文件各自的ip數(shù),以及總ip數(shù)2) 出現(xiàn)在b.txt而沒(méi)有出現(xiàn)在a.txt的ip3) 每個(gè)username出現(xiàn)的次數(shù),以及每個(gè)username對(duì)應(yīng)的IP數(shù)16 Hive內(nèi)部表和外部表的區(qū)別?答:1、在導(dǎo)入數(shù)據(jù)到外部表,數(shù)據(jù)并沒(méi)有移動(dòng)到自己的數(shù)據(jù)倉(cāng)庫(kù)目錄下,也就是說(shuō)外部表中的數(shù)據(jù)并不是由它自己來(lái)管

27、理的!而表則不一樣;2、在刪除表的時(shí)候,Hive將會(huì)把屬于表的元數(shù)據(jù)和數(shù)據(jù)全部刪掉,而刪除外部表的時(shí)候,Hive僅僅刪除外部表的元數(shù)據(jù),數(shù)據(jù)是不會(huì)刪除的。(外部表并不實(shí)際管理數(shù)據(jù))17 Hbase的rowkey怎么創(chuàng)建比較好?列族怎么創(chuàng)建比較好?答:rowkey設(shè)計(jì):(1)長(zhǎng)度越短越好,不要超過(guò)16個(gè)字節(jié)。(2)rowkey散列原則,如果rowkey是按時(shí)間戳的方式遞增,不要將時(shí)間放在二進(jìn)制碼的前面,建議將Rowkey的高位作為散列字段,由程序循環(huán)生成,低位放時(shí)間字段,這樣將提高數(shù)據(jù)均衡分布在每個(gè)Regionserver實(shí)現(xiàn)負(fù)載均衡的幾率。如果沒(méi)有散列字段,首字段直接是時(shí)間信息將產(chǎn)生所有新數(shù)據(jù)

28、都在一個(gè)RegionServer上堆積的熱點(diǎn)現(xiàn)象,這樣在做數(shù)據(jù)檢索的時(shí)候負(fù)載將會(huì)集中在個(gè)別RegionServer,降低查詢效率。(3)rowkey唯一原則列族:由于Hbase是一個(gè)面向列族的存儲(chǔ)器,調(diào)優(yōu)和存儲(chǔ)都是在列族這個(gè)層次進(jìn)行的,最好使列族成員都有相同的訪問(wèn)模式和大小特征;在一張表里不要定義太多的列族,目前hbase并不能很好的處理超過(guò)23個(gè)列族的表,因?yàn)槟硞€(gè)flush的時(shí)候,它鄰近的列族也會(huì)因關(guān)聯(lián)效應(yīng)被觸發(fā)flush,最終導(dǎo)致系統(tǒng)產(chǎn)生更多的I/O。18 用mapreduce怎么處理數(shù)據(jù)傾斜問(wèn)題?答:(1)增加reduce 的jvm內(nèi)存。(2)增加reduce個(gè)數(shù)。(3)customer

29、 partition 19 Hdfs ha架構(gòu)答:Hdfs ha采用master/slave架構(gòu),HDFS節(jié)點(diǎn)分為NameNode節(jié)點(diǎn)和DataNode節(jié)點(diǎn)。NameNode存有HDFS的元數(shù)據(jù),主要由FSImage和EditLog組成。FSImage保存有文件的目錄、分塊ID、文件權(quán)限等,EditLog保存有對(duì)HDFS的操作記錄。DataNode存放分塊的數(shù)據(jù),并采用CRC循環(huán)校驗(yàn)方式對(duì)本地的數(shù)據(jù)進(jìn)行校驗(yàn),DataNode周期性向NameNode匯報(bào)本機(jī)的信息。Hdfs ha為解決Namenode的單點(diǎn)故障,為namenode保存了一個(gè)熱備,這樣namenode共有兩個(gè):active nam

30、enode、standby namenode。集群使用的時(shí)候,用的是active namenode,而standby namenode存放的是active 那么弄得的熱備。(20 Yarn的優(yōu)勢(shì),與mapreduce相比答:(1)yarn大大減小了JobTracker(也就是現(xiàn)在的ResourceManager)的資源消耗,并且讓檢測(cè)每一個(gè)Job子任務(wù)(tasks)狀態(tài)的程度分布化了,更安全,更優(yōu)美。(2)在yarn中,ApplicationMaster是一個(gè)可變更的部分,用戶可以對(duì)不同的編程模型寫(xiě)自己的AppMst,讓更多類型的編程模型能夠跑在Hadoop集群中。(例如spark也可運(yùn)行在y

31、arn上)(3)對(duì)于資源的表示以內(nèi)存為單位,比之前以剩余slot數(shù)目更合理。(4)老的框架中,JobTracker一個(gè)很大的負(fù)擔(dān)就是監(jiān)控job下的tasks的運(yùn)行狀況,現(xiàn)在這個(gè)部分就扔給了AppMst做了,而ResourceManager中有一個(gè)模塊叫做ApplicationMasters,它是監(jiān)測(cè)ApplicationMaster的運(yùn)行狀況,如果出問(wèn)題,會(huì)將其在其他機(jī)器上重啟。(5)Container是yarn為了將來(lái)作資源隔離而提出的一個(gè)框架,目前僅僅提供java虛擬機(jī)內(nèi)存的隔離,hadoop團(tuán)隊(duì)的設(shè)計(jì)思路應(yīng)該后續(xù)能支持更多的資源調(diào)度和控制,既然資源表示成內(nèi)存量,那就沒(méi)有了之前的map s

32、lot/reduce slot分開(kāi)造成集群資源閑置的尷尬情況。21 Mapreduce的執(zhí)行過(guò)程答:MR執(zhí)行過(guò)程包括Map、Shuffler、Reduce,其中Map、Reduce及Shuffler中的分區(qū)、合并、排序是可以允許程序員編程參與的。1、 Map階段:Splitmap-partition sort and spill to disk-combine1) split的目的是將一個(gè)原始文件分成多個(gè)文件,分別交由不同的map節(jié)點(diǎn)處理2) map3) partition sort and spill to disk:每個(gè)map任務(wù)計(jì)算的結(jié)果首先寫(xiě)到內(nèi)存中,當(dāng)超過(guò)閾值(默認(rèn)100M)時(shí)將啟動(dòng)

33、一個(gè)線程將數(shù)據(jù)內(nèi)容溢寫(xiě)到磁盤(pán)上,在溢寫(xiě)的過(guò)程中需要制定每個(gè)map輸出的鍵值對(duì)對(duì)應(yīng)的reduce編號(hào),即分區(qū),默認(rèn)的分區(qū)算法是使用map的key對(duì)象的hashcode模reduce個(gè)數(shù),該方式不能保證負(fù)載均衡,重寫(xiě)partition類的getPartition方法可自定義分區(qū)方式,除分區(qū)外,該過(guò)程還有精力排序過(guò)程,默認(rèn)的排序是按ascii碼排序,可實(shí)現(xiàn)WritableComparable接口的compare方法。4) combine:每個(gè)map任務(wù)執(zhí)行過(guò)程中有可能會(huì)溢寫(xiě)生成多個(gè)文件,而map任務(wù)結(jié)束后需要將結(jié)果傳到reduce任務(wù)節(jié)點(diǎn),為提高效率需在網(wǎng)絡(luò)傳輸文件前將多個(gè)小文件合并成大文件,com

34、bine是map節(jié)點(diǎn)本地reduce過(guò)程。2、 Reduce階段Merge-sort-reduce-output在正式執(zhí)行reduce過(guò)程前,需要做一些預(yù)處理,首先將不同map節(jié)點(diǎn)傳輸過(guò)來(lái)的文件合并,然后排序,排序同map階段。22 Spark rdd設(shè)計(jì)結(jié)構(gòu)答:Rdd全稱為Resilient Distributed Datasets,是一個(gè)容錯(cuò)的、并行的數(shù)據(jù)結(jié)構(gòu),可以讓用戶顯式地將數(shù)據(jù)存儲(chǔ)到磁盤(pán)和內(nèi)存中,并能控制數(shù)據(jù)的分區(qū)。同時(shí),Rdd還提供了一組豐富的操作來(lái)操作這些數(shù)據(jù),諸如map、flatmap、filter等轉(zhuǎn)換操作。Rdd作為數(shù)據(jù)結(jié)構(gòu),本質(zhì)上是一個(gè)只讀的分區(qū)記錄集合,一個(gè)RDD可以包

35、含多個(gè)分區(qū),每個(gè)分區(qū)就是一個(gè)dataset片段。RDD可以相互依賴,如果RDD的每個(gè)分區(qū)最多只能被一個(gè)ChildRDD的一個(gè)分區(qū)使用,則稱之為narrow dependency,若多個(gè)childrdd分區(qū)都可以使用,則稱之為widedependency,不同的操作依據(jù)其特性,可能會(huì)產(chǎn)生不同的依賴,例如map操作會(huì)產(chǎn)生narrow dependency,而join操作則產(chǎn)生wide dependency。Rdd的特性總結(jié)如下:1、 它是不變的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)2、 它是支持跨集群的分布式數(shù)據(jù)結(jié)構(gòu)3、 可以根據(jù)數(shù)據(jù)記錄的key對(duì)結(jié)構(gòu)進(jìn)行分區(qū)4、 提供了粗粒度的操作,且這些操作都支持分區(qū)5、 它將數(shù)據(jù)存儲(chǔ)

36、在內(nèi)存中,從而提供了低延遲性。23 Secondnamenode的作用?答:是namenode的一個(gè)快照,會(huì)根據(jù)configuration中設(shè)置的值來(lái)決定多少時(shí)間周期性的去spap一下namenode,記錄namenode的metadata及其它數(shù)據(jù)。24 Hdfs讀流程(1) 客戶端用FileSystem的open()函數(shù)打開(kāi)文件(2) DistributedFileSystem用RPC調(diào)用元數(shù)據(jù)節(jié)點(diǎn),得到文件的數(shù)據(jù)塊信息。(3) 客戶端調(diào)用stream的read()函數(shù)開(kāi)始讀取數(shù)據(jù)。(4) 當(dāng)客戶端讀取完畢數(shù)據(jù)的時(shí)候,調(diào)用FSDataInputStream的close函數(shù)25 Hdfs寫(xiě)流

37、程(1) 客戶端調(diào)用create()來(lái)創(chuàng)建文件。DistributedFileSystem用RPC調(diào)用元數(shù)據(jù)節(jié)點(diǎn),在文件系統(tǒng)的命名空間中創(chuàng)建一個(gè)新的文件;元數(shù)據(jù)節(jié)點(diǎn)首先確定文件原來(lái)不存在,并且客戶端有創(chuàng)建文件的權(quán)限,然后創(chuàng)建新文件;DistributedFileSystem返回DFSOutStream,供客戶端寫(xiě)數(shù)據(jù)。(2) 客戶端開(kāi)始寫(xiě)入數(shù)據(jù),DFSOutputStream將數(shù)據(jù)分成塊,寫(xiě)入data queue。Data queue由Data Streamer讀取,并通知元數(shù)據(jù)節(jié)點(diǎn)分配數(shù)據(jù)節(jié)點(diǎn),用來(lái)存儲(chǔ)數(shù)據(jù)塊(每塊默認(rèn)復(fù)制3塊)。分配的數(shù)據(jù)節(jié)點(diǎn)放在一個(gè)pipeline里。Data Strea

38、mer將數(shù)據(jù)塊寫(xiě)入pipeline中的第一個(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ù)塊保存了ack queue,等待pipeline中的數(shù)據(jù)節(jié)點(diǎn)告知數(shù)據(jù)已經(jīng)寫(xiě)入成功。(3) 當(dāng)客戶端結(jié)束寫(xiě)入數(shù)據(jù),則調(diào)用stream的close函數(shù)。此操作將所有的數(shù)據(jù)塊寫(xiě)入pipeline中的數(shù)據(jù)節(jié)點(diǎn),并等待ack queue返回成功。最后通知元數(shù)據(jù)節(jié)點(diǎn)寫(xiě)入完畢。26 Hadoop框架怎么來(lái)優(yōu)化?答:hadoop 優(yōu)化的范圍太寬泛了,可以從某個(gè)方面具體來(lái)談一談,比如說(shuō) HBase 的 rowKey 和列族的創(chuàng)建的

39、來(lái)進(jìn)行數(shù)據(jù)存儲(chǔ)的優(yōu)化, 可以從網(wǎng)絡(luò)的拷貝對(duì)數(shù)據(jù)的優(yōu)化, 可以從 mapreduce 對(duì)數(shù)據(jù)的處理來(lái)談優(yōu)化,可以從參數(shù)方面來(lái)說(shuō)優(yōu)化等。27 Hbase內(nèi)部是什么機(jī)制?答:在Hmaster、RegionServer內(nèi)部,實(shí)現(xiàn)了rpc多個(gè)protocol來(lái)完成管理和應(yīng)用邏輯,具體如下:(1)Hmater支持的rpc協(xié)議:MasterMonitorProtocol:client與master之間的通信,master是rpcserver端,主要實(shí)現(xiàn)hbase集群監(jiān)控的目的。MasterAdminProtocol:client與master之間的通信,master是rpcserver端,主要是吸納Hbas

40、e表格的管理。RegionServerStatusProtoco,RegionServer與Master之間的通信,Master是RpcServer端,負(fù)責(zé)提供RegionServer向HMaster狀態(tài)匯報(bào)的服務(wù)。(2)RegionServer支持的Rpc協(xié)議ClientProtocol,Client與RegionServer之間的通信,RegionServer是RpcServer端,主要實(shí)現(xiàn)用戶的讀寫(xiě)請(qǐng)求。例如get、multiGet、mutate、scan、bulkLoadHFile、執(zhí)行Coprocessor等。AdminProtocols,Client與RegionServer之間的

41、通信,RegionServer是RpcServer端,主要實(shí)現(xiàn)Region、服務(wù)、文件的管理。例如storefile信息、Region的操作、WAL操作、Server的開(kāi)關(guān)等。28 我們?cè)陂_(kāi)發(fā)分布式計(jì)算job時(shí),是否可以去掉reduce()階段?答:可以,例如我們的集群就是為了存儲(chǔ)文件而設(shè)計(jì)的,不涉及到數(shù)據(jù)的計(jì)算,就可以將 mapReduce 都省掉。29 Hdfs的數(shù)據(jù)壓縮算法答:HDFS支持?jǐn)?shù)據(jù)壓縮存在以下幾種方法:1、 在HDFS之上將數(shù)據(jù)壓縮,再存儲(chǔ)到HDFS2、 壓縮工作在datanode之上完成,這里又分兩種方法:1) 數(shù)據(jù)接收后再壓縮,這個(gè)方法對(duì)hdfs的改動(dòng)最小,但效果最低,只

42、需要在block文件close后,調(diào)用壓縮工具,將block文件壓縮一下,然后再打開(kāi)block文件時(shí)解壓一下即可,幾行代碼就可以搞定。2) 邊接收數(shù)據(jù)邊壓縮,使用第三方提供的壓縮庫(kù)。效率和復(fù)雜折中方法,hook住系統(tǒng)的write和read操作,在數(shù)據(jù)寫(xiě)入磁盤(pán)之前,先壓縮一下,但write和read對(duì)外的接口行為不變,比如:原始大小為100kb的數(shù)據(jù),壓縮后大小為10kb,當(dāng)寫(xiě)入100kb后,仍對(duì)調(diào)用者返回100kb,而不是10kb。 3、壓縮工作交給DFSClient做,DataNode只接收和存儲(chǔ)。這個(gè)方法效果最高,壓縮分散地退給了hdfs客戶端,但datanode需要知道什么時(shí)候一個(gè)blo

43、ck塊接收完成了。推薦使用此方法。30 Mapreduce的調(diào)度模式答:Fifo schedular:默認(rèn),先進(jìn)先出的原則。Capacity schedular:計(jì)算能力調(diào)度器,選擇占用最小,優(yōu)先級(jí)高的先執(zhí)行,以此類推。Fair schedule:公平調(diào)度,所有的job具有相同的資源。31 Hive底層與數(shù)據(jù)庫(kù)交互原理答:Hive可以在HDFS上構(gòu)建數(shù)據(jù)倉(cāng)庫(kù)來(lái)存儲(chǔ)結(jié)構(gòu)化的數(shù)據(jù),這些數(shù)據(jù)來(lái)源于HDFS上的原始數(shù)據(jù), Hive提供了類似SQL的查詢語(yǔ)言HiveQL,可以執(zhí)行查詢,變換數(shù)據(jù)等操作。通過(guò)解析,HiveQL語(yǔ)言在底層被轉(zhuǎn)化為相應(yīng)的MapReduce操作。32 Hbase過(guò)濾器實(shí)現(xiàn)原則答:

44、過(guò)濾器必須實(shí)現(xiàn) HBase Jar 包中的 Filter 接口,或者繼承擴(kuò)展一個(gè)實(shí)現(xiàn)了該接口的抽象 類。33 Reduce后輸出的數(shù)據(jù)量有多大34 Datanode在什么情況下不會(huì)備份?答:在配置文件中datanode的數(shù)量設(shè)置為1時(shí)35 Combine出現(xiàn)在哪個(gè)過(guò)程?答:Map Task執(zhí)行過(guò)程中,Combine可能出現(xiàn)在兩個(gè)地方:寫(xiě)緩沖區(qū)溢寫(xiě)過(guò)程中、溢寫(xiě)文件合并過(guò)程中。36 Hdfs的體系結(jié)構(gòu)?37 Flush的過(guò)程?答:flush 是在內(nèi)存的基礎(chǔ)上進(jìn)行的,首先寫(xiě)入文件的時(shí)候,會(huì)先將文件寫(xiě)到內(nèi)存中,當(dāng)內(nèi) 存寫(xiě)滿的時(shí)候,就會(huì)清空緩存中的文件,然后一次性的將文件全部都寫(xiě)到硬盤(pán)中去保存。38 什

45、么是隊(duì)列?答:隊(duì)列是一種數(shù)據(jù)結(jié)構(gòu)它有兩個(gè)基本操作:在隊(duì)列尾部加人一個(gè)元素,和從隊(duì)列頭部移除一個(gè)元素就是說(shuō),隊(duì)列以一種先進(jìn)先出的方式管理數(shù)據(jù),如果你試圖向一個(gè) 已經(jīng)滿了的阻塞隊(duì)列中添加一個(gè)元素或者是從一個(gè)空的阻塞隊(duì)列中移除一個(gè)元索,將導(dǎo)致線程阻塞在多線程進(jìn)行合作時(shí),阻塞隊(duì)列是很有用的工具。工作者線程可 以定期地把中間結(jié)果存到阻塞隊(duì)列中而其他工作者線線程把中間結(jié)果取出并在將來(lái)修改它們。隊(duì)列會(huì)自動(dòng)平衡負(fù)載。如果第一個(gè)線程集運(yùn)行得比第二個(gè)慢,則第二個(gè) 線程集在等待結(jié)果時(shí)就會(huì)阻塞。如果第一個(gè)線程集運(yùn)行得快,那么它將等待第二個(gè)線程集趕上來(lái)。39 List與Set的區(qū)別?答:Set是最簡(jiǎn)單的一種集合。集合中

46、的對(duì)象不按特定的方式排序,并且沒(méi)有重復(fù)對(duì)象。 Set接口主要實(shí)現(xiàn)了兩個(gè)實(shí)現(xiàn)類:· HashSet: HashSet類按照哈希算法來(lái)存取集合中的對(duì)象,存取速度比較快 · TreeSet :TreeSet類實(shí)現(xiàn)了SortedSet接口,能夠?qū)现械膶?duì)象進(jìn)行排序。  List的特征是其元素以線性方式存儲(chǔ),集合中可以存放重復(fù)對(duì)象。 List接口主要實(shí)現(xiàn)類包括:· ArrayList() : 代表長(zhǎng)度可以改變得數(shù)組。可以對(duì)元素進(jìn)行隨機(jī)的訪問(wèn),向ArrayList()中插入與刪除元素的速度慢。 · LinkedLi

47、st(): 在實(shí)現(xiàn)中采用鏈表數(shù)據(jù)結(jié)構(gòu)。插入和刪除速度快,訪問(wèn)速度慢。 對(duì)于List的隨機(jī)訪問(wèn)來(lái)說(shuō),就是只隨機(jī)來(lái)檢索位于特定位置的元素。 List 的 get(int index) 方法放回集合中由參數(shù)index指定的索引位置的對(duì)象,下標(biāo)從“0” 開(kāi)始。最基本的兩種檢索集合中的所有對(duì)象的方法: 40 數(shù)據(jù)庫(kù)的三大范式?答:1第一范式第一范式是最基本的范式。如果數(shù)據(jù)庫(kù)表中的所有字段值都是不可分解的原子值,就說(shuō)明該數(shù)據(jù)庫(kù)表滿足了第一范式。2.第二范式第二范式在第一范式的基礎(chǔ)之上更進(jìn)一層。第二范式需要確保數(shù)據(jù)庫(kù)表中的每一列都和主鍵相關(guān),而不能只與主鍵的某一部分相關(guān)(主要針對(duì)聯(lián)合主鍵

48、而言)。也就是說(shuō)在一個(gè)數(shù)據(jù)庫(kù)表中,一個(gè)表中只能保存一種數(shù)據(jù),不可以把多種數(shù)據(jù)保存在同一張數(shù)據(jù)庫(kù)表中。3第三范式第三范式需要確保數(shù)據(jù)表中的每一列數(shù)據(jù)都和主鍵直接相關(guān),而不能間接相關(guān)。41 三個(gè)datanode當(dāng)有一個(gè)datanode出現(xiàn)錯(cuò)誤會(huì)怎樣?答:若存儲(chǔ)副本為3則不會(huì)影響數(shù)據(jù)的完整性。42 Sqoop在導(dǎo)入數(shù)據(jù)到mysql中,如何讓數(shù)據(jù)不重復(fù)導(dǎo)入?如果存在數(shù)據(jù)問(wèn)題sqoop如何處理?答:依靠mysql中的主鍵?還是sqoop有相關(guān)的命令參數(shù)設(shè)置?43 隨意使用各種類型的腳本語(yǔ)言實(shí)現(xiàn):批量將制定目錄下的所有文件中的$HADOOP_HOME$替換成/home/ocetl/app/hadoop答:

49、Python:import string,os,sysdir=/varfiles=os.listdir(dir)for f in files:tmpContents = ;for s in f.readlines():tmpContents += s.replace(“$HADOOP_HOME$”,” /home/ocetl/app/hadoop”)f.write(tmpContents)f.close()44 描述一下hadoop中哪些地方使用了緩存機(jī)制,作用分別是什么?答:緩存機(jī)制就是 DistributedCash,就是在 job 任務(wù)執(zhí)行前,將需要的文件拷貝到 Task 機(jī)器 上進(jìn)行緩

50、存,提高 mapreduce 的執(zhí)行效率。45 寫(xiě)代碼實(shí)現(xiàn)1G大小的文本文件,行分隔符為x01x02,統(tǒng)計(jì)一下該文件中的總行數(shù),要求注意邊界情況的處理import java.io.FileInputStream;import java.io.FileNotFoundException;import java.nio.ByteBuffer;import java.nio.channels.FileChannel;public class Maincls /* * param args * throws Exception */ public static void main(String arg

51、s) throws Exception / TODO Auto-generated method stubFileInputStream fin = new FileInputStream("c:test.txt"); / 獲取通道 FileChannel fc = fin.getChannel(); / 創(chuàng)建緩沖區(qū) ByteBuffer buffer = ByteBuffer.allocate(1024); / 讀取數(shù)據(jù)到緩沖區(qū) fc.read(buffer); buffer.flip(); int count =0; while (buffer.remaining()&

52、gt;0) byte b = buffer.get(); char charb = (char)b; if(charb='n') count+; System.out.print(count+); fin.close(); 46 現(xiàn)有1億個(gè)整數(shù)均勻分布,如果要得到前1k個(gè)最大的數(shù),求最優(yōu)的算法。(先不考慮內(nèi)存的限制,也不考慮讀寫(xiě)外存,時(shí)間復(fù)雜度最少的算法即為最優(yōu)算法)答:分塊,比如分1w塊,每塊1w個(gè),然后分別找出每塊最大值,從這最大的1w個(gè)找最大1k個(gè)。那么其他的9k個(gè)最大值所在的塊即可扔掉,從剩下的最大的1k個(gè)值所在的塊中找錢(qián)1k個(gè)即可,那么原問(wèn)題的規(guī)模就縮小到了1/10。

53、47 用mapreduce實(shí)現(xiàn)sql語(yǔ)句select count(x) from a group by b?48 用mapreduce如何實(shí)現(xiàn)兩張表連接,有哪些方法?49 Hive如何調(diào)優(yōu)50 Hive如何權(quán)限控制Hive從0.10版本以后可以通過(guò)元數(shù)據(jù)來(lái)控制權(quán)限,Hive-0.10之前的版本通過(guò)linux的用戶和答:用戶組來(lái)控制權(quán)限,不能對(duì)hive表的create、select、drop等操作進(jìn)行控制,當(dāng)然hive基于元數(shù)據(jù)來(lái)控制權(quán)限也不是完全安全的,目的就是為了防止用戶不小心做了不該做的操作。在hive-site.xml中配置兩個(gè)參數(shù):hive.security.authorization

54、.enabled參數(shù)是開(kāi)啟權(quán)限驗(yàn)證,默認(rèn)為false。 hive.security.authorization.createtable.owner.grants參數(shù)是指表的創(chuàng)建者對(duì)表?yè)碛兴袡?quán)限,例如創(chuàng)建一個(gè)表table1,這個(gè)用戶對(duì)表table1擁有SELECT、DROP等操作。還有個(gè)值是NULL,表示表的創(chuàng)建者無(wú)法訪問(wèn)該表,這個(gè)肯定是不合理的。Hive授權(quán)的核心就是用戶(user)、組(group)、角色(role),hive中的角色和平常認(rèn)識(shí)的角色是有區(qū)別的,hive中的角色可以理解為一部分有一些相同屬性的用戶或組huojuese的集合,這里有個(gè)遞歸的概念,就是一個(gè)角色可以是一些角色的集

55、合。51 Hbase寫(xiě)數(shù)據(jù)的原理是什么答:首先寫(xiě)入memstore中,memstore達(dá)到閾值后溢寫(xiě)到storefile中。52 Hive能像關(guān)系數(shù)據(jù)庫(kù)那樣建多個(gè)庫(kù)嗎?答:可以。使用create database語(yǔ)句。53 Hbase宕機(jī)如何處理?答:hbase宕機(jī)情況1、hbase的regionserver進(jìn)程隨機(jī)掛掉。2、hmaster進(jìn)程隨機(jī)掛掉。3、主備namenode節(jié)點(diǎn)隨機(jī)掛掉。4、zookeeper連接超時(shí)。5、jvm gc睡眠時(shí)間過(guò)長(zhǎng)。6、datanode寫(xiě)入超時(shí)。問(wèn)題解決從以下幾個(gè)方面著手:1、hbase的zk連接超時(shí)相關(guān)參數(shù)調(diào)優(yōu);默認(rèn)的zk超時(shí)設(shè)置太短,一旦發(fā)生full gc,極其容易導(dǎo)致zk連接超時(shí);2、hbase的jvm gc相關(guān)參數(shù)調(diào)優(yōu);減少單次gc的時(shí)間和full gc頻率。3、zkse

溫馨提示

  • 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)論