Hadoop面試題匯總_第1頁
Hadoop面試題匯總_第2頁
Hadoop面試題匯總_第3頁
Hadoop面試題匯總_第4頁
Hadoop面試題匯總_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、單選題1.下面哪個(gè)程序負(fù)責(zé) HDFS 數(shù)據(jù)存儲。a)NameNode b)Jobtracker c)Datanode d)secondaryNameNode e)tasktracker答案C datanode2. HDfS 中的 block 默認(rèn)保存幾份?a)3 份 b)2 份c)1 份d)不確定答案A默認(rèn)3分3. 下列哪個(gè)程序通常與 NameNode 在一個(gè)節(jié)點(diǎn)啟動?a)SecondaryNameNode b)DataNode c)TaskTracker d)Jobtracker答案D4. Hadoop 作者a)Martin Fowler b)Kent Beck c)Doug cutting

2、 答案C Doug cutting5. HDFS 默認(rèn) Block Sizea)32MB b)64MB c)128MB答案:1.X版本是64M2.X版本是128M6.下列哪項(xiàng)通常是集群的最主要瓶頸a)CPU b)網(wǎng)絡(luò) c)磁盤IO d)內(nèi)存答案:C磁盤7.Doug Cutting所創(chuàng)立的項(xiàng)目的名稱都受到其家人的啟發(fā),以下項(xiàng)目不是由他創(chuàng)立的項(xiàng)目是A HadoopB NutchC LuceneD Solr答案:D8.配置Hadoop時(shí),JAVA_HOME包含在哪一個(gè)配置文件中A hadoop-default.xmlB hadoop-env.shC hadoop-site.xmlD configur

3、ation.xsl答案:B9. Hadoop配置文件中,hadoop-site.xml顯示覆蓋hadoop-default.xml里的內(nèi)容。在版本0.20中,hadoop-site.xml被分離成三個(gè)XML文件,不包括A conf-site.xmlB mapred-site.xmlC core-site.xmlD hdfs-site.xml答案:A10.HDFS默認(rèn)的當(dāng)前工作目錄是/user/$USER,的值需要在哪個(gè)配置文件內(nèi)說明A. mapred-site.xmlB. core-site.xmlC. hdfs-site.xmlD. 以上均不是答案:B11.關(guān)于

4、Hadoop單機(jī)模式和偽分布式模式的說法,正確是A 兩者都起守護(hù)進(jìn)程,且守護(hù)進(jìn)程運(yùn)行在一臺機(jī)器上B 單機(jī)模式不使用HDFS,但加載守護(hù)進(jìn)程C 兩者都不與守護(hù)進(jìn)程交互,避免復(fù)雜性D 后者比前者增加了HDFS輸入輸出以及可檢查內(nèi)存使用情況答案:D12.下列關(guān)于Hadoop API的說法錯(cuò)誤的是A Hadoop的文件API不是通用的,只用于HDFS文件系統(tǒng)B Configuration類的默認(rèn)實(shí)例化方法是以HDFS系統(tǒng)的資源配置為基礎(chǔ)的C FileStatus對象存儲文件和目錄的元數(shù)據(jù)D FSDataInputStream是java.io.DataInputStream的子類答案:A13.HDFS的

5、NameNode負(fù)責(zé)管理文件系統(tǒng)的命名空間,將所有的文件和文件夾的元數(shù)據(jù)保存在一個(gè)文件系統(tǒng)樹中,這些信息也會在硬盤上保存成以下文件:A日志B命名空間鏡像C兩者都是答案:C14. HDFS的namenode保存了一個(gè)文件包括哪些數(shù)據(jù)塊,分布在哪些數(shù)據(jù)節(jié)點(diǎn)上,這些信息也存儲在硬盤上。A正確B錯(cuò)誤答案:B知識點(diǎn):在系統(tǒng)啟動的時(shí)候從數(shù)據(jù)節(jié)點(diǎn)收集而成的15.Secondary namenode就是namenode出現(xiàn)問題時(shí)的備用節(jié)點(diǎn) A正確B錯(cuò)誤答案:B知識點(diǎn):它和元數(shù)據(jù)節(jié)點(diǎn)負(fù)責(zé)不同的事情。其主要功能就是周期性將元數(shù)據(jù)節(jié)點(diǎn)的命名空間鏡像文件和修改日志合并,以防日志文件過大。合并過后的命名空間鏡像文件也在

6、Secondary namenode保存了一份,以防namenode失敗的時(shí)候,可以恢復(fù)。16.HDFS的是基于流數(shù)據(jù)模式訪問和處理超大文件的需求而開發(fā)的,默認(rèn)的最基本的存儲單位是64M,具有高容錯(cuò)、高可靠性、高可擴(kuò)展性、高吞吐率等特征,適合的讀寫任務(wù)是A一次寫入,少次讀寫B(tài)多次寫入,少次讀寫C一次寫入,多次讀寫D多次寫入,多次讀寫答案:C17.HDFS無法高效存儲大量小文件,想讓它能處理好小文件,比較可行的改進(jìn)策略不包括A 利用SequenceFile、MapFile、Har等方式歸檔小文件B 多Master設(shè)計(jì)C Block大小適當(dāng)調(diào)小D 調(diào)大namenode內(nèi)存或?qū)⑽募到y(tǒng)元數(shù)據(jù)存到硬盤

