HDFS—Hadoop底層分布式文件存儲系統


聲明:本文檔所有內容均在本人的學習和理解上整理,僅供參考,歡迎討論。不具有權威性,甚至不具有精確性,也會在以后的學習中對不合理之處進行修改。

 

在上一篇“淺談Hadoop inFusionInsight—華為大數據解決方案的理解”中,我重點提到了大數據的兩個相較於傳統數據所不同的特點——數量大和種類多。在Hadoop的底層有個非常重要的部分,我們一般稱之為“核心”——分布式文件存儲系統,即HDFS。我之前說過,單個服務器的內存和磁盤空間是有上限的,不可能無限支持線性增加。面對海量的大數據,單個服務器是存不下的,這輩子都不可能存的下的。面對傳統存儲的技術瓶頸,“分布式”的概念就很好的解決了問題。

 

一、什么是HDFS

  HDFS的中文名叫“分布式文件系統”,是山寨來源於Google的文件系統GFS。2003年Google發表了幾篇撼動世界級別的論文,GFS就是其中之一。最早作為Google的文件存儲系統,它可以穩定的運行在幾千台甚至上萬台設備上,足以證明其優越之處。GFS的設計理念有兩個很重要的假設:只存儲大文件、不能修改(update)只能追加(append)。在這兩個假設的基礎上,又提出了一個划時代的理念:將大文件分成若干個小文件。后來有一天資聰穎的哥們看了古哥的這篇論文,一拍腦門(也可能是一跺腳):“艾瑪有搞頭!”於是就山寨抄襲借鑒copy開發出了HDFS。HDFS主要解決了Hadoop的大數據存儲問題,所以我們一般都稱之為“分布式文件存儲系統”。作為大數據的存儲系統,他有幾個顯著的特性:

  ①高容錯性

  ②高吞吐量

  ③支持大文件(TB、PB)的存儲

 

二、HDFS的重要角色和概念

  1、NameNode(NN節點)

  HDFS的管理者。負責監控DataNode,記錄文件的存儲信息,協調客戶端的讀寫請求,等。相當於目錄。

  2、DataNode(DN節點)

  HDFS的執行者。負責文件的存儲,以塊為存儲單位,數據分散在不同DN節點,支持一次寫入多次讀取,等。相當於正文。

  3、SecondaryNameNode

  NameNode的冷備份,同步NameNode的日志(EditLog)和鏡像文件(FsImage),並將日志和鏡像合並成新的鏡像文件回傳給NameNode

  4、Editlog

  日志文件,記錄每次元數據的變化

  5、FsImage

  鏡像文件,內存中元數據在本地磁盤的映射

  PS:NameNode的內存中是FsImage+EditLog

  6、熱備份

  NameNode停止工作后,熱備份NameNode馬上接替NameNode的工作

  7、冷備份

  同SecondaryNmaeNode

  

三、HDFS的讀寫流程

  這個我們可以類比圖書館,寫就是新書入館,讀就是客戶借書。大家應該聽過一個問題:把大象裝進冰箱分幾步?我們就以3大步來看這個問題。

  先看看寫流程。有一批新書要入館,我們要走哪些流程?

    1、員工先找到館長,告訴他你要的貨……你要的書我帶來了:打開了冰箱門。

    2、館長看到書來了先是喜上眉梢,緊接着眉頭一皺,發現事情並不簡單:大象怎么塞進冰箱?

    3、館長終於想起來“目錄”這么個玩意,費了老半天勁指揮員工把書存好,然后把目錄放好:關上冰箱門。

  根據圖書館的例子,運用到HDFS上:

  Round1 寫流程

 

 

    A:打開冰箱門

      1、用戶在客戶端(Client)發起寫命令,存入一個文件

        ①用戶需先將文件分塊,一般塊大小為128MB

        ②還需要制定文件的副本參數,一般為3

      2、客戶端向NN節點發起寫請求

        ①請求信息中包含但不限於文件大小(塊)、副本參數

      3、NN節點收到請求,給Client發送一個回復信息

        ①NN從自己管理的(DN)節點信息中找出適合的3個(與副本參數一致)DN節點

        ②將選中的DN節點地址和路徑參數的等信息發送給Client

    B:把大象塞進去

      1、Client收到回復信息,開始發送第一個數據塊(Block)

        ①Client通過NN的回復信息找到第一個DN節點,開始發送數據塊,以及備份副本DN地址列表

        ②第一個DN開始按數據包分批接受Block存盤,每存盤一個數據包同時將相同的數據包再轉發給的二個DN節點,以此類推直到最后一個DN節點存盤后不在轉發

        ③所有DN都接受到了完整的Block后,向NN節點發送確認信息,第一個DN節點還要向Client發送確認信息

      2、Client收到第一個Block存盤完畢的信息后開始執行第二個Block的操作,重新向NN節點發送請求

    C:關閉冰箱門

      1、Client收到DN節點最后一個Block存盤成功的確認信息后,向NN節點發送結束信息

      2、NN節點收到Client發來的結束信息,關閉目錄文件,此時存儲文件的元數據信息已經記錄在了目錄文件中

    小結:在寫流程中,Client負責發起命令,將文件分塊和設置副本參數;NN節點負責協調Client和DN節點的交互,包括為每個文件的多個數據塊分配存儲地址及記錄元數據;DN負責干活,存儲從Client發來的數據,同時多副本機制保障了數據的高可靠性。

 

  Round2 讀流程

  

  讀流程相較於寫流程基本一致,且實現更加簡單,我就簡單描述一下:

    1、Client向NN節點發出讀請求,包含文件名等信息

    2、NN收到請求,根據文件名查找該文件所對應的所有塊信息

    3、NN根據塊信息找到相對應的DN節點,將所有DN節點的位置及路徑開銷回復給Client

    4、Client根據收到的DN節點信息,選取每個塊所在路徑開銷最小的DN節點執行讀取操作。

 

