HDFS:從RAID到HDFS,看大數據存儲王者的誕生

arong2048 2021-08-15 21:29:49 阅读数:565

本文一共[544]字,预计阅读时长:1分钟~
hdfs raid hdfs 王者

RAID是“Redundant Array of Independent Disk”的縮寫,中文意思是獨立冗餘磁盤陣列。冗餘磁盤陣列技術誕生於1987年,由美國加州大學伯克利分校提出,是單機時代拓展硬盤容量的主流方式;GFS(Google File System)是Google研發的可伸縮、高可用、高可靠的分布式文件系統,是Google三篇分布式計算論文中的“第一輛馬車”,2006年基於GFS的分布式存儲系統HDFS正式誕生,RAID落幕,HDFS逐漸成長為大數據存儲領域事實上的標准和王者。

1.如何存儲大量數據

隨著計算機行業和互聯網行業的發展,數據存儲的量級也越發龐大,企業往往需要收集各類用戶行為、操作以及日志數據,以達到數據分析、商品推薦和構建用戶畫像等目的,而這其中就無法避免一個現實的問題:數據量越來越大,如何存儲? 在這裏插入圖片描述

從一個典型的現實問題著手:假如現在有1TB的文件需要存儲,而一臺服務器只有500GB的磁盤空間,那麼應該如何存儲?

在這裏插入圖片描述

顯然,如果不做其他額外的處理的話,1TB文件絕對無法存儲在一臺只有500GB磁盤空間的服務器,這時候解决的辦法有兩種辦法。

第一種方式是拓展服務器的磁盤容量,我們可以在服務器中多安裝一塊500GB的磁盤,這樣就可以容納1TB的文件了。

第二種方式是新增多臺服務器,利用這些服務器組成一個集群共同來承載這個文件。

這兩個思路就是RAID和HDFS誕生的雛形了,實際上RAID的解决方式是垂直拓展,通過對硬件的不斷昇級來支持更大的存儲,而HDFS的解决方式是水平拓展,通過多個服務器共同組成集群來對外提供存儲能力,分散存儲內容。

在這裏插入圖片描述

無論是RAID還是HDFS,大數據的存儲系統都需要解决三個核心的痛點問題,總結如下。

1.數據存儲容量的問題:大數據要解决的是數以 PB 計的數據計算問題,而一般的服務器磁盤容量通常 1~2TB,應該如何設計以存儲如此大的數據量?

2.數據讀寫速度的問題:一般磁盤的連續讀寫速度為幾十 MB,以這樣的速度讀取數PB的數據根本不現實,慢得無法接受啊?

3.數據可靠性的問題:磁盤大約是計算機設備中最易損壞的硬件了,通常情况一塊磁盤使用壽命大概是一年,如果磁盤損壞了,數據如何保障不丟失?

2.RAID原理與分類

RAID(獨立磁盤冗餘陣列)技術是將多塊普通磁盤組成一個陣列,共同對外提供服務。主要是為了改善磁盤的存儲容量、讀寫速度,增强磁盤的可用性和容錯能力。在 RAID 之前,要使用大容量、高可用、高速訪問的存儲系統需要專門的存儲設備,這類設備價格要比 RAID 的幾塊普通磁盤貴幾十倍。

RAID的基本原理是水平拓展,就像上文說道的,服務器上的磁盤為500GB,要容納1TB的文件,那麼在該服務器的基礎上上新增一塊500GB的磁盤,使用RAID技術將其構建在一起,形成一個整體的邏輯磁盤,共同對外提供服務,那麼就可以解决這個問題。

在這裏插入圖片描述

RAID根據不同的實現方式可以分為許多類,RAID被廣泛使用的實現分類有RAID 0、RAID 1、 RAID 10、 RAID 5及RAID 6。首先假設服務器有N塊磁盤,現在需要將這N塊磁盤構建為RAID系統對外提供存儲服務,以下是這幾種實現方式的實現原理。

RAID 0的實現方式是數據在從內存緩沖區寫入磁盤時將數據分成N份,這些數據同時並行寫入N塊磁盤,使得數據整體寫入速度是一塊磁盤的N。讀取的時候也一樣,並行地從N塊磁盤中讀取數據。因此RAID 0 具有極快的數據讀寫速度。

在這裏插入圖片描述

RAID 0的缺點是沒有容錯機制,假如N塊磁盤中有一塊磁盤損壞,那麼就會導致數據丟失,造成數據完整性的破壞,從而導致RAID系統不可用。