7、里答案:D18.關(guān)于HDFS的文件寫入,正確的是A 支持多用戶對同一文件的寫操作B 用戶可以在文件任意位置進(jìn)行修改C 默認(rèn)將文件塊復(fù)制成三份存放D 復(fù)制的文件塊默認(rèn)都存在同一機(jī)架上答案:C19.Hadoop fs中的-get和-put命令操作對象是A 文件B 目錄C 兩者都是答案:C20.Namenode在啟動時(shí)自動進(jìn)入安全模式,在安全模式階段,說法錯(cuò)誤的是A 安全模式目的是在系統(tǒng)啟動時(shí)檢查各個(gè)DataNode上數(shù)據(jù)塊的有效性B 根據(jù)策略對數(shù)據(jù)塊進(jìn)行必要的復(fù)制或刪除C 當(dāng)數(shù)據(jù)塊最小百分比數(shù)滿足的最小副本數(shù)條件時(shí),會自動退出安全模式D 文件系統(tǒng)允許有修改答案:D21. 下列關(guān)于HDFS為存儲Ma

8、pReduce并行切分和處理的數(shù)據(jù)做的設(shè)計(jì),錯(cuò)誤的是 A FSDataInputStream擴(kuò)展了DataInputStream以支持隨機(jī)讀 B 為實(shí)現(xiàn)細(xì)粒度并行,輸入分片(Input Split)應(yīng)該越小越好 C 一臺機(jī)器可能被指派從輸入文件的任意位置開始處理一個(gè)分片 D 輸入分片是一種記錄的邏輯劃分,而HDFS數(shù)據(jù)塊是對輸入數(shù)據(jù)的物理分割 答案:B多選題1. 關(guān)于 SecondaryNameNode 哪項(xiàng)是正確的?a)它是 NameNode 的熱備 b)它對內(nèi)存沒有要求c)它的目的是幫助 NameNode 合并編輯日志,減少 NameNode 啟動時(shí)間d)SecondaryNameNode

9、 應(yīng)與 NameNode 部署到一個(gè)節(jié)點(diǎn)答案C D2. 下列哪項(xiàng)可以作為集群的管理?a)Puppet b)Pdsh c)Cloudera Manager d)Zookeeper答案1:ABC3. 配置機(jī)架感知的下面哪項(xiàng)正確a)如果一個(gè)機(jī)架出問題,不會影響數(shù)據(jù)讀寫b)寫入數(shù)據(jù)的時(shí)候會寫到不同機(jī)架的 DataNode 中c)MapReduce 會根據(jù)機(jī)架獲取離自己比較近的網(wǎng)絡(luò)數(shù)據(jù)答案ABC具體可以參考hadoop機(jī)架感知-加強(qiáng)集群穩(wěn)固性,該如何配置hadoop機(jī)架感知4. Client 端上傳文件的時(shí)候下列哪項(xiàng)正確a)數(shù)據(jù)經(jīng)過 NameNode 傳遞給 DataNodeb)Client 端將文件切

10、分為 Block,依次上傳c)Client 只上傳數(shù)據(jù)到一臺 DataNode,然后由 NameNode 負(fù)責(zé) Block 復(fù)制工作答案B5. 下列哪個(gè)是 Hadoop 運(yùn)行的模式a)單機(jī)版 b)偽分布式 c)分布式答案ABC6. Cloudera 提供哪幾種安裝 CDH 的方法a)Cloudera manager b)Tarball c)Yum d)Rpm答案:ABCD具體可以參考Hadoop CDH四種安裝方式總結(jié)及實(shí)例指導(dǎo)簡答題1.Hadoop集群可以運(yùn)行的3個(gè)模式?1)單機(jī)(本地)模式;2)偽分布式模式;3)全分布式模式;2.單機(jī)(本地)模式中的注意點(diǎn)?在單機(jī)模式(standalone

11、)中不會存在守護(hù)進(jìn)程,所有東西都運(yùn)行在一個(gè)JVM上。這里同樣沒有DFS,使用的是本地文件系統(tǒng)。單機(jī)模式適用于開發(fā)過程中運(yùn)行MapReduce程序,這也是最少使用的一個(gè)模式。3.偽分布模式中的注意點(diǎn)?偽分布式(Pseudo)適用于開發(fā)和測試環(huán)境,在這個(gè)模式中,所有守護(hù)進(jìn)程都在同一臺機(jī)器上運(yùn)行。4. 全分布模式又有什么注意點(diǎn)?全分布模式通常被用于生產(chǎn)環(huán)境,這里我們使用N臺主機(jī)組成一個(gè)Hadoop集群,Hadoop守護(hù)進(jìn)程運(yùn)行在每臺主機(jī)之上。這里會存在Namenode運(yùn)行的主機(jī),Datanode運(yùn)行的主機(jī),以及task tracker運(yùn)行的主機(jī)。在分布式環(huán)境下,主節(jié)點(diǎn)和從節(jié)點(diǎn)會分開。5. Hadoo

