1. 程式人生 > >Hadoop之HDFS基本概念

Hadoop之HDFS基本概念

1.分散式檔案系統(Distributed File System)

   由來:資料量越來越多,在一個作業系統管轄的範圍存不下了,那麼就分配到更多的作業系統管理的磁碟中,但是不方便管理和維護,因此迫切需要一種系統來管理多臺機器上的檔案,這就是分散式檔案管理系統 。

  定義:是一種允許檔案通過網路在多臺主機上分享的檔案系統,可讓多機器上的多使用者分享檔案和儲存空間。
  特點:通透性,讓實際上是通過網路來訪問檔案的動作,由程式與使用者看來,就像是訪問本地的磁碟一般。
              容錯,即使系統中有某些節點離線,整體來說系統仍然可以持續運作而不會有資料損失。
  應用:分散式檔案管理系統很多,hdfs只是其中一種。適用於一次寫入多次查詢的情況,不支援併發寫情況,小文小檔案不合適。

2.常見的分散式檔案系統

   常見的分散式檔案系統有,GFS、HDFS、Lustre 、Ceph 、GridFS 、mogileFS、TFS、FastDFS等。各自適用於不同的領域。它們都不是系統級的分散式檔案系統,而是應用級的分散式檔案儲存服務。

3.HDFS簡介

  › 源於Google論文GFS
  › 一種分散式檔案系統
  › 塊式儲存
  › 檔案資料由一次性寫入或追加寫入,不可更改
  › 讀取時可以多個塊併發讀取
  › Master-Slave結構:一個NameNode + 若干DataNode組成

4.NameNode和DataNode


   NameNode:Master,只有一個節點;管理HDFS的名字空間(NameSpace),記錄檔案怎樣分成資料塊Blocks,資料塊儲存在哪些節點上,整個分散式檔案系統的狀態
   DataNode:Slaves,可有多個節點,向NameNode傳送心跳彙報block狀況,執行讀/寫操作,執行NameNode 的副本策略

 5.NameNode

     5.1 NameNode相關的檔案包括

     > fsimage:元資料映象檔案。儲存某一時段NameNode記憶體元資料資訊。
     >edits:操作日誌檔案。
     >fstime:儲存最近一次checkpoint的時間
     注:以上這些檔案是儲存在linux的檔案系統中

     5.2 NameNode的職責

     › 維護樹狀目錄結構(NameSpace)
     › 分配並記錄每個檔案由哪些塊組成,以及每個塊的資訊(大小、時間戳等)
     › 將HDFS的檔案和目錄元資料儲存在一個叫fsimage的檔案中,每次儲存fsimage之後到下次儲存之間的所有hdfs操作,將會記錄在editlog檔案中
     › 被動接受DataNode的HeartBeat,記錄DataNode的Block資訊
     › 通過HeartBeat的迴應向DataNode傳送命令,本身不做重量級得工作
 6.SecondaryNameNode(偽分散式)

      6.1 SecondaryNameNode初認識

     簡介:HA的一個解決方案。但不支援熱備。配置即可。Hadoop會維護一個fsimage檔案,也就是namenode中metedata的映象,但是fsimage不會隨時與namenode記憶體中的metedata保持一致,而是每隔一段時間通過合併edits檔案來更新內容。Secondary namenode就是用來合併fsimage和edits檔案來更新NameNode的metedata的。   
     執行過程:從NameNode上下載元資料資訊(fsimage,edits),然後把二者合併,生成新的fsimage,在本地儲存,並將其推送到NameNode,替換舊的fsimage.

     注意:預設安  裝在NameNode節點上,但這樣不安全!

     6.2 SecondaryNameNode工作流程詳解

                                                          NameNode                                     SecondaryNameNode


    ①secondary namenode通知namenode切換edits檔案
    ②secondary namenode從namenode獲得fsimage和edits(通過http)
    ③secondary namenode將fsimage載入記憶體,然後開始合併edits
    ④secondary namenode將新的fsimage發回給namenode
    ⑤namenode用新的fsimage替換舊的fsimage

    ?什麼時候checkpiont

    fs.checkpoint.period 指定兩次checkpoint的最大時間間隔,預設3600秒。
    fs.checkpoint.size    規定edits檔案的最大值,一旦超過這個值則強制checkpoint,不管是否到達最大時間間隔。預設大小是64M。

 7.DataNode

     7.1 DataNode相關概念

     職責:提供真實檔案資料的儲存服務。
     檔案塊(block):最基本的儲存單位。對於檔案內容而言,一個檔案的長度大小是size,那麼從檔案的0偏移開始,按照固定的大小,順序對檔案進行劃分並編號,劃分好    的每一個塊稱一個Block。HDFS預設Block大小是128MB,以一個256MB檔案,共有256/128=2個Block.     
    不同於普通檔案系統的是,HDFS中,如果一個檔案小於一個數據塊的大小,並不佔用整個資料塊儲存空間
    Replication。多複本。預設是三個。

     7.2 DataNode職責詳解

     › 維護資料塊:一個塊是一個本地檔案
     › 處理資料的寫入、讀取、塊的複製、刪除操作等
     › 可以配置多個磁碟
     › 允許部分磁碟失敗
     › 根據剩餘空間比例選擇新block的存放位置
     › 定期向NameNode通報自身的block列表

8.HDFS架構圖