為了避免磁盤損壞而導致的數據丟失問題,RAID 1的實現方式是在數據在從內存緩沖區寫入磁盤時將數據同時全量寫入兩塊磁盤中,這樣就可以冗餘出一塊磁盤,當磁盤中的任意一塊損壞時,都可以從另一塊磁盤中獲取到完整的備份數據,極大地提高了可用性。

在這裏插入圖片描述

RAID 1方案的缺點是讀寫效率較低,並且磁盤使用空間只為50%,會造成較大的存儲資源浪費。

RAID 10方案基於RAID 0和RAID 1結合而成,也就是在數據從內存緩沖區寫入磁盤時,將數據劃分為N/2份,分別寫入到N/2塊磁盤中,也就是RAID 1的同時寫入冗餘機制,並且對於自身的那份N/2塊磁盤的寫入並不是全量寫,而是再次劃分,分片並行寫入這N/2塊磁盤,也就是采用了RAID 0的分片並行寫入機制。這樣就可以同時具備RAID 0分片並行讀寫的效率以及RAID 1的高可用性。

在這裏插入圖片描述

RAID 10方案的缺點是,仍然有N/2塊磁盤冗餘,磁盤空間使用率為50%。

RAID 5至少需要三個硬盤,RAID 5不是對存儲的數據進行備份,而是把數據和相對應的奇偶校驗信息存儲到組成RAID 5的各個磁盤上,並且奇偶校驗信息和相對應的數據分別存儲於不同的磁盤上。

當RAID 5的一個磁盤數據發生損壞後,可以利用剩下N-1塊磁盤的數據和相應的奇偶校驗信息去恢複被損壞的數據。RAID 5可以理解為是RAID 0和RAID 1的折衷方案。RAID 5可以為系統提供數據安全保障,但保障程度要比冗餘備份低而磁盤空間利用率要比冗餘備份高。RAID 5具有和RAID 0相近似的數據讀取速度,只是因為多了一個奇偶校驗信息。

在這裏插入圖片描述

RAID 6和RAID 5多增加了一塊磁盤存儲校驗信息,可以允許兩塊磁盤失效,並且從其餘N-2塊磁盤中恢複完整數據。

RAID 5和RAID 6的磁盤空間使用率分為為(N-1)/N和(N-2)/N,其讀寫效率和RAID 0幾乎一樣高效,並且較强的數據完整性恢複能力,是目前被廣泛使用的RAID方案。

RAID不同方案的實現特性如圖所示,從RAID的原理可以看出RAID是如何解决大數據存儲的三個問題的:

1.通過多塊磁盤的組合和冗餘,使得服務器對外提供的存儲量更大。

  1. 通過並行的分片讀寫來優化讀寫效率。

3.通過磁盤備份和奇偶校驗信息,來保障數據的完整性和可靠性。 在這裏插入圖片描述

3.HDFS原理與容錯機制

在計算機發展的早期,拜摩爾定律所賜,每 18 個月計算機的處理能力提昇一倍,服務器存儲容量小,那麼就增加磁盤,以提供更大的容量,這也是RAID誕生的背景。

但是到了互聯網時代,這種垂直伸縮的路子走不通了,需要存儲的數據量膨脹到了PB量級,即使是世界上最强大的超級計算機也無法滿足其對計算資源的需求。

垂直伸縮總有盡頭,而水平伸縮理論上來說是無盡的,在一個系統中不斷添加服務器,以滿足不斷增長的用戶和數據對計算資源的需求。基於RAID的服務器分片並行讀寫思想和冗餘備份思想,HDFS橫空出世。

HDFS全稱為Hadoop Distributed File System,即為Hadoop提供的分布式文件系統,Hadoop底層的存儲能力都是基於HDFS來提供,所以認為HDFS是整個Hadoop體系的底層核心基石。

HDFS的特點是采用了低成本的硬件設計模式,具備很高的容錯性,可以部署在價格低廉的普通服務器上,通過多臺服務器組成HDFS集群從而提供分布式存儲的能力。

和 RAID 在多個磁盤上進行文件存儲及並行讀寫的思路一樣,HDFS 是在一個大規模分布式服務器集群上,對數據分片後進行並行讀寫及冗餘存儲。因為 HDFS 可以部署在一個比較大的服務器集群上,集群中所有服務器的磁盤都可供 HDFS 使用,所以整個 HDFS 的存儲空間可以達到 PB 級容量。