12、p是否遵循UNIX模式?是的,在UNIX用例下,Hadoop還擁有“conf”目錄。6. Hadoop的核心配置是什么?Hadoop的核心配置通過兩個(gè)xml文件來完成:1,hadoop-default.xml;2,hadoop-site.xml。這些文件都使用xml格式,因此每個(gè)xml中都有一些屬性,包括名稱和值,但是當(dāng)下這些文件都已不復(fù)存在。7. 那當(dāng)下又該如何配置?Hadoop現(xiàn)在擁有3個(gè)配置文件:1,core-site.xml;2,hdfs-site.xml;3,mapred-site.xml。這些文件都保存在conf/子目錄下。8. fs.mapr.working.dir只是單一的目錄

13、?fs.mapr.working.dir只是一個(gè)目錄。9. hdfs-site.xml的3個(gè)主要屬性?.dir決定的是元數(shù)據(jù)存儲的路徑以及DFS的存儲方式(磁盤或是遠(yuǎn)端)dfs.data.dir決定的是數(shù)據(jù)存儲的路徑fs.checkpoint.dir用于第二Namenode10. 如何退出輸入模式?退出輸入的方式有:1,按ESC;2,鍵入:q(如果你沒有輸入任何當(dāng)下)或者鍵入:wq(如果你已經(jīng)輸入當(dāng)下),并且按下Enter。11. “jps”命令的用處?這個(gè)命令可以檢查Namenode、Datanode、Task Tracker、 Job Tracker是否正常工作。12. 如

14、何重啟Namenode?點(diǎn)擊stop-all.sh,再點(diǎn)擊start-all.sh。鍵入sudo hdfs(Enter),su-hdfs (Enter),/etc/init.d/ha(Enter),及/etc/init.d/hadoop-0.20-namenode start(Enter)。13. Fsck的全名?全名是:File System Check。14. mapred.job.tracker命令的作用?可以讓你知道哪個(gè)節(jié)點(diǎn)是Job Tracker。15. /etc /init.d命令的作用是?/etc /init.d說明了守護(hù)進(jìn)程(服務(wù))的位置或狀態(tài),其實(shí)是LINUX特性,和Hado

15、op關(guān)系不大。16. 如何在瀏覽器中查找Namenode?如果你確實(shí)需要在瀏覽器中查找Namenode,你不再需要localhost:8021,Namenode的端口號是50070。17. hadoop-env.sh是用于做什么的?hadoop-env.sh提供了Hadoop中. JAVA_HOME的運(yùn)行環(huán)境。18. Master文件是否提供了多個(gè)入口?是的你可以擁有多個(gè)Master文件接口。19. Hadoop-env.sh文件當(dāng)下的位置?hadoop-env.sh現(xiàn)在位于conf。20. 在Hadoop_PID_DIR中,PID代表了什么?PID代表了“Process ID”。21. /v

16、ar/hadoop/pids用于做什么?/var/hadoop/pids用來存儲PID。22. Hadoop需求什么樣的網(wǎng)絡(luò)?Hadoop核心使用Shell(SSH)來驅(qū)動從節(jié)點(diǎn)上的服務(wù)器進(jìn)程,并在主節(jié)點(diǎn)和從節(jié)點(diǎn)之間使用password-less SSH連接。23.全分布式環(huán)境下為什么需求password-less SSH?這主要因?yàn)榧褐型ㄐ胚^于頻繁,Job Tracker需要盡可能快的給Task Tracker發(fā)布任務(wù)。24. SSH工作的端口號是?SSH工作的端口號是NO.22,當(dāng)然可以通過它來配置,22是默認(rèn)的端口號。25.為什么SSH本地主機(jī)需要密碼?在SSH中使用密碼主要是增加安全

17、性,在某些情況下也根本不會設(shè)置密碼通信。26.如果在SSH中添加key,是否還需要設(shè)置密碼?是的,即使在SSH中添加了key,還是需要設(shè)置密碼。27.假如Namenode中沒有數(shù)據(jù)會怎么樣?沒有數(shù)據(jù)的Namenode就不能稱之為Namenode,通常情況下,Namenode肯定會有數(shù)據(jù)28.當(dāng)Job Tracker宕掉時(shí),Namenode會發(fā)生什么?當(dāng)Job Tracker失敗時(shí),集群仍然可以正常工作,只要Namenode沒問題。29.是否可以在Windows上運(yùn)行Hadoop?你最好不要這么做,Red Hat Linux或者是Ubuntu才是Hadoop的最佳操作系統(tǒng)。在Hadoop安裝中,

