hadoop核心知識點總結

1、  安裝hadoop需要配置的hadoop中的配置文件有哪些?

  • hadoop-env.sh
  • yarn-env.sh
  • core-site.xml
  • hdfs-site.xml
  • mapred-site.xml
  • yarn-site.xml
  • slaves

2、  Hadoop的核心模塊和相應的進程

HDFS:namenode,datanode,secondarynamenode,namenodemanager,datanodemanager

MapReduce:ResourceManager,NodeManager,Application master

3、  SecondaryNameNode的作用

如果運行namenode服務的機器損壞,那麼文件系統上所有的文件都將丟失,因此,namenode的容錯非常重要,hadoop爲此提供了兩種機制,secondaryNameNode是其中之一:

在namenode運行的時候,同時運行一個secondaryNameNode,但是它不會被用作namenode,它的作用是定期的通過編輯日誌文件(edits)合併命名空間鏡像(images),以防編輯日誌過大,secondaryNameNode一般運行在另一臺單獨的計算機上,因爲它需要佔用大量的CPU時間與namenode相同容量的內存來執行合併操作。它保存合併後的鏡像副本,並在namenode發生故障後啓用。但是,secondaryNameNode保存的狀態總是滯後於namenode的,因此主節點全部失效時,肯定會丟失一部分數據。


4、  Edits文件和fsimages文件的作用

fsimages文件包含整個HDFS系統中的所有目錄和文件的inode信息,對於文件來說包含了數據塊描述信息,修改時間,訪問時間;對於目錄來說,包括修改時間,訪問權限控制信息等;

Edits文件主要是在namenode已經啓動的情況下對HDFS進行的各種更新操作進行記錄

5、  結合圖描述hdfs寫原理



(1)client通過對dfs對象調用create方法創建一個新的文件

(2)dfs對namenode創建一個RPC(remote proecdure call)調用,在文件的命名空間中新建一個文件,此時該文件還沒有對應的數據塊,namenode通過對其權限檢查和路徑檢查無誤後,爲創建新文件記錄一條記錄,就是一個edits文件

(3)dfs向對象返回一個fsdos對象,client通過該對象向hdfs中寫入數據

(4)dfsos將文件分成一個個的數據包,並寫入內部隊列,成爲數據隊列(data queue)。datastreamer處理數據隊列,它的責任是根據datanode列表來要求namenode分配適合的新塊來存儲數據副本。默認分配三個節點,datastreamer將數據包流式傳輸到管線中的datanode1上,該節點存儲數據包並將它發送到管線中的datanode2,以此類推

(5)dfsos也維護着一個確認隊列等待datanode的確認回執,當收取到所有的datanode確認回執的時候,該數據包纔會從確認隊列刪除

(6)client完成寫入後,對數據流調用close方法



6、結合圖描述hdfs的讀取原理



•使用HDFS提供的客戶端開發庫Client,向遠程的Namenode發起RPC請求;

• Namenode會視情況返回文件的部分或者全部block列表,對於每個block,Namenode都會返回有該block拷貝的DataNode地址;

•客戶端開發庫Client會選取離客戶端最接近的DataNode來讀取block;如果客戶端本身就是DataNode,那麼將從本地直接獲取數據.

•讀取完當前block的數據後,關閉與當前的DataNode連接,併爲讀取下一個block尋找最佳的DataNode;

•當讀完列表的block後,且文件讀取還沒有結束,客戶端開發庫會繼續向Namenode獲取下一批的block列表。

•讀取完一個block都會進行checksum驗證,如果讀取datanode時出現錯誤,客戶端會通知Namenode,然後再從下一個擁有該block拷貝的datanode繼續讀

7、  根據圖描述hdfs的構架原理


HDFS被設計成在一個大集羣中可以跨機器地可靠地存儲海量的文件。它將每個文件存儲成block序列,除了最後一個block,所有的block都是同 樣的大小。文件的所有block爲了容錯都會被複制。每個文件的block大小和replication因子都是可配置的。Replication因子可 以在文件創建的時候配置,以後也可以改變。HDFS中的文件是write-one,並且嚴格要求在任何時候只有一個writer。Namenode全權管 理block的複製,它週期性地從集羣中的每個Datanode接收心跳包和一個Blockreport。心跳包的接收表示該Datanode節點正常工 作,而Blockreport包括了該Datanode上所有的block組成的列表。

(1)副本的存放
    副本的存放是HDFS可靠性和性能的關鍵。HDFS採用一種稱爲rack-aware的策略來改進數據的可靠性、有效性和網絡帶寬的利用。這個策略實現的短期目標是驗證在生產環境下的表現,觀察它的行爲,構建測試和研究的基礎,以便實現更先進的策略。龐大的HDFS實例一般運行在多個機架的計算機形成的集羣上,不同機架間的兩臺機器的通訊需要通過交換機,顯然通常情況下,同一個機架內的兩個節點間的帶寬會比不同機架間的兩臺機器的帶寬大。
    通過一個稱爲Rack Awareness的過程,Namenode決定了每個Datanode所屬的rack id。一個簡單但沒有優化的策略就是將副本存放在單獨的機架上。這樣可以防止整個機架(非副本存放)失效的情況,並且允許讀數據的時候可以從多個機架讀取。這個簡單策略設置可以將副本分佈在集羣中,有利於組件失敗情況下的負載均衡。但是,這個簡單策略加大了寫的代價,因爲一個寫操作需要傳輸block到 多個機架。
    在大多數情況下,replication因子是3,HDFS的存放策略是將一個副本存放在本地機架上的節點,一個副本放在同一機架上的另一個節點,最後一個副本放在不同機架上的一個節點。機架的錯誤遠遠比節點的錯誤少,這個策略不會影響到數據的可靠性和有效性。三分之一的副本在一個節點上,三分之二在一 個機架上,其他保存在剩下的機架中,這一策略改進了寫的性能。

