大數據面試題總結

面試題總結:

  1. 分佈式文件系統(Distributed File System)是指文件系統管理的物理存儲資源不必定直接鏈接在本地節點上,而是經過計算機網絡與節點相連。分佈式文件系統的設計基於客戶機/服務器模式。

    [優勢]html

    支持超大文件 超大文件在這裏指的是幾百M,幾百GB,甚至幾TB大小的文件。前端

    檢測和快速應對硬件故障在集羣的環境中,硬件故障是常見的問題。由於有上千臺服務器鏈接在一塊兒,這樣會致使高故障率。所以故障檢測和自動恢復是hdfs文件系統的一個設計目標node

    流式數據訪問應用程序能以流的形式訪問數據集。主要的是數據的吞吐量,而不是訪問速度。linux

    簡化的一致性模型 大部分hdfs操做文件時,須要一次寫入,屢次讀取。在hdfs中,一個文件一旦通過建立、寫入、關閉後,通常就不須要修改了。這樣簡單的一致性模型,有利於提升吞吐量。ios

    [缺點]面試

    低延遲數據訪問如和用戶進行交互的應用,須要數據在毫秒或秒的範圍內獲得響應。因爲hadoop針對高數據吞吐量作了優化,犧牲了獲取數據的延遲,因此對於低延遲來講,不適合用hadoop來作。算法

    大量的小文件Hdfs支持超大的文件,是經過數據分佈在數據節點,數據的元數據保存在名字節點上。名字節點的內存大小,決定了hdfs文件系統可保存的文件數量。雖然如今的系統內存都比較大,但大量的小文件仍是會影響名字節點的性能。數據庫

    多用戶寫入文件、修改文件Hdfs的文件只能有一次寫入,不支持寫入,也不支持修改。只有這樣數據的吞吐量才能大。apache

    不支持超強的事務沒有像關係型數據庫那樣,對事務有強有力的支持。
    詳情查看:https://www.cnblogs.com/sxt-zkys/archive/2017/07/24/7229857.html編程

  2. Gangila不只能夠進行監控,也能夠進行告警。(正確)
      Ganglia是UC Berkeley發起的一個開源集羣監視項目,設計用於測量數以千計的節點。Ganglia的核心包含gmond、gmetad以及一個Web前端。主要是用來監控系統性能,如:cpu 、mem、硬盤利用率, I/O負載、網絡流量狀況等,經過曲線很容易見到每一個節點的工做狀態,對合理調整、分配系統資源,提升系統總體性能起到重要做用。ganglia 做爲一款最經常使用的 Linux 環境中的監控軟件,它擅長的的是從節點中按照用戶的需求以較低的代價採集數據。可是 ganglia 在預警以及發生事件後通知用戶上並不擅長。最新的 ganglia 已經有了部分這方面的功能。
      Nagios是一款開源的免費網絡監視工具,能有效監控Windows、Linux和Unix的主機狀態,交換機路由器等網絡設備,打印機等。在系統或服務狀態異常時發出郵件或短信報警第一時間通知網站運維人員,在狀態恢復後發出正常的郵件或短信通知。
      經過將 Ganglia Nagios 組合起來,把 Ganglia 採集的數據做爲 Nagios 的數據源,而後利用 Nagios 來發送預警通知,能夠 完美的實現一整套監控管理的系統。 具體能夠查看 完美集羣監控組合 ganglia nagios。
    ps.雲計算管理三大利器:Nagios、Ganglia和Splunk


  3. Block Size是不能夠修改的。(錯誤)-----它是能夠被修改的
    Hadoop的基礎配置問件事hadoop-default.xml,默認創建一個job的時候會創建job的configuration,首先讀入的是hadoop-default.xml的配置,而後再讀hadoop-site.xml的配置(這個文件初始的時候配置爲空),hadoop-site.xml中主要配置須要覆蓋的hadoop-default.xml的系統級配置。具體配置能夠參考下
    <property>
    <name>dfs.block.size</name>//block的大小,單位字節,後面會提到用處,必須是512的倍數,由於採用crc作文件完整性校驗,默認配置512是checksum的最小單元
    <value>5120000</value>
    </property>

     ps.循環冗餘校驗(Cyclic Redundancy Check, CRC)是一種根據網絡數據包或電腦文件等數據產生簡短固定位數校驗碼的一種散列函數,主要用來檢測或校驗數據傳輸或者保存後可能出現的錯誤。它是利用除法及餘數的原理來做錯誤偵測的。

  4. Nagios不能夠監控hadoop集羣,由於它不提供hadoop支持。(錯誤)
    nagios是集羣監控工具,並且是雲計算三大利器之一

  5. 若是namenode意外終止,secondarynamenode會接替他是集羣繼續工做。(錯誤)
    secondarynamenode是幫助恢復,而不是替代,如何恢復,能夠查看hadoop根據secondarynamenode恢復namenode。在高可用集羣中,一個namenode(active)死亡後,ZKFC(zookeeper控制器)仲裁將另外一個standby-namenode啓動,轉換成active狀態,集羣繼續正常工做。


  6. Cloudera CDH是須要付費使用的。(錯誤)

    第一套付費產品是 Cloudera Enterpris

  7. Hadoop是Java開發的,因此MapReduce只支持Java語言編寫。(錯誤)
    rhadoop是用R語言開發的,MapReduce是一個框架,能夠理解是一種思想,可使用其餘語言開發。

  8. 什麼是Map/Reduce:
    MapReduce是一種編程模型,用於大規模數據集(大於1TB)的並行運算。概念"Map(映射)"和"Reduce(歸約)",是它們的主要思想,都是從函數式編程語言裏借來的,還有從矢量編程語言裏借來的特性。它極大地方便了編程人員在不會分佈式並行編程的狀況下,將本身的程序運行在分佈式系統上。 當前的軟件實現是指定一個Map(映射)函數,用來把一組鍵值對映射成一組新的鍵值對,指定併發的Reduce(歸約)函數,用來保證全部映射的鍵值對中的每個共享相同的鍵組。
    概述
    1)MapReduce是一個 基於集羣的高性能並行計算平臺(Cluster Infrastructure)。它容許用市場上普通的商用服務器構成一個包含數10、數百至數千個節點的分佈和並行計算集羣。
    2)MapReduce是一個 並行計算與運行軟件框架(Software Framework)。它提供了一個龐大但設計精良的並行計算軟件框架,能自動完成計算任務的並行化處理,自動劃分計算數據和計算任務,在集羣節點上自動分配和執行任務以及收集計算結果,將數據分佈存儲、數據通訊、容錯處理等並行計算涉及到的不少系統底層的複雜細節交由系統負責處理,大大減小了軟件開發人員的負擔。
    3)MapReduce是一個 並行程序設計模型與方法(Programming Model & Methodology)。它藉助於函數式程序設計語言Lisp的設計思想,提供了一種簡便的並行程序設計方法,用Map和Reduce兩個函數編程實現基本的並行計算任務,提供了抽象的操做和並行編程接口,以簡單方便地完成大規模數據的編程和計算處理。
    實現:
    把一堆雜亂無章的數據按照某種特徵概括起來,而後處理並獲得最後的結果。Map面對的是雜亂無章的互不相關的數據,它解析每一個數據,從中提取出key和value,也就是提取了數據的特徵。通過MapReduce的Shuffle階段以後,在Reduce階段看到的都是已經概括好的數據了,在此基礎上咱們能夠作進一步的處理以便獲得結果。

  9. Hadoop支持數據的隨機讀寫。(錯誤)
    lucene是支持隨機讀寫的,而hdfs只支持隨機讀。可是Hbase能夠來補救。Hbase提供隨機讀寫,來解決Hadoop不能處理的問題。HBase 自底層設計開始即聚焦於各類可伸縮性問題:表能夠很―高‖,有數十億個數據行;也能夠很―寬‖,有數百萬個列;水平分區並在上千個普通商用機節 點上自動複製。表的模式是物理存儲的直接反映,使系統有可能提升高效的數據結構的序列化、存儲和檢索。
    ps.Lucene是一套用於全文檢索和搜尋的開源程式庫,由Apache軟件基金會支持和提供。Lucene提供了一個簡單卻強大的應用程式接口,可以作全文索引和搜尋。在Java開發環境裏Lucene是一個成熟的免費開源工具。就其自己而言,Lucene是當前以及最近幾年最受歡迎的免費Java信息檢索程序庫。人們常常提到信息檢索程序庫,雖然與搜索引擎有關,但不該該將信息檢索程序庫與搜索引擎相混淆。

  10. namenode負責管理metadata,client端每次讀寫請求,都會從磁盤中讀取或則會寫入 metadata 信息並反饋client 端。(錯誤)
    NameNode 不須要從磁盤讀取 metadata,全部數據都在內存中,硬盤上的只是序列化的結果,只有每次namenode 啓動的時候纔會讀取。

    1)文件寫入Client NameNode 發起文件寫入的請求。NameNode 根據文件大小和文件塊配置狀況,返回給 Client 它所管理部分 DataNode 的信息。Client 將文件劃分爲多個 Block,根據 DataNode 的地址信息,按順序寫入到每個 DataNode 塊中。

    2)文件讀取Client NameNode 發起文件讀取的請求。NameNode 返回文件存儲的 DataNode 的信息。Client 讀取文件信息。 
    ps.http://www.makaidong.com/%E5%8D%9A%E5%AE%A2%E5%9B%AD%E6%8E%92%E8%A1%8C/9053.shtml

  11. datanode經過長鏈接與namenode保持通訊。(正確)【答案有分歧,根據本身理解回答便可】

    長鏈接:Client 方與Server 方先創建通信鏈接,鏈接創建後不斷開,而後再進行報文發送和接收。這種方式下因爲通信鏈接一直存在,此種方式經常使用於點對點通信。

    短鏈接:Client 方與Server 每進行一次報文收發交易時才進行通信鏈接,交易完畢後當即斷開鏈接。此種方式經常使用於一點對多點通信,好比多個Client 鏈接一個Server。

  12. Hadoop自身具備嚴格的權限管理和安全措施保障集羣正常運行。(錯誤) 

  13. slave節點要存儲數據,因此它的磁盤越大越好。(錯誤)
    一旦slave節點宕機,數據恢復是一個難題。

  14. hadoop dfsadmin -report用於檢測HDFS損壞塊。(錯誤)
    hadoop dfsadmin -report能夠用來查詢集羣的情況,能夠快速定位出各個節點,HDFS的容量和使用量,以及每一個節點的硬盤使用狀況。固然這個也能夠經過50070端口進行查看,可是這個命令更有利於咱們利用腳原本監控dfs的使用情況

  15. Hadoop默認調度器策略爲FIFO。(正確)【first input first output】
    FIFO是先入先出隊列,是一種傳統的按序執行的方法。

     

  16.  Hadoop集羣三種做業調度算法介紹
    Hadoop集羣中有三種做業調度算法,分別爲FIFO公平調度算法計算能力調度算法
    先來先服務算法FIFO:FIFO比較簡單,hadoop中只有一個做業隊列,被提交的做業按照前後順序在做業隊列中排隊,新來的做業插入到隊尾。一個做業運行完後,老是從隊首取下一個做業運行。這種調度策略的優勢是簡單、易於實現,同時也減輕了jobtracker的負擔。可是它的缺點也是顯然的,它對全部的做業都一視同仁,沒有考慮到做業的緊迫程度,另外對小做業的運行不利。
    公平調度算法
    這種策略在系統中配置了任務槽,一個任務槽能夠運行一個task任務,這些任務就是一個大的做業被切分後的小做業。當一個用戶提交多個做業時,每一個做業能夠分配到必定的任務槽以執行task任務(這裏的任務槽能夠理解爲能夠運行一個map任務或reduce任務)。若是把整個hadoop集羣做業調度跟操做系統的做業調度相比,第一種FIFO就至關於操做系統中早期的單道批處理系統,系統中每一個時刻只有一道做業在運行,而公平調度至關於多道批處理系統,它實現了同一個時刻多道做業同時運行。因爲linux是多用戶的,如有多個用戶同時提交多個做業會怎樣?在這種策略中給每一個用戶分配一個做業池,而後給每一個做業池設置一個最小共享槽個數,什麼是最小共享槽個數呢?先要理解一個最小什麼意思,最小是指只要這個做業池須要,調度器應該確保可以知足這個做業池的最小任務槽數的需求,可是如何才能確保在它須要的時候就有空的任務槽,一種方法是固定分配必定數量的槽給做業池不動,這個數量至少是最小任務槽值,這樣只要在做業池須要的時候就分配給它就好了,可是這樣在這個做業池沒有用到這麼多任務槽的時候會形成浪費,這種策略其實是這樣作的,看成業池的需求沒有達到最小任務槽數時,名義上是本身的剩餘的任務槽會被分給其餘有須要的做業池,當一個做業池須要申請任務槽的時候若系統中沒有了,這時候不會去搶佔別人的(也不知道搶誰的啊),只要當前一個空的任務槽釋放會被當即分配給這個做業池。

    在一個用戶的做業池內,多個做業如何分配槽這個能夠自行選擇了,如FIFO。因此這種調度策略分爲兩級:

    第一級,在池間分配槽,在多用戶的狀況下,每一個用戶分配一個做業池。
    第二級,在做業池內,每一個用戶可使用不一樣的調度策略。

     計算能力調度計算能力調度和公平調度有點相似,公平調度策略是以做業池爲單位分配任務槽,而計算能力調度是以隊列爲單位分配tasktracker(集羣中一個節點),這種調度策略配置了多個隊列,每一個隊列配置了最小額度的tasktracker數量,同公平調度策略相似,當一個隊列有空閒的tasktracker時,調度器會將空閒的分配給其餘的隊列,當有空閒的tasktracker時,因爲這時候可能有多個隊列沒有獲得最小額度的tasktracker而又在申請新的,空閒的tasktracker會被優先分配到最飢餓的隊列中去,如何衡量飢餓程度呢?能夠經過計算隊列中正在運行的任務數與其分得的計算資源之間的比值是否最低來判斷的,越低說明飢餓程度越高。

    計算能力調度策略是以隊列的方式組織做業的,因此一個用戶的做業可能在多個隊列中,若是不對用戶作必定的限制,極可能出如今多個用戶之間出現嚴重不公平的現象。因此在選中新做業運行時候,還須要考慮做業所屬的用戶是否超過了資源的限制,若是超過,做業不會被選中。

    對於在同一個隊列中,這種策略使用的是基於優先級的FIFO策略,可是不會搶佔。

  17. 集羣內每一個節點都應該配 RAID,這樣避免單磁盤損壞,影響整個節點運行。(錯誤 )

    hadoop 自己就具備冗餘能力,因此若是不是很嚴格不須要都配備 RAID

    磁盤陣列(Redundant Arrays of Independent Disks,RAID),有「獨立磁盤構成的具備冗餘能力的陣列」之意。

     

    磁盤陣列是由不少價格較便宜的磁盤,組合成一個容量巨大的磁盤組,利用個別磁盤提供數據所產生加成效果提高整個磁盤系統效能。利用這項技術,將數據切割成許多區段,分別存放在各個硬盤上。

     

    磁盤陣列還能利用同位檢查(Parity Check)的觀念,在數組中任意一個硬盤故障時,仍可讀出數據,在數據重構時,將數據經計算後從新置入新硬盤中。

  18. 由於HDFS有多個副本,因此namenode不存在單點問題。(錯誤)
    查看1
  19. 每一個 map 槽就是一個線程。(錯誤)

    map 槽---->map slot。(org.apache.hadoop.mapred.TaskTracker.TaskLaucher.numFreeSlots)是一個邏輯值,而不是對應着一個縣城或者進程。

  20. Mapreduce input split 就是一個 block。(錯誤) 

    InputFormat的數據劃分、split調度、數據讀取三個問題的淺析www.aboutyun.com/thread-6803-1-1.html

     

  21. Hadoop 環境變量中的 HADOOP_HEAPSIZE 用於設置全部 Hadoop 守護線程的內存。它默認是 200 GB。(錯誤) 

    hadoop 爲各個守護進程(namenode,secondarynamenode,resourcemanager,datanode,nodemanager)統一分配的內存在 hadoop-env.sh 中設置,參數爲 HADOOP_HEAPSIZE,默認爲 1000M

  22. DataNode 首次加入cluster 的時候,若是log 中報告不兼容文件版本,那須要NameNode執行hdfs namenode -format操做格式化磁盤。(錯誤) 

    添加了一個新的標識符 ClusterID 用於標識集羣中全部的節點。當格式化一個 Namenode,須要提供這個標識符或者自動生成。這個 ID 能夠被用來格式化加入集羣的其餘 Namenode

     持續更新~~~~

相關文章
相關標籤/搜索