18、Windows通常不會被使用,因?yàn)闀霈F(xiàn)各種各樣的問題。因此,Windows絕對不是Hadoop的推薦系統(tǒng)。30.簡要描述如何安裝配置一個(gè)apache開源版hadoop,描述即可,列出步驟更好1.配置主機(jī)名2.配置Hosts3.配置面密碼互通4.安裝JDK5.安裝hadoop6.配置hadoop(1)修改 hadoop-env.sh(2)修改 core-site.xml(3)修改 hdfs-site.xml(4)修改 mapred-site.xml(5)修改 yarn-site.xml(6)修改 slaves7.配置hadoop的環(huán)境變量 8.格式化namenode32.請列出正常工作的had

19、oop集群中hadoop都需要啟動哪些進(jìn)程,他們的作用分別是什么?NameNode - hdfs名字節(jié)點(diǎn),存儲hdfs元數(shù)據(jù)SecondaryNameNode - 輔助NameNode實(shí)現(xiàn)fsimage文件和edits文件的合并DataNode - 存儲數(shù)據(jù)的節(jié)點(diǎn)ResourceManager -負(fù)責(zé)集群中所有資源的統(tǒng)一管理和分,它接收來自各個(gè)節(jié)點(diǎn)(NodeManager)的資源匯報(bào)信息,并把這些信息按照一定的策略分配給各個(gè)應(yīng)用程序NodeManager -是YARN中每個(gè)節(jié)點(diǎn)上的代理,它管理Hadoop集群中單個(gè)計(jì)算節(jié)點(diǎn),包括與ResourceManger保持通信,監(jiān)督Container的生

20、命周期管理,監(jiān)控每個(gè)Container的資源使用(內(nèi)存、CPU等)情況,追蹤節(jié)點(diǎn)健康狀況,管理日志和不同應(yīng)用程序用到的附屬服務(wù)(auxiliary service)33.請寫出以下執(zhí)行命令1)殺死一個(gè)job?hadoop job kill job_id2)刪除hdfs上的/tmp/aaa目錄hadoop fs -rmdir /tmp/aaa3加入一個(gè)新的存儲節(jié)點(diǎn)和刪除一個(gè)計(jì)算節(jié)點(diǎn)需要刷新集群狀態(tài)命令?hadoop balance5.請列出你所知道的hadoop調(diào)度器,并簡要說明其工作方法?(1)默認(rèn)的調(diào)度器FIFO(2) 計(jì)算能力調(diào)度器Capacity Scheduler(3)公平調(diào)度器Fai

21、r Scheduler(4)適用于異構(gòu)集群的調(diào)度器LATE(5)適用于實(shí)時(shí)作業(yè)的調(diào)度器Deadline Scheduler和Constraint-based Scheduler6.請列出在你以前工作中所使用過的開發(fā)mapreduce的語言?Java7.當(dāng)前日志采樣格式為34.hive有哪些方式保存元數(shù)據(jù),各有哪些特點(diǎn)?Hive原生使用derby作為元數(shù)據(jù)庫,無法并發(fā)調(diào)用hive可以將Hive元數(shù)據(jù)保存在mysql數(shù)據(jù)庫中遠(yuǎn)程服務(wù)器模式,在服務(wù)器端啟動一個(gè) MetaStoreServer,客戶端利用 Thrift 協(xié)議通過 MetaStoreServer 訪問元數(shù)據(jù)庫35.請簡述hadoop怎么

22、樣實(shí)現(xiàn)二級排序?有兩種方法進(jìn)行二次排序,分別為:buffer and in memory sort和 value-to-key conversion。對于buffer and in memory sort,主要思想是:在reduce()函數(shù)中,將某個(gè)key對應(yīng)的所有value保存下來,然后進(jìn)行排序。 這種方法最大的缺點(diǎn)是:可能會造成out of memory。對于value-to-key conversion,主要思想是:將key和部分value拼接成一個(gè)組合key(實(shí)現(xiàn)WritableComparable接口或者調(diào)用setSortComparatorClass函數(shù)),這樣reduce獲取的結(jié)

23、果便是先按key排序,后按value排序的結(jié)果,需要注意的是,用戶需要自己實(shí)現(xiàn)Paritioner,以便只按照key進(jìn)行數(shù)據(jù)劃分36.簡述hadoop實(shí)現(xiàn)join的幾種方法?2.1 reduce side joinreduce side join是一種最簡單的join方式,其主要思想如下:在map階段,map函數(shù)同時(shí)讀取兩個(gè)文件File1和File2,為了區(qū)分兩種來源的key/value數(shù)據(jù)對,對每條數(shù)據(jù)打一個(gè)標(biāo)簽(tag),比如:tag=0表示來自文件File1,tag=2表示來自文件File2。即:map階段的主要任務(wù)是對不同文件中的數(shù)據(jù)打標(biāo)簽。在reduce階段,reduce函數(shù)獲取ke

24、y相同的來自File1和File2文件的value list, 然后對于同一個(gè)key,對File1和File2中的數(shù)據(jù)進(jìn)行join(笛卡爾乘積)。即:reduce階段進(jìn)行實(shí)際的連接操作。2.2 map side join之所以存在reduce side join,是因?yàn)樵趍ap階段不能獲取所有需要的join字段,即:同一個(gè)key對應(yīng)的字段可能位于不同map中。Reduce side join是非常低效的,因?yàn)閟huffle階段要進(jìn)行大量的數(shù)據(jù)傳輸。Map side join是針對以下場景進(jìn)行的優(yōu)化:兩個(gè)待連接表中,有一個(gè)表非常大,而另一個(gè)表非常小,以至于小表可以直接存放到內(nèi)存中。這樣,我們可以