四、HDFS的高可靠性

  1、NN的高可靠性

    NN節點作為HDFS的管理者,里面存儲了所有文件數據的元數據和節點的狀態信息。一旦NN節點宕機那么所有文件的元數據將會丟失,海量的文件數據被存放在不同的DN節點上,元數據的丟失意味着丟失了查找數據的能力。為防止由於NN節點的宕機而導致的元數據丟失,我們采用NN節點的冗余備份機制。NN節點的備份分為冷備份和熱備份,在第二部分也將這兩個備份的概念簡單說了一下,現在詳細介紹一下。

    

    上一篇隨筆簡單講到Hadoop分為三個層次,中間層負責資源協調。ZooKeeper就是協調機制,在HDFS中主要就是協調選舉主備NameNode節點。每個NN節點都會通過“心跳”與ZooKeeper保持聯系,報告自己的狀態信息。ZooKeeper通過這些狀態信息選舉出主NN節點作為整個HDFS的管理節點,其他作為備份。備份NN一般不工作,但數據會與主NN節點同步更新。當主NN節點宕機后,其與ZooKeeper的聯系就會中斷,ZooKeeper接受不到主NN發來的心跳信息就默認主NN節點損壞,會在備選NN節點中重新選舉主NN節點。雖然備NN節點不工作,但它里面的元數據信息和DN節點狀態信息跟主NN節點是同步更新的,所以一旦備NN被選為主NN節點,會立刻接替主NN節點的工作。當然,這是熱備份。

    冷備份,即SecondaryNameNode。它與主NN節點之間有個“元數據持久化”機制

    ①當有對元數據執行操作時,NN節點會生成新的對應日志文件(Editlog.new)

    ②NN節點內存里存放的是日志文件(Editlog)和元數據鏡像文件(Fsimage),SecondaryNN通過NN節點同步獲取得到

    ③SecondaryNN中將二者合並成新的鏡像文件Fsimage.ckpt文件

    ④SecondaryNN將新生成的鏡像文件上傳到主節點上

    ⑤Fsimage.ckpt在主節點上回滾成Fsimage文件,其實就是將原來的鏡像文件更新NN

    ⑥此時在之前過程中新的日志文件(Editlog.new)已經變成Editlog,不在是新日志,與更新后的鏡像文件重新同步到SecondaryNN上,重復以上操作

    NN和SecondaryNN的工作目錄存儲結構完全相同,所以,當NN故障退出需要重新恢復時,可以從SecondaryNN的工作目錄中將Fsimage拷貝到NN的工作目錄,以恢復NN中的元數據。

  2、DN的高可靠性

    DN節點作為實際存儲數據的執行者,其高可靠性主要就是數據的副本機制,即數據冗余存儲。當數據寫入HDFS時,Client有個”副本參數“設置,這就是我們對數據的備份。而且我們在備份時選擇的時不同的DN節點來進行存儲,一次來保證在一台DN損壞的情況下,依靠其他DN節點依然可以恢復數據。

    DN節點受NN節點的監控,它們之間也有”心跳“聯系的機制。DN節點定時向NN節點發送自己的狀態信息,NN節點通過這些信息監控DN節點。當NN節點在一段時間內沒有接受到某台DN節點的心跳信息,則認為該DN節點損壞。此時NN節點會根據自己的元數據信息確定其所存放數據的副本的DN節點,重新找一帶DN節點,根據副本數據進行備份。同時修改元數據信息和DN節點狀態信息。這樣,通過NN節點的調控備份,始終使數據保持一定數量的副本,保證了數據的完整性。

 

五、總結

  不總結了,睡覺了!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM