HDFS--Hadoop分佈式文件系統專項基礎概述

1. 概述
       當數據集超過一個單獨的物理計算機的存儲能力時,便有必要將它分佈到多個獨立的計算機。管
理着跨計算機網絡存儲的文件系統稱爲分佈式文件系統。分佈式文件系統基於網絡,所有網絡編程的複雜性都會隨着而來,所以分佈式文件系統比普通磁盤文件系統更復雜,這個文件系統能容忍節點故障而不損失數據,這本身就是一個極大的挑戰。
  
2. HDFS的設計
   HDFS是以流式數據訪問模式存儲超大文件而設計的文件系統,在商用硬件的集羣上運行。
2.1 超大文件
    目前已經有Hadoop集羣存儲PB(petabytes)級的數據了。1PB=1024TB

2.2 流式數據訪問
    HDFS建立在這樣一種思想上:一次寫入,多次讀取模式是最高效的。一個數據集通常由數據源生
成或複製,接着在此基礎上進行各種各樣的分析。

2.3 商用硬件
    Hadoop無需運行在昂貴並且高可靠性的硬件上。它被設計運行在商用硬件(配置不高的普通硬件)
的集羣上,因此,至少對於大的集羣來說,節點故障的機率還是較高的。HDFS在面對這種故障時,被設計爲能夠繼續運行而讓用戶察覺不到明顯的中斷。

3. 不適合HDFS應用的情況

3.1 低延遲數據訪問
    需要低延遲數據訪問--在毫秒範圍內的應用並不適合HDFS。HDFS是爲達到高數據吞吐量而優化的
,這有可能以延遲爲代價。

3.2 大量的小文件
    名稱幾點(namenode)存儲着文件系統的元數據,因此文件數量的限制也由名稱節點的內存量決定

3.3 多用戶寫入,任意修改文件
    HDFS的文件只有一個寫入者,而且寫操作總是在文件的末尾。它不支持多個寫入者,或是在文件
的任意位置修改。

4. HDFS的概念
4.1 塊
    一個磁盤有它的塊大小,代表着磁盤能夠讀寫的最小數據量。文件系統通過處理大小爲一個磁盤
塊大小的整數倍的數據塊(此數據塊爲文件系統塊)來運作這個磁盤。文件系統快一般爲幾千字節,而磁盤塊一般爲512字節。

4.2 HDFS的塊
    HDFS的塊與一般的文件系統的塊的概念相似,只不過是更大的單元,默認爲64MB。與單一磁盤上
的文件系統相似,HDFS上的文件也被分爲以塊爲大小的分塊,作爲單獨單元存儲。但與磁盤的塊不同的是,HDFS中小於一個塊大小的文件不會佔據整個塊的空間。HDFS的塊比磁盤的塊大,目的是爲了減少尋址開銷。

4.3 分佈式文件系統使用抽象塊的好處
4.3.1 一個文件的容量可以大於網絡中任意一個磁盤的容量;文件的分塊(block)不需要存儲在同一個
磁盤上,因此它可以利用集羣上的任意一個磁盤。

4.3.2
    使用抽象塊單元而不是文件會簡化存儲子系統,簡單化是所有系統的追求,但對於故障種類繁多
的分佈式系統來說尤爲重要。存儲子系統控制的是塊,簡化了存儲管理。(因爲塊的大小固定,計算一個磁盤能存多少塊就相對容易),也消除了對元數據的顧慮(塊只是一部分存儲的數據,而文件的元數據,如許可信息,不需要與塊一同存儲,這樣一來,其它系統就可以正交的管理數據。)
    不僅如此,塊很適合於爲提供容錯和實用性而做的複製操作。爲了應對損壞的塊以及磁盤或機器
的故障,每個塊都在少數其它分散的機器(一般爲3個)進行復制。如果一個塊損壞了,系統會在其它讀取另一個副本,而這個過程對用戶是透明的。一個因損壞或機器故障而丟失的塊會在其他候選地點復制到正常運行的機器上,以保證副本的數量回到正常水平。

4.4 名稱節點與數據節點
    HDFS集羣有兩種節點,以管理者-工作者(master-slave)模式運行,即一個名稱節點(管理者)和多
個數據節點(工作者)。

4.4.1 名稱節點(namenode)
     名稱節點管理文件系統的命名空間,它維護着這個文件系統樹及這個樹內所有的文件和索引目錄
。這些信息以兩種形式將文件永久保存在本地磁盤上:命名空間鏡像和編輯日誌。名稱節點也記錄着每個文件的每個塊所在的數據節點,但它並不永久保存塊的位置,因爲這些信息會在系統啓動時由數據節點重建。

4.4.2 數據節點(datanode)    
      數據節點是文件系統的工作者,它們存儲並提供定位塊的服務(被用戶或名稱節點調用時),並且
定時向名稱節點發送它們存儲的塊的列表。

4.4.3 避免名稱節點故障的機制
      沒有名稱節點,文件系統將無法使用,事實上,如果運行名稱節點的機器被毀壞了,文件系統上所
有的文件都會丟失,因爲我們無法知道如何通過數據節點的塊重建文件。因此,名稱節點能經受故障是非常重要的。
  (1) 複製哪些組成文件系統元數據持久狀態的文件。Hadoop可以通過配置使名稱節點在多個文件系統
上寫入其持久化狀態,這些寫操作是具有同步性的。一般的選擇是,在本地磁盤上寫入的同時,寫入一個遠程NFS掛載(mount)。
  (2) 運行一個二級名稱節點,雖然它不能作爲名稱節點使用。二級名稱節點的重要作用就是定期的通
過編輯日誌合併命名空間鏡像,以防止編輯日誌過大。這個二級名稱節點一般在其它單獨的物理計算機上運行,因爲它也需要佔用大量CPU和內存來執行合併操作。它會保存合併後的命名空間鏡像副本,在名稱節點失效後就可以使用。但是,二級名稱節點的狀態時比主節點滯後的,所以主節點的數據若全部丟失,損失仍在所難免。在這種情況下,一般把存在NFS上的主名稱節點元數據複製到二級名稱節點上並將其作爲新的主名稱節點運行。

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