25、將小表復(fù)制多份,讓每個(gè)map task內(nèi)存中存在一份(比如存放到hash table中),然后只掃描大表:對于大表中的每一條記錄key/value,在hash table中查找是否有相同的key的記錄,如果有,則連接后輸出即可。為了支持文件的復(fù)制,Hadoop提供了一個(gè)類DistributedCache,使用該類的方法如下:(1)用戶使用靜態(tài)方法DistributedCache.addCacheFile()指定要復(fù)制的文件,它的參數(shù)是文件的URI(如果是HDFS上的文件,可以這樣:hdfs:/namenode:9000/home/XXX/file,其中9000是自己配置的NameNode端口號

26、)。JobTracker在作業(yè)啟動之前會獲取這個(gè)URI列表,并將相應(yīng)的文件拷貝到各個(gè)TaskTracker的本地磁盤上。(2)用戶使用DistributedCache.getLocalCacheFiles()方法獲取文件目錄,并使用標(biāo)準(zhǔn)的文件讀寫API讀取相應(yīng)的文件。2.3 SemiJoinSemiJoin,也叫半連接,是從分布式數(shù)據(jù)庫中借鑒過來的方法。它的產(chǎn)生動機(jī)是:對于reduce side join,跨機(jī)器的數(shù)據(jù)傳輸量非常大,這成了join操作的一個(gè)瓶頸,如果能夠在map端過濾掉不會參加join操作的數(shù)據(jù),則可以大大節(jié)省網(wǎng)絡(luò)IO。實(shí)現(xiàn)方法很簡單:選取一個(gè)小表,假設(shè)是File1,將其參與j

27、oin的key抽取出來,保存到文件File3中,F(xiàn)ile3文件一般很小,可以放到內(nèi)存中。在map階段,使用DistributedCache將File3復(fù)制到各個(gè)TaskTracker上,然后將File2中不在File3中的key對應(yīng)的記錄過濾掉,剩下的reduce階段的工作與reduce side join相同。2.4 reduce side join + BloomFilter在某些情況下,SemiJoin抽取出來的小表的key集合在內(nèi)存中仍然存放不下,這時(shí)候可以使用BloomFiler以節(jié)省空間。BloomFilter最常見的作用是:判斷某個(gè)元素是否在一個(gè)集合里面。它最重要的兩個(gè)方法是:a

28、dd() 和contains()。最大的特點(diǎn)是不會存在false negative,即:如果contains()返回false,則該元素一定不在集合中,但會存在一定的true negative,即:如果contains()返回true,則該元素可能在集合中。因而可將小表中的key保存到BloomFilter中,在map階段過濾大表,可能有一些不在小表中的記錄沒有過濾掉(但是在小表中的記錄一定不會過濾掉),這沒關(guān)系,只不過增加了少量的網(wǎng)絡(luò)IO而已。37.請用Java實(shí)現(xiàn)非遞歸二分查找?public static int binarySearch(IntegersrcArray,int des)/

29、第一個(gè)位置.int low=0;/最高位置.數(shù)組長度-1,因?yàn)橄聵?biāo)是從0開始的.int high=srcArray.length-1;/當(dāng)low指針和high不重復(fù)的時(shí)候.while(low1);/與最中間的數(shù)字進(jìn)行判斷,是否相等,相等的話就返回對應(yīng)的數(shù)組下標(biāo).if(des=srcArraymiddle)return middle;/如果小于的話則移動最高層的指針else if(dessrcArraymiddle)high=middle-1;/移動最低的指針elselow=middle+1;return -1;38.請簡述mapreduce中,combiner,partition作用?Part

30、ition:分區(qū)操作是shuffle操作中的一個(gè)重要過程,作用就是將map的結(jié)果按照規(guī)則分發(fā)到不同reduce中進(jìn)行處理,從而按照分區(qū)得到多個(gè)輸出結(jié)果Combiner:每一個(gè)MapperTask可能會產(chǎn)生大量的輸出,combiner的作用就是在MapperTask端對輸出先做一次合并,以減少傳輸?shù)絩educerTask的數(shù)據(jù)量39用mapreduce如何處理數(shù)據(jù)傾斜問題1. 增加reduce 的jvm內(nèi)存2. 增加reduce 個(gè)數(shù)3. customer partition4. 其他優(yōu)化的討論.5. reduce sort merge排序算法的討論6. 正在實(shí)現(xiàn)中的hive skewed jo