HDFS的核心架構組件圖如下,主要分為Client、NameNode、SecondaryNameNode、DataNode這四個核心組件。 在這裏插入圖片描述

DataNode負責文件數據的存儲和讀寫操作,HDFS將文件數據分割成若幹數據塊(Block,早期版本為64MB,hadoop 2.0之後為128MB),每個 DataNode 存儲一部分數據塊,這樣文件就分布存儲在整個 HDFS 服務器集群中。

應用程序客戶端(Client)可以並行對這些數據塊進行訪問,從而使得 HDFS 可以在服務器集群規模上實現數據並行訪問,極大地提高了訪問速度。在實踐中,HDFS 集群的 DataNode 服務器會有很多臺,一般在幾百臺到幾千臺這樣的規模,每臺服務器配有數塊磁盤,整個集群的存儲容量大概在幾 PB 到數百 PB。

NameNode負責整個分布式文件系統的元數據(MetaData)管理,也就是文件路徑名、數據塊的 ID 以及存儲比特置等信息,相當於操作系統中文件分配錶(FAT)的角色。HDFS 為了保證數據的高可用,會將一個數據塊複制為多份(缺省情况為 3 份),並將多份相同的數據塊存儲在不同的服務器上,甚至不同的機架上。這樣當有磁盤損壞,或者某個 DataNode 服務器宕機,甚至某個交換機宕機,導致其存儲的數據塊不能訪問的時候,客戶端會查找其備份的數據塊進行訪問。

借助RAID的思想,HDFS將數據分成若幹數據塊後存儲到不同服務器上,可以實現數據大容量存儲,並且不同分片的數據可以分片並行進行讀 / 寫操作,進而實現數據的高速訪問。解决了數據存儲量級的讀寫效率問題後,HDFS通過以下措施來保障集群數據的完整性和容錯:

在這裏插入圖片描述

1.磁盤數據完整性校驗

磁盤介質在存儲過程中受環境或者老化影響,其存儲的數據可能會出現錯亂。HDFS的應對措施是,對於存儲在DataNode上的數據塊,計算並存儲校驗和(CheckSum)。在讀取數據的時候,重新計算讀取出來的數據的校驗和,如果校驗不正確就拋出异常,應用程序捕獲异常後就到其他DataNode上讀取備份數據。

在這裏插入圖片描述

2. 磁盤故障檢測校驗

DataNode 監測到本機的某塊磁盤損壞,就將該塊磁盤上存儲的所有 BlockID 報告給 NameNode,NameNode 檢查這些數據塊還在哪些 DataNode 上有備份,通知相應的 DataNode 服務器將對應的數據塊複制到其他服務器上,以保證數據塊的備份數滿足要求。

3.DataNode心跳檢驗

DataNode會通過心跳和NameNode保持通信,如果DataNode超時未發送心跳,NameNode就會認為這個DataNode已經宕機失效,立即查找這個DataNode存儲的數據塊有哪些,以及這些數據塊還存儲在哪些服務器上,隨後通知這些服務器再複制一份數據塊到其他服務器上,保證HDFS存儲的數據塊備份數符合用戶設置的數目,即使再出現服務器宕機,也不會丟失數據。

在這裏插入圖片描述

4.NameNode主備切換

NameNode是整個HDFS的核心,記錄著HDFS文件分配錶信息,所有的文件路徑和數據塊存儲信息都保存在NameNode,如果NameNode故障,整個HDFS系統集群都無法使用;如果NameNode上記錄的數據丟失,整個集群所有DataNode存儲的數據也就沒用了。所以,NameNode 高可用容錯能力非常重要。NameNode采用主從熱備的方式提供高可用服務。

一般集群部署兩臺NameNode服務器,一臺作為主服務器提供服務,一臺作為從服務器進行熱備,兩臺服務器通過ZooKeeper選舉,主要是通過爭奪znode鎖資源,决定誰是主服務器。而DataNode則會向兩個NameNode同時發送心跳數據,但是只有主NameNode才能向DataNode返回控制信息。

正常運行期間,主從NameNode之間通過一個共享存儲系統shared edits來同步文件系統的元數據信息。當主NameNode服務器宕機,從NameNode會通過ZooKeeper昇級成為主服務器,並保證HDFS集群的元數據信息,也就是文件分配錶信息完整一致。

在這裏插入圖片描述

4.參考

版权声明:本文为[arong2048]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/08/20210815212946407V.html