(2)副本的選擇
    爲了降低整體的帶寬消耗和讀延時,HDFS會盡量讓reader讀最近的副本。如果在reader的同一個機架上有一個副本,那麼就讀該副本。如果一個HDFS集羣跨越多個數據中心,那麼reader也將首先嚐試讀本地數據中心的副本。

8、  簡述hdfs的優缺點

1)處理超大文件

  這裏的超大文件通常是指百MB、設置數百TB大小的文件。目前在實際應用中,HDFS已經能用來存儲管理PB級的數據了。

  2)流式的訪問數據

  HDFS的設計建立在更多地響應"一次寫入、多次讀寫"任務的基礎上。這意味着一個數據集一旦由數據源生成,就會被複制分發到不同的存儲節點中,然後 響應各種各樣的數據分析任務請求。在多數情況下,分析任務都會涉及數據集中的大部分數據,也就是說,對HDFS來說,請求讀取整個數據集要比讀取一條記錄 更加高效。

  3)運行於廉價的商用機器集羣上

  Hadoop設計對硬件需求比較低,只須運行在低廉的商用硬件集羣上,而無需昂貴的高可用性機器上。廉價的商用機也就意味着大型集羣中出現節點故障情況的概率非常高。這就要求設計HDFS時要充分考慮數據的可靠性,安全性及高可用性。
4)不適合低延遲數據訪問

  如果要處理一些用戶要求時間比較短的低延遲應用請求,則HDFS不適合。HDFS是爲了處理大型數據集分析任務的,主要是爲達到高的數據吞吐量而設計的,這就可能要求以高延遲作爲代價。

  改進策略:對於那些有低延時要求的應用程序,HBase是一個更好的選擇。通過上層數據管理項目來儘可能地彌補這個不足。在性能上有了很大的提升,它的口號就是goes real time。使用緩存或多master設計可以降低client的數據請求壓力,以減少延時。還有就是對HDFS系統內部的修改,這就得權衡大吞吐量與低延時了,HDFS不是萬能的銀彈。

  5)無法高效存儲大量小文件

  因爲Namenode把文件系統的元數據放置在內存中,所以文件系統所能容納的文件數目是由Namenode的內存大小來決定。一般來說,每一個文 件、文件夾和Block需要佔據150字節左右的空間,所以,如果你有100萬個文件,每一個佔據一個Block,你就至少需要300MB內存。當前來 說,數百萬的文件還是可行的,當擴展到數十億時,對於當前的硬件水平來說就沒法實現了。還有一個問題就是,因爲Map task的數量是由splits來決定的,所以用MR處理大量的小文件時,就會產生過多的Maptask,線程管理開銷將會增加作業時間。舉個例子,處理 10000M的文件,若每個split爲1M,那就會有10000個Maptasks,會有很大的線程開銷;若每個split爲100M,則只有100個 Maptasks,每個Maptask將會有更多的事情做,而線程的管理開銷也將減小很多。

  改進策略:要想讓HDFS能處理好小文件,有不少方法。

利用SequenceFile、MapFile、Har等方式歸檔小文件,這個方法的原理就是把小文件歸檔起來管理,HBase就是基於此的。對於這種方法,如果想找回原來的小文件內容,那就必須得知道與歸檔文件的映射關係。
橫向擴展,一個Hadoop集羣能管理的小文件有限,那就把幾個Hadoop集羣拖在一個虛擬服務器後面,形成一個大的Hadoop集羣。google也是這麼幹過的。
多Master設計,這個作用顯而易見了。正在研發中的GFSII也要改爲分佈式多Master設計,還支持Master的Failover,而且Block大小改爲1M,有意要調優處理小文件啊。
附帶個Alibaba DFS的設計,也是多Master設計,它把Metadata的映射存儲和管理分開了,由多個Metadata存儲節點和一個查詢Master節點組成。
  6)不支持多用戶寫入及任意修改文件

  在HDFS的一個文件中只有一個寫入者,而且寫操作只能在文件末尾完成,即只能執行追加操作。目前HDFS還不支持多個用戶對同一文件的寫操作,以及在文件任意位置進行修改。


9、 啓動hadoop的腳本和用法

  • start-all.sh 啓動所有的Hadoop守護進程。包括NameNode、 SecondaryNameNode、DataNode、NameNodeManager、 DataNodeManager
  • stop-all.sh 停止所有的Hadoop守護進程。包括NameNode、 SecondaryNameNode、DataNode、NameNodeManager、 DataNodeManager
  • start-dfs.sh 啓動Hadoop HDFS守護進程NameNode、SecondaryNameNode和DataNode
  • stop-dfs.sh 停止Hadoop HDFS守護進程NameNode、SecondaryNameNode和DataNode

10、  linux下如何使用命令上傳文件到hdfs上,如何下載文件到本地文件

hdfs dfs –put /home/admin/newFile /user/admin/aaron上傳

hdfs dfs –get /user/admin/aaron/newFile /home/admin/newFile下載

hdfs dfs –copyFromLocal /home/admin/newFile /user/admin/aaron上傳

hdfs dfs –copyToLocal /user/admin/aaron/newFile /home/admin/newFile下載


11、  結合圖描述yarn框架的原理以及它與hadoop1.x中Mapreduce框架的區別。


本題答案看我上篇微博

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章