31、in.7. pipeline8. distinct9. index 尤其是bitmap index40 Hive中內(nèi)部表和外部表的區(qū)別內(nèi)部表現(xiàn)有表后有數(shù)據(jù),數(shù)據(jù)在hive的hdfs目錄下管理外部表先有數(shù)據(jù)后有表,數(shù)據(jù)不再hive的hdfs目錄下管理刪除表時(shí),內(nèi)部表對應(yīng)文件被刪除刪除表時(shí),外部表對應(yīng)的文件不會被刪除41用JAVA使用非遞歸二分查找參看題3742HADOOP如何處理大量小文件(1) Hadoop ArchiveHadoop Archive或者HAR,是一個(gè)高效地將小文件放入HDFS塊中的文件存檔工具,它能夠?qū)⒍鄠€(gè)小文件打包成一個(gè)HAR文件,這樣在減少namenode內(nèi)存使用的同時(shí),

32、仍然允許對文件進(jìn)行透明的訪問。對某個(gè)目錄/foo/bar下的所有小文件存檔成/outputdir/ zoo.har:hadoop archive -archiveName zoo.har -p /foo/bar /outputdir當(dāng)然,也可以指定HAR的大小(使用-Dhar.block.size)。HAR是在Hadoop file system之上的一個(gè)文件系統(tǒng),因此所有fs shell命令對HAR文件均可用,只不過是文件路徑格式不一樣,HAR的訪問路徑可以是以下兩種格式:har:/scheme-hostname:port/archivepath/fileinarchivehar:/arch

33、ivepath/fileinarchive(本節(jié)點(diǎn))可以這樣查看HAR文件存檔中的文件:hadoop dfs -ls har:/user/zoo/foo.har輸出:har:/user/zoo/foo.har/hadoop/dir1har:/user/zoo/foo.har/hadoop/dir2使用HAR時(shí)需要兩點(diǎn),第一,對小文件進(jìn)行存檔后,原文件并不會自動被刪除,需要用戶自己刪除;第二,創(chuàng)建HAR文件的過程實(shí)際上是在運(yùn)行一個(gè)mapreduce作業(yè),因而需要有一個(gè)hadoop集群運(yùn)行此命令。此外,HAR還有一些缺陷:第一,一旦創(chuàng)建,Archives便不可改變。要增加或移除里面的文件,必須重新

34、創(chuàng)建歸檔文件。第二,要?dú)w檔的文件名中不能有空格,否則會拋出異常,可以將空格用其他符號替換(使用-Dhar.space.replacement.enable=true 和-Dhar.space.replacement參數(shù))。(2) Sequence filesequence file由一系列的二進(jìn)制key/value組成,如果為key小文件名,value為文件內(nèi)容,則可以將大批小文件合并成一個(gè)大文件。Hadoop-0.21.0中提供了SequenceFile,包括Writer,Reader和SequenceFileSorter類進(jìn)行寫,讀和排序操作。如果hadoop版本低于0.21.0的版本,實(shí)

35、現(xiàn)方法可參見3。(3)CombineFileInputFormatCombineFileInputFormat是一種新的inputformat,用于將多個(gè)文件合并成一個(gè)單獨(dú)的split,另外,它會考慮數(shù)據(jù)的存儲位置。43hdfs中的block默認(rèn)保存幾份?3份44 hive udf繼承那個(gè)類創(chuàng)建類繼承UDF自己編寫一個(gè)evaluate方法,返回值和參數(shù)任意。45.請列出正常工作的hadoop集群中hadoop都需要啟動哪些進(jìn)程,他們的作用分別是什么?參看題3246、Maperduce處理過程1)輸入文件(File)2)格式化輸入文件(InputFormat)3)分割器(InputSplit)4

36、)RecordReader5)Mapper6)分區(qū)和洗牌(Partition & Shuffle)7)Sort8)Reducer9)格式化輸出(OutputFormat)47、Hadoop流程參看題4848、Hadoop上傳細(xì)節(jié)使用HDFS提供的客戶端開發(fā)庫Client,向遠(yuǎn)程的Namenode發(fā)起RPC請求;Namenode會檢查要?jiǎng)?chuàng)建的文件是否已經(jīng)存在,創(chuàng)建者是否有權(quán)限進(jìn)行操作,成功則會為文件創(chuàng)建一個(gè)記錄,否則會讓客戶端拋出異常;當(dāng)客戶端開始寫入文件的時(shí)候,開發(fā)庫會將文件切分成多個(gè)packets,并在內(nèi)部以數(shù)據(jù)隊(duì)列data queue的形式管理這些packets,并向Namenode申請新

37、的blocks,獲取用來存儲replicas的合適的datanodes列表, 列表的大小根據(jù)在Namenode中對replication的設(shè)置而定。開始以pipeline(管道)的形式將packet寫入所 有的replicas中。開發(fā)庫把packet以流的方式寫入第一個(gè)datanode,該datanode把該packet存儲之后,再將其傳遞給在此 pipeline中的下一個(gè)datanode,直到最后一個(gè)datanode,這種寫數(shù)據(jù)的方式呈流水線的形式。最后一個(gè)datanode成功存儲之后會返回一個(gè)ack packet,在pipeline里傳遞至客戶端,在客戶端的開發(fā)庫內(nèi)部維護(hù)著ack queu

