Hadoop分散式文件系統1-從RAID說起

大數據技術主要要解決的問題的是大規模數據的計算處理問題,那麼首先要解決的就是大規模數據的存儲問題。大規模數據存儲要解決的核心問題有三個方面:

  1. 數據存儲容量的問題,既然大數據要解決的是數以PB計的數據計算問題,而一般的伺服器磁碟容量通常1-2TB,那麼如何存儲這麼大規模的數據。
  2. 數據讀寫速度的問題,一般磁碟的連續讀寫速度為幾十MB,以這樣的速度,幾十PB的數據恐怕要讀寫到天荒地老。
  3. 數據可靠性的問題,磁碟大約是計算機設備中最易損壞的硬體了,在網站一塊磁碟使用壽命大概是一年,如果磁碟損壞了,數據怎麼辦?

在大數據技術出現之前,人們就需要面對這些關於存儲的問題,對應的解決方案就是RAID技術。

從RAID說起

RAID(獨立磁碟冗餘陣列)技術主要是為了改善磁碟的存儲容量,讀寫速度,增強磁碟的可用性和容錯能力。目前伺服器級別的計算機都支持插入多塊磁碟(8塊或者更多),通過使用RAID技術,實現數據在多塊磁碟上的並發讀寫和數據備份。

常用RAID技術有以下幾種,如圖所示。

常用RAID技術原理圖

假設伺服器有N塊磁碟。

RAID0

數據在從內存緩衝區寫入磁碟時,根據磁碟數量將數據分成N份,這些數據同時並發寫入N塊磁碟,使得數據整體寫入速度是一塊磁碟的N倍。讀取的時候也一樣,因此RAID0具有極快的數據讀寫速度,但是RAID0不做數據備份,N塊磁碟中只要有一塊損壞,數據完整性就被破壞,所有磁碟的數據都會損壞。

RAID1

數據在寫入磁碟時,將一份數據同時寫入兩塊磁碟,這樣任何一塊磁碟損壞都不會導致數據丟失,插入一塊新磁碟就可以通過複製數據的方式自動修復,具有極高的可靠性。

RAID10

結合RAID0和RAID1兩種方案,將所有磁碟平均分成兩份,數據同時在兩份磁碟寫入,相當於RAID1,但是在每一份磁碟裡面的N/2塊磁碟上,利用RAID0技術並發讀寫,既提高可靠性又改善性能,不過RAID10的磁碟利用率較低,有一半的磁碟用來寫備份數據。

RAID3

一般情況下,一台伺服器上不會出現同時損壞兩塊磁碟的情況,在只損壞一塊磁碟的情況下,如果能利用其他磁碟的數據恢復損壞磁碟的數據,這樣在保證可靠性和性能的同時,磁碟利用率也得到大幅提升。

在數據寫入磁碟的時候,將數據分成N-1份,並發寫入N-1塊磁碟,並在第N塊磁碟記錄校驗數據,任何一塊磁碟損壞(包括校驗數據磁碟),都可以利用其他N-1塊磁碟的數據修復。

但是在數據修改較多的場景中,任何磁碟修改數據都會導致第N塊磁碟重寫校驗數據,頻繁寫入的後果是第N塊磁碟比其他磁碟容易損壞,需要頻繁更換,所以RAID3很少在實踐中使用。

RAID5

相比RAID3,更多被使用的方案是RAID5。

RAID5和RAID3很相似,但是校驗數據不是寫入第N塊磁碟,而是螺旋式地寫入所有磁碟中。這樣校驗數據的修改也被平均到所有磁碟上,避免RAID3頻繁寫壞一塊磁碟的情況。

RAID6

如果數據需要很高的可靠性,在出現同時損壞兩塊磁碟的情況下(或者運維管理水平比較落後,壞了一塊磁碟但是遲遲沒有更換,導致又壞了一塊磁碟),仍然需要修複數據,這時候可以使用RAID6。

RAID6和RAID5類似,但是數據只寫入N-2塊磁碟,並螺旋式地在兩塊磁碟中寫入校驗信息(使用不同演算法生成)。

在相同磁碟數目(N)的情況下,各種RAID技術的比較如下表所示。

幾種RAID技術比較

RAID技術有硬體實現,比如專用的RAID卡或者主板直接支持,也可以通過軟體實現,在操作系統層面將多塊磁碟組成RAID,在邏輯視作一個訪問目錄。RAID技術在傳統關係資料庫及文件系統中應用比較廣泛,是改善計算機存儲特性的重要手段。

RAID技術只是在單台伺服器的多塊磁碟上組成陣列,大數據需要更大規模的存儲空間和訪問速度。將RAID技術原理應用到分散式伺服器集群上,就形成了Hadoop分散式文件系統HDFS的架構思想。


推薦閱讀:

5分鐘 Hadoop Shuffle 優化
從頭學習大數據培訓課程 hadoop 分散式計算框架(四) mapreducer編程 counter、combiner、壓縮、任務配置
HDFS NameNode內存詳解
做大數據相關專業,如Hadoop、Hive、Impala等研究與優化的人就業情況如何呢?
2016 年技術盤點系列文章 —— 「數據實踐篇」

TAG:Hadoop | HDFS | 大型網站技術架構核心原理與案例分析書籍 |