Hadoop 3 0糾刪碼 能節省一半儲存空間!

2021-07-14 09:17:06 字數 2108 閱讀 3022

隨著大資料技術的發展,hdfs作為hadoop的核心模組之一得到了廣泛的應用。為了系統的可靠性,hdfs通過複製來實現這種機制。但在hdfs中每乙份資料都有兩個副本,這也使得儲存利用率僅為1/3,每tb資料都需要占用3tb的儲存空間。隨著資料量的增長,複製的代價也變得越來越明顯:傳統的3份複製相當於增加了200%的儲存開銷,給儲存空間和網路頻寬帶來了很大的壓力。因此,在保證可靠性的前提下如何提高儲存利用率已成為當前hdfs應用的主要問題之一。

針對這些問題,英特爾、cloudera、華為以及其他的apache hadoop communit共同參與開始引入糾刪碼(erasure coding,ec)技術,在保證資料可靠性的同時大幅降低儲存開銷。相關**已經進入trunk,並計畫在2。9或3。0版本中發布。

erasure coding糾刪碼技術簡稱ec,是一種資料保護技術。最早用於通訊行業中資料傳輸中的資料恢復,是一種編碼容錯技術。他通過在原始資料中加入新的校驗資料,使得各個部分的資料產生關聯性。在一定範圍的資料出錯情況下,通過糾刪碼技術都可以進行恢復。

文章目錄

在儲存系統中,糾刪碼技術主要是通過利用糾刪碼演算法將原始的資料進行編碼得到校驗,並將資料和校驗一併儲存起來,以達到容錯的目的。其基本思想是將k塊原始的資料元素通過一定的編碼計算,得到m塊校驗元素。對於這k+m塊元素,當其中任意的m塊元素出錯(包括資料和校驗出錯),均可以通過對應的重構演算法恢復出原來的k塊資料。生成校驗的過程被成為編碼(encoding),恢復丟失資料塊的過程被稱為解碼(decoding)。

reed-solomon(rs)碼是儲存系統較為常用的一種糾刪碼,它有兩個引數k和m,記為rs(k,m)。如圖1所示,k個資料塊組成乙個向量被乘上乙個生成矩陣(generator matrix)gt從而得到乙個碼字(codeword)向量,該向量由k個資料塊和m個校驗塊構成。如果乙個資料塊丟失,可以用(gt)-1乘以碼字向量來恢復出丟失的資料塊。rs(k,m)最多可容忍m個塊(包括資料塊和校驗塊)丟失。

對hdfs的乙個普通檔案來說,構成它的基本單位是塊。對於ec模式下的檔案,構成它的基本單位為塊組。塊組由一定數目的資料塊加上生成的校驗塊放一起構成。以rs(6,3)為例,每乙個塊組包含1-6個資料塊,以及3個校驗塊。進行ec編碼的前提是每個塊的長度一致。如果不一致,則應填充0。圖2給出三種不同型別的塊組及其編碼。

資料被依次寫入乙個塊中,乙個塊寫滿之後再寫入下乙個塊,資料的這種分布方式被稱為連續布局。在一些分布式檔案系統如qfs和ceph中,廣泛使用另外一種布局:條形布局。條(stripe)是由若干個相同大小單元(cell)構成的序列。在條形布局下,資料被依次寫入條的各個單元中,當條被寫滿之後就寫入下乙個條,乙個條的不同單元位於不同的資料塊中。

由於hdfs的內部邏輯已經相當複雜,所以整個hdfs ec專案的實現主要分為三個階段:

1、使用者可以讀和寫乙個條形布局(striping layout)的檔案;如果該檔案的乙個塊丟失,後台能夠檢查出並恢復;如果在讀的過程中發現資料丟失,能夠立即解碼出丟失的資料從而不影響讀操作。

2、支援將乙個多備份模式(hdfs原有模式)的檔案轉換成連續布局(contiguous layout,定義見下文),以及從連續布局轉換成多備份模式。

3、編解碼器將作為外掛程式,使用者可指定檔案所使用的編解碼器。

第一階段(hdfs-7285)已經實現第1個功能,第二階段(hdfs-8030)正在進行中,將實現第2和第3個功能。

糾刪碼技術作為一門資料保護技術,自然有許多的優勢,首先可以解決的就是目前分布式系統,雲計算中採用副本來防止資料的丟失。副本機制確實可以解決資料丟失的問題,但是翻倍的資料儲存空間也必然要被消耗,這一點卻是非常致命的。ec技術的運用就可以直接解決這個問題。

ec技術的優勢確實明顯,但是他的使用也是需要一些代價的,一旦資料需要恢復,他會造成2大資源的消耗:

1、網路頻寬的消耗,因為資料恢復需要去讀其他的資料塊和校驗塊

2、進行編碼,解碼計算需要消耗cpu資源

概況來講一句話,就是既耗網路又耗cpu,看來代價也不小。所以這麼來看,將此計數用於線上服務可能會覺得不夠穩定,所以最好的選擇是用於冷資料集群,有下面2點原因可以支援這種選擇

1、冷資料集群往往有大量的長期沒有被訪問的資料,體量確實很大,採用ec技術,可以大大減少副本數

2、冷資料集群基本穩定,耗資源量少,所以一旦進行資料恢復,將不會對集群造成大的影響

出於上述2種原因,冷資料集群無非是乙個很好的選擇。

Hadoop容錯恢復之糾刪碼

在hdfs中常見的容錯恢復是副本機制,它會在部分檔案丟失之後通過心跳機制發資料給namenode然後尋找未丟失的副本,按照replication進行備份。這樣的話會保證資料在絕大多數情況下不丟失。但是造成的問題就是這種機制使得hadoop的空間利用率會很低。比如說在乙個備份數量為3的情況下空間利用率...

糾刪碼簡介

背景 在資料儲存領域,hadoop採用三副本策略有效的解決了儲存的容錯問題,但是三副本策略中磁碟的利用效率比較低,僅有33 而且副本帶來的成本壓力實在太高,後來適時的出現了糾刪碼的概念。當冗餘級別為n m時,將這些資料塊分別存放在n m個硬碟上,這樣就能容忍m個 假設初始資料有n個 硬碟發生故障。當...

Hadoop系列之HDFS 糾刪碼 18

hadoop hdfs 糾刪碼已經克服了之前使用的資料塊多副本策略的限制,它具有和多副本策略相同的容錯效果,但需要的儲存空間卻少很多。使用糾刪碼技術可以減少 50 的儲存空間。hdfs 為了資料容錯,在儲存的時候回,每個資料塊會被複製3次。為了防止由於 datanode 發生故障帶來資料丟失,這是一...