38、e,成功收到datanode返回的ack packet后會從ack queue移除相應(yīng)的packet。如果傳輸過程中,有某個(gè)datanode出現(xiàn)了故障,那么當(dāng)前的pipeline會被關(guān)閉,出現(xiàn)故障的datanode會從當(dāng)前的pipeline中移除, 剩余的block會繼續(xù)剩下的datanode中繼續(xù)以pipeline的形式傳輸,同時(shí)Namenode會分配一個(gè)新的datanode,保持 replicas設(shè)定的數(shù)量。49、Zookeeper的做什么的zookeeper是一個(gè)開放源碼的分布式協(xié)調(diào)服務(wù),是一種典型的分布式數(shù)據(jù)一致性解決方案。由雅虎創(chuàng)建,貢獻(xiàn)給了apache。利用zookeeper可以實(shí)

39、現(xiàn)數(shù)據(jù)發(fā)布訂閱、負(fù)載均衡、命名服務(wù)、分布式協(xié)調(diào)/通知、集群管理、分布式鎖、分布式隊(duì)列等功能。50、NIO是什么NIO是jdk4提供的一種新的io方式,也叫做非阻塞式IO,特點(diǎn)是可以在非阻塞模式下進(jìn)行工作,ACCEPT CONNECT READ WRITE時(shí)都不會產(chǎn)生阻塞,從而可以解決BIO在高并發(fā)場景下遇到的問題。51、Hbase的細(xì)節(jié)hbase中的表在行的方向上分隔為多個(gè)HRegion,分散在不同的RegionServer中這樣做的目的是在查詢時(shí)可以將工作量分布到多個(gè)RegionServer中以提高速度region由startkey,endkey)表示HRegion是hbase分布式存儲和負(fù)

40、載均衡的最小單元要注意HRegion不在hdfs中,而是在RegionServer的內(nèi)存中,在內(nèi)存(其實(shí)也有數(shù)據(jù)在本地文件系統(tǒng)中,因?yàn)閮?nèi)存空間畢竟是有限的)中存儲數(shù)據(jù)以提高查詢性能,對于修改會將數(shù)據(jù)同步到hdfs中,以持久化數(shù)據(jù)。hbase中的數(shù)據(jù)按照rowkey的字典順序(字典順序!先比較第一位 如果相同再比較第二位。)按序存儲,所以當(dāng)以rowkey查詢數(shù)據(jù)時(shí),可以提高速度。hregion的分裂,當(dāng)hregion變的很大時(shí)會分裂成兩個(gè),存放到不同的RegionServer中,防止一個(gè)Region過大,導(dǎo)致查詢其中數(shù)據(jù)時(shí)速度很慢hbase的系統(tǒng)結(jié)構(gòu):主要有client master regio

41、nServer zookeeper52、什么是分布式分布式處理則是將不同地點(diǎn)的,或具有不同功能的,或擁有不同數(shù)據(jù)的多臺計(jì)算機(jī)通過通信網(wǎng)絡(luò)連接起來,在控制系統(tǒng)的統(tǒng)一管理控制下,協(xié)調(diào)地完成大規(guī)模信息處理任務(wù)的計(jì)算機(jī)系統(tǒng)。53函數(shù)式編程的好處:1.代碼簡潔,開發(fā)快速2.接近自然語言,易于理解3.更方便的代碼管理4.易于“并發(fā)編程”5.代碼的熱升級(函數(shù)式編程沒有副作用,只要保證接口不變,內(nèi)部實(shí)現(xiàn)是外部無關(guān)的。所以,可以在運(yùn)行狀態(tài)下直接升級代碼,不需要重啟,也不需要停機(jī)。)54 在linux中,比如啟動hadoop,會打印很多日志,什么命令可以不顯示這些日志?可以通過在命令前增加上nohup命令來實(shí)現(xiàn)

42、55 concurrent 的map 加鎖是加部分 鎖 是加的哪部分? 數(shù)據(jù)分段上56環(huán)形緩沖區(qū)集群搭配的作用和優(yōu)化?每個(gè)MapperTask有一個(gè)環(huán)形內(nèi)存緩沖區(qū),用于存儲map任務(wù)的輸出。默認(rèn)大小100MB(io.sort.mb屬性),一旦達(dá)到閥值0.8(io.sort.spill.percent),一個(gè)后臺線程把內(nèi)容寫到(spill)磁盤的指定目錄(mapred.local.dir)下的新建的一個(gè)溢出寫文件。寫磁盤前,要partition,sort,Combiner。如果有后續(xù)的數(shù)據(jù),將會繼續(xù)寫入環(huán)形緩沖區(qū)中,最終寫入下一個(gè)溢出文件中。環(huán)形緩沖區(qū)是一種緩沖區(qū)技術(shù),通過首尾相接的方式循環(huán)使用

