您好,登錄后才能下訂單哦!
本篇內容介紹了“ HDFS 3.x 新特性糾刪碼的介紹”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
HDFS 3.x 數據存儲新特性-糾刪碼
HDFS是一個高吞吐、高容錯的分布式文件系統,但是HDFS在保證高容錯的同時也帶來了高昂的存儲成本,比如有5T的數據存儲在HDFS上,按照HDFS的默認3副本機制,將會占用15T的存儲空間。那么有沒有一種能達到和副本機制相同的容錯能力但是能大幅度降低存儲成本的機制呢,有,就是在HDFS 3.x 版本引入的糾刪碼機制。
1. EC介紹
Erasure Coding 簡稱 EC,中文名:糾刪碼
EC(糾刪碼)是一種編碼技術,在 HDFS 之前,這種編碼技術在廉價磁盤冗余陣列(RAID)中應用最廣泛,RAID 通過條帶化技術實現 EC,條帶化技術就是一種自動將 I/O 的負載均衡到多個物理磁盤上的技術,原理就是將一塊連續的數據分成很多小部分并把他們分別存儲到不同磁盤上去,這就能使多個進程同時訪問數據的多個不同部分而不會造成磁盤沖突(當多個進程同時訪問一個磁盤時,可能會出現磁盤沖突),而且在需要對這種數據進行順序訪問的時候可以獲得最大程度上的 I/O 并行能力,從而獲得非常好的性能。
在HDFS中,把連續的數據分成很多的小部分稱為條帶化單元,對于原始數據單元的每個條帶單元,都會計算并存儲一定數量的奇偶檢驗單元,計算的過程稱為編碼,可以通過基于剩余數據和奇偶校驗單元的解碼計算來恢復任何條帶化單元上的錯誤。
2. HDFS數據冗余存儲策略
HDFS的存儲策略是副本機制,這種存儲方式使得數據存儲的安全性得到提高,但同時也帶來了額外的開銷,HDFS默認的3副本方案在存儲空間和其他資源(如網絡帶寬)上有200%的額外開銷,但是對于I/O活動相對較低的數據,在正常期間很少訪問其他塊副本,但是仍然消耗與第一個副本相同的資源量。
因此,HDFS 3.x 版本一個重大改進就是使用糾刪碼(EC)代替副本機制,糾刪碼技術提供了與副本機制相同的容錯能力,而存儲空間卻少得多。在典型的糾刪碼(EC)設置中,存儲開銷不超過50%。
3. EC算法實現原理
EC的實現算法有很多種,較為常見的一種算法是Reed-Solomon(RS),它有兩個參數,記為RS(k,m),k 表示數據塊,m 表示校驗塊,有多少個校驗塊就最多可容忍多少個塊(包括數據塊和校驗塊)丟失,具體原理通過如下例子解釋:
我們使用RS(3,2),表示使用 3 個原始數據塊,2 個校驗塊。
例:由RS(3,2) 可求出它的生成矩陣 GT,和 7、8、9 三個原始數據塊 Data,通過矩陣乘法,計算出來兩個校驗數據塊 50、122。這時原始數據加上校驗數據,一共五個數據塊:7、8、9、50、122,可以任意丟兩個,然后通過算法進行恢復,矩陣乘法如下圖所示:
矩陣乘法
GT 是生成矩陣,RS(k,m) 的生成矩陣就是 m 行 k 列的矩陣;
Data 代表原始數據,7,8,9代表原始數據塊;
Parity 代表校驗數據,50,122代表校驗數據塊。
所以3個原始數據塊,如果使用2個校驗塊,EC編碼總共占用5個數據塊的磁盤空間,與2副本機制占用6個數據塊的磁盤空間容錯能力相當。
4. EC的應用場景
將EC技術集成進HDFS可以提高存儲效率,同時仍提供與傳統的基于副本的HDFS部署類似的數據持久性。例如,一個具有6個塊的3副本文件將消耗 6 * 3 = 18 個磁盤空間。但是,使用EC(6個數據,3個校驗)部署時,它將僅消耗9個磁盤空間塊。
但是EC在編碼過程及數據重建期間會大量的使用CPU資源,并且數據大部分是執行遠程讀取,所以還會有大量的網絡開銷。
所以,對于CPU資源緊張且存儲成本較低的情況下,可以采用副本機制存儲數據,對于CPU資源有剩余且存儲成本較高的情況下,可以采用EC機制存儲數據。
5. EC在HDFS的架構
HDFS 是直接使用 Online EC(以EC格式寫入數據),避免了轉換階段并節省了存儲空間。Online EC 還通過并行利用多個磁盤主軸來增強順序I/O性能。在具有高端網絡的群集中,這尤其理想。其次,它自然地將一個小文件分發到多個DataNode,而無需將多個文件捆綁到一個編碼組中。這極大地簡化了文件操作,例如刪除,磁盤配額以及namespaces之間的遷移。
在一般HDFS集群中,小文件可占總存儲消耗的3/4以上,為了更好的支持小文件,HDFS目前支持條形布局(Striping Layout)的EC方案,而HDFS連續布局(Contiguous Layout)方案正在開發中。
條形布局:
條形布局
優點:
客戶端緩存數據較少;
無論文件大小都適用。
缺點:
會影響一些位置敏感任務的性能,因為原先在一個節點上的塊被分散到了多個不同的節點上;
和多副本存儲策略轉換比較麻煩。
連續布局:
連續布局
優點:
容易實現;
方便和多副本存儲策略進行轉換。
缺點:
需要客戶端緩存足夠的數據塊;
不適合存儲小文件。
傳統模式下 HDFS 中文件的基本構成單位是block,而EC模式下文件的基本構成單位是block group。以RS(3,2)為例,每個block group包含3個數據塊,2個校驗塊。
HDFS對于引入EC模式所做的主要擴展如下:
NameNode:HDFS文件在邏輯上由block group組成,每個block group包含一定數量的內部塊,為了減少這些內部塊對NameNode內存消耗,HDFS引入了新的分層塊命名協議。可以從其任何內部塊的ID推斷出block group的ID。這允許在塊組而不是塊的級別進行管理。
Client:客戶端讀取和寫入路徑得到了增強,可以并行處理block group中的多個內部塊。
DataNode:DataNode運行額外ErasureCodingWorker(ECWorker)任務,用于對失敗的糾刪編碼塊進行后臺恢復。NameNode檢測到失敗的EC塊, 會選擇一個DataNode進行恢復工作。此過程類似于失敗時如何重新恢復副本的塊。重建執行三個關鍵的任務節點:
從源節點讀取數據:使用專用線程池從源節點并行讀取輸入數據。基于EC策略,對所有源目標的發起讀取請求,并僅讀取最少數量的輸入塊進行重建。
解碼數據并生成輸出數據:從輸入數據解碼新數據和奇偶校驗塊。所有丟失的數據和奇偶校驗塊一起解碼。
將生成的數據塊傳輸到目標節點:解碼完成后,恢復的塊將傳輸到目標DataNodes。
糾刪碼策略:為了適應異構的工作負載,HDFS群集中的文件和目錄允許具有不同的復制和糾刪碼策略。糾刪碼策略封裝了如何對文件進行編碼/解碼。每個策略由以下信息定義:
EC模式:這包括EC組(例如6 + 3)中的數據和奇偶校驗塊的數量,以及編解碼器算法(例如Reed-Solomon,XOR)。
條帶化單元的大小。這確定了條帶讀取和寫入的粒度,包括緩沖區大小和編碼工作。
我們可以通過XML文件定義自己的EC策略,該文件必須包含以下三個部分:
layoutversion:這表示EC策略XML文件格式的版本。
schemas:這包括所有用戶定義的EC模式。
policies:這包括所有用戶定義的EC策略,每個策略均由schema id和條帶化單元的大小(cellsize)組成。
Hadoop conf目錄中有一個配置EC策略的XML示例文件,配置時可以參考該文件,文件名稱為user_ec_policies.xml.template。
6. 集群的硬件配置
糾刪碼對群集在CPU和網絡方面有一定的要求:
編碼和解碼工作會消耗HDFS客戶端和DataNode上的額外CPU。
糾刪碼文件也分布在整個機架上,以實現機架容錯。這意味著在讀寫條帶化文件時,大多數操作都是在機架上進行的。因此,網絡二等分帶寬非常重要。
對于機架容錯,擁有至少與配置的EC條帶寬度一樣多的機架也很重要。對于EC策略RS(6,3),這意味著最少要有9個機架,理想情況下是10或11個機架,以處理計劃內和計劃外的中斷。對于機架少于條帶寬度的群集,HDFS無法保持機架容錯,但仍會嘗試在多個節點之間分布條帶化文件以保留節點級容錯。
7. 最后
在HDFS默認情況下,所有的EC策略是被禁止的,我們可以根據群集的大小和所需的容錯屬性,通過hdfs ec [-enablePolicy -policy]命令啟用EC策略。
例如,對于具有9個機架的群集,像RS-10-4-1024k這樣的策略將不會保留機架級的容錯能力,而RS-6-3-1024k或RS-3-2-1024k可能更合適。
RS-10-4-1024k 表示有10個數據塊,4個校驗塊。
在副本機制下,我們可以設置副本因子,指定副本的數量,但是在EC策略下,指定副本因子是沒有意義的,因為它始終為1,無法通過相關命令進行更改。
“ HDFS 3.x 新特性糾刪碼的介紹”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。