【HDFS】1、HDFS簡介及基本概念

  當須要存儲的數據集的大小超過了一臺獨立的物理計算機的存儲能力時,就須要對數據進行分區並存儲到若干臺計算機上去。管理網絡中跨多臺計算機存儲的文件系通通稱爲分佈式文件系統(distributed fileSystem)node

  分佈式文件系統因爲其跨計算機的特性,因此依賴於網絡的傳輸,勢必會比普通的本地文件系統更加複雜,好比:如何使得文件系統可以容忍節點的故障而且保證不丟失數據,這就是一個很大的挑戰。緩存


  本文至關於《Hadoop權威指南》的讀書筆記。網絡

(一)HDFS簡介及其基本概念

  HDFS(Hadoop Distributed File System)是hadoop生態系統的一個重要組成部分,是hadoop中的的存儲組件,在整個Hadoop中的地位非同通常,是最基礎的一部分,由於它涉及到數據存儲,MapReduce等計算模型都要依賴於存儲在HDFS中的數據。HDFS是一個分佈式文件系統,以流式數據訪問模式存儲超大文件,將數據分塊存儲到一個商業硬件集羣內的不一樣機器上。架構

  這裏重點介紹其中涉及到的幾個概念:(1)超大文件。目前的hadoop集羣可以存儲幾百TB甚至PB級的數據。(2)流式數據訪問。HDFS的訪問模式是:一次寫入,屢次讀取,更加關注的是讀取整個數據集的總體時間。(3)商用硬件。HDFS集羣的設備不須要多麼昂貴和特殊,只要是一些平常使用的普通硬件便可,正由於如此,hdfs節點故障的可能性仍是很高的,因此必需要有機制來處理這種單點故障,保證數據的可靠。(4)不支持低時間延遲的數據訪問。hdfs關心的是高數據吞吐量,不適合那些要求低時間延遲數據訪問的應用。(5)單用戶寫入,不支持任意修改。hdfs的數據以讀爲主,只支持單個寫入者,而且寫操做老是以添加的形式在文末追加,不支持在任意位置進行修改。分佈式

一、HDFS數據塊

  每一個磁盤都有默認的數據塊大小,這是文件系統進行數據讀寫的最小單位。這涉及到磁盤的相應知識,這裏咱們很少講,後面整理一篇博客來記錄一下磁盤的相應知識。oop

  HDFS一樣也有數據塊的概念,默認一個塊(block)的大小爲128MB(HDFS的塊這麼大主要是爲了最小化尋址開銷),要在HDFS中存儲的文件能夠劃分爲多個分塊,每一個分塊能夠成爲一個獨立的存儲單元。與本地磁盤不一樣的是,HDFS中小於一個塊大小的文件並不會佔據整個HDFS數據塊。性能

  對HDFS存儲進行分塊有不少好處:日誌

  • 一個文件的大小能夠大於網絡中任意一個磁盤的容量,文件的塊能夠利用集羣中的任意一個磁盤進行存儲。
  • 使用抽象的塊,而不是整個文件做爲存儲單元,能夠簡化存儲管理,使得文件的元數據能夠單獨管理。
  • 冗餘備份。數據塊很是適合用於數據備份,進而能夠提供數據容錯能力和提升可用性。每一個塊能夠有多個備份(默認爲三個),分別保存到相互獨立的機器上去,這樣就能夠保證單點故障不會致使數據丟失。

二、namenode和datanode

  HDFS集羣的節點分爲兩類:namenode和datanode,以管理節點-工做節點的模式運行,即一個namenode和多個datanode,理解這兩類節點對理解HDFS工做機制很是重要。blog

  namenode做爲管理節點,它負責整個文件系統的命名空間,而且維護着文件系統樹和整棵樹內全部的文件和目錄,這些信息以兩個文件的形式(命名空間鏡像文件和編輯日誌文件)永久存儲在namenode 的本地磁盤上。除此以外,同時,namenode也記錄每一個文件中各個塊所在的數據節點信息,可是不永久存儲塊的位置信息,由於塊的信息能夠在系統啓動時從新構建。內存

  datanode做爲文件系統的工做節點,根據須要存儲並檢索數據塊,按期向namenode發送他們所存儲的塊的列表。



  因而可知,namenode做爲管理節點,它的地位是非同尋常的,一旦namenode宕機,那麼全部文件都會丟失,由於namenode是惟一存儲了元數據、文件與數據塊之間對應關係的節點,全部文件信息都保存在這裏,namenode毀壞後沒法重建文件。所以,必須高度重視namenode的容錯性。

  爲了使得namenode更加可靠,hadoop提供了兩種機制:

  • 第一種機制是備份那些組成文件系統元數據持久狀態的文件,好比:將文件系統的信息寫入本地磁盤的同時,也寫入一個遠程掛載的網絡文件系統(NFS),這些寫操做實時同步而且保證原子性。
  • 第二種機制是運行一個輔助namenode,用以保存命名空間鏡像的副本,在namenode發生故障時啓用。(也可使用熱備份namenode代替輔助namenode)。


三、塊緩存

  數據一般狀況下都保存在磁盤,可是對於訪問頻繁的文件,其對應的數據塊可能被顯式的緩存到datanode的內存中,以堆外緩存的方式存在,一些計算任務(好比mapreduce)能夠在緩存了數據的datanode上運行,利用塊的緩存優點提升讀操做的性能。

四、聯邦HDFS

  namenode在內存中保存了文件系統中每一個文件和每一個數據塊的引用關係,這意味着,當文件足夠多時,namenode的內存將成爲限制系統橫向擴展的瓶頸。hadoop2.0引入了聯邦HDFS容許系統經過添加namenode的方式實現擴展,每一個namenode管理文件系統命名空間中的一部分,好比:一個namenode管理/usr下的文件,另一個namenode管理/share目錄下的文件。

五、HDFS的高可用性

  經過備份namenode存儲的文件信息或者運行輔助namenode能夠防止數據丟失,可是依舊沒有保證了系統的高可用性。一旦namenode發生了單點失效,那麼必須可以快速的啓動一個擁有文件系統信息副本的新namenode,而這個過程須要如下幾步:(1)將命名空間的副本映像導入內存 (2)從新編輯日誌 (3)接收足夠多來自datanode的數據塊報告,從而重建起數據塊與位置的對應關係。

  上述實際上就是一個namenode的冷啓動過程,可是在數據量足夠大的狀況下,這個冷啓動可能須要30分鐘以上的時間,這是沒法忍受的。

  Hadoop2.0開始,增長了對高可用性的支持。採用了雙機熱備份的方式。同時使用一對活動-備用namenode,當活動namenode失效後,備用namenode能夠迅速接管它的任務,這中間不會有任何的中斷,以致於使得用戶根本沒法察覺。

  爲了實現這種雙機熱備份,HDFS架構須要做出如下幾個改變:

  • 兩個namenode之間要經過高可用共享存儲來實現編輯日誌的共享
  • datanode要同時向兩個namenode發送數據塊的報告信息
  • 客戶端要使用特定機制來處理namenode的失效問題
  • 備用namenode要爲活動namenode設置週期性的檢查點,從中判斷活動namenode是否失效

  HDFS系統中運行着一個故障轉移控制器,管理着將活動namenode轉移爲備用namenode的轉換過程。同時,每個namenode也運行着一個輕量級的故障轉移控制器,主要目的就是監視宿主namenode是否失效,並在失效時實現迅速切換。

相關文章
相關標籤/搜索