43、緩沖區(qū),解決了數(shù)據(jù)量過大時(shí)緩沖區(qū)大小過大的問題。57、 zookeeper原理leader和所有的follower都可以提供查詢功能只有l(wèi)eader能夠提供增刪改的功能,如果客戶端連接follower表示要進(jìn)行增刪改,follower會將請求轉(zhuǎn)發(fā)給leader來處理。所有的增刪改的操作都會有一個(gè)版本號,這個(gè)版本號是遞增唯一的,用來記錄提案的順序。如何選老大?選老大情況1:集群剛啟動時(shí),誰當(dāng)老大都可以,一般是最先啟動的做老大選老大情況2:老大掛了,集群會暫時(shí)停止對外服務(wù)進(jìn)入選舉階段,所有follower都會廣播一個(gè)自己的所持有的最高版本給整個(gè)集群,當(dāng)大家收到其他follwoer發(fā)過來的最高版本信

44、息后,就會進(jìn)行投票,投給收到的版本信息最高的follwer,每個(gè)機(jī)器只能發(fā)一票,此時(shí)選擇集群中數(shù)據(jù)版本最高的機(jī)器做老大,任意一個(gè)follower當(dāng)發(fā)現(xiàn)自己收到了過半的投票(自己也可以投給自己),可以認(rèn)為獲得了選舉勝利,可以成為leader了。老大如何決定一個(gè)提案是否通過?如果老大自己說了算,那么如果剛好老大掛了,其他人不知道老大同一的提案,可能就造成新選出來的leader不知道之前老大同意過的提案,從而造成違反一致性。不可行如果老大把提案發(fā)給所有人,所有人都同意了才能通過提案,這時(shí)如果集群中任意一臺機(jī)器出問題,投票都無法進(jìn)行,相當(dāng)于存在單節(jié)點(diǎn)故障的可能。不可取。折中一下,老大收到提案后,發(fā)給所

45、有人,所有人收到后都要回復(fù)老大,當(dāng)老大收到過半同意的投票時(shí),則通過這個(gè)提案。這樣一來,極端的情況下只要集群中有過半的機(jī)器還活著,選出來的老大是一定知道之前老大最后提案的。!引申出來的結(jié)論是,zookeeper集群必須過半存活才能正常工作!!又引申出來的結(jié)論是,偶數(shù)臺機(jī)器提供的集群可靠性和偶數(shù)-1臺機(jī)器提供的可靠性是相同的!所以zookeeper集群中機(jī)器的數(shù)量最好是基數(shù)個(gè)。58、hadoop的namenode可以存那些數(shù)據(jù)包括文件和Block之間關(guān)系的信息、Block數(shù)量信息、Block和DataNode之間的關(guān)系信息59 NIO和BIO傳統(tǒng)的BIO面臨的問題:在執(zhí)行如下操作時(shí)會產(chǎn)生阻塞:AC

46、CEPT CONNECT READWRITE在高并發(fā)場景下,如上的方法產(chǎn)生的阻塞可能會產(chǎn)生一些無法避免的問題。在開發(fā)服務(wù)器程序時(shí),通常針對于每一個(gè)客戶端都要?jiǎng)?chuàng)建一個(gè)線程來處理,而線程的開辟和運(yùn)行是相當(dāng)耗費(fèi)資源的,服務(wù)器能夠運(yùn)行的并發(fā)線程數(shù)量是很有限的。在高并發(fā)場景下,大量的客戶端并發(fā)連接導(dǎo)致服務(wù)器創(chuàng)建大量線程,會直接影響服務(wù)器的性能。而一些場景下客戶端連接后傳輸?shù)臄?shù)據(jù)并不多,只是保持連接的狀態(tài),此時(shí)創(chuàng)建的大量線程閑置著浪費(fèi)服務(wù)器資源。所以我們想到用少量的線程來處理多個(gè)客戶端的連接,但是這種方式下傳統(tǒng)BIO會有阻塞的問題決定了是無法實(shí)現(xiàn)的。NIO 也叫做非阻塞式IO,特點(diǎn)是可以在非阻塞模式下進(jìn)行

47、工作,ACCEPT CONNECT READ WRITE時(shí)都不會產(chǎn)生阻塞,從而可以解決BIO在高并發(fā)場景下遇到的問題。BIO:面向流操作的是字節(jié)或字符InputStream OutputStream Reader Writer流只能單向傳輸數(shù)據(jù) 操作的是字節(jié)或字符NIO:面向通道操作的是緩沖區(qū)Channel Buffer Selector通道可以雙向的傳輸數(shù)據(jù) 操作的是緩沖區(qū)60 聚類包括那些?一堆數(shù)據(jù),怎么用聚類中的一個(gè)算法實(shí)現(xiàn)?K-MEANSk-means 算法接受輸入量 k ;然后將n個(gè)數(shù)據(jù)對象劃分為 k個(gè)聚類以便使得所獲得的聚類滿足:同一聚類中的對象相似度較高;而不同聚類中的對象相似度較小。聚類相似度是利用各聚類中對象的均值所獲得一個(gè)“中心對象”(引力中心)來進(jìn)行計(jì)算的。k-means 算法的工作過程說明如下:首先從n個(gè)數(shù)據(jù)對象任意選擇 k 個(gè)對象作為初始聚類中心;而對于

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論