Hadoop系列之HDFS 糾刪碼 18

2021-10-18 01:41:55 字數 1667 閱讀 6801

hadoop hdfs 糾刪碼已經克服了之前使用的資料塊多副本策略的限制,它具有和多副本策略相同的容錯效果,但需要的儲存空間卻少很多。使用糾刪碼技術可以減少 50% 的儲存空間。

hdfs 為了資料容錯,在儲存的時候回,每個資料塊會被複製3次。為了防止由於 datanode 發生故障帶來資料丟失,這是一種簡單且健壯的方式。利用本地儲存多個資料塊副本的方式,還可以減輕 mapreduce 任務或者其他計算任務的負擔。但資料塊複製技術的開銷比較大,3個副本就需要 200% 的儲存空間開銷和其他資源開銷。

因此,乙個新的 hdfs 特性 —— 糾刪碼,就是來代替資料塊複製技術的。在比較兩種儲存模式的時候,重點考慮的是:

在儲存系統中,糾刪碼技術主要是通過利用糾刪碼演算法將原始的資料進行編碼得到校驗,並將資料和校驗一併儲存起來,以達到容錯的目的。其基本思想是將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)構成的序列。在條形布局下,資料被依次寫入條的各個單元中,當條被寫滿之後就寫入下乙個條,乙個條的不同單元位於不同的資料塊中。

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

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

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

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

Hadoop容錯恢復之糾刪碼

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

Hadoop糾刪碼演算法啟用ISA L加速庫

啟用isa l步驟如下 安裝yasm和nasm 在hadoop集群所有節點上安裝yasm和nasm。1 configure 2.make make install 或者直接用yum安裝 yum install y yasm yum install y nasm 注意 isa l 2.28.0對nas...

Hadoop系列之HDFS 資料塊 12

要把大檔案儲存在 hdfs上,hdfs 會把大檔案分割成小塊,即我們通常說的資料塊 block 它是 hadoop 分布式檔案系統最小的儲存單元,而且我們沒辦法決定指定塊的儲存節點位址,這些 namenode 會替我們決定。資料塊預設大小是 128mb,比作業系統裡面的塊概念要大很多 作業系統塊大小...