Hadoop 3.0 糾刪碼技術分析(Erasure Coding)


Hadoop 3.0 糾刪碼技術分析(Erasure Coding)

背景

隨着大數據技術的發展,HDFS作為Hadoop的核心模塊之一得到了廣泛的應用。為了數據的可靠性,HDFS通過多副本機制來保證。在HDFS中的每一份數據都有兩個副本,1TB的原始數據需要占用3TB的磁盤空間,存儲利用率只有1/3。而且系統中大部分是使用頻率非常低的冷數據,卻和熱數據一樣存儲3個副本,給存儲空間和網絡帶寬帶來了很大的壓力。因此,在保證可靠性的前提下如何提高存儲利用率已成為當前HDFS面對的主要問題之一。

Hadoop 3.0 引入了糾刪碼技術(Erasure Coding),它可以提高50%以上的存儲利用率,並且保證數據的可靠性。

糾刪碼技術(Erasure coding)簡稱EC,是一種編碼容錯技術。最早用於通信行業,數據傳輸中的數據恢復。它通過對數據進行分塊,然后計算出校驗數據,使得各個部分的數據產生關聯性。當一部分數據塊丟失時,可以通過剩余的數據塊和校驗塊計算出丟失的數據塊。

原理

Reed-Solomon(RS)碼是存儲系統較為常用的一種糾刪碼,它有兩個參數k和m,記為RS(k,m)。如下圖所示,k個數據塊組成一個向量被乘上一個生成矩陣(Generator Matrix)GT從而得到一個碼字(codeword)向量,該向量由k個數據塊和m個校驗塊構成。如果一個數據塊丟失,可以用(GT)-1乘以碼字向量來恢復出丟失的數據塊。RS(k,m)最多可容忍m個塊(包括數據塊和校驗塊)丟失。

ec1

比如:我們有 7、8、9 三個原始數據,通過矩陣乘法,計算出來兩個校驗數據 50、122。這時原始數據加上校驗數據,一共五個數據:7、8、9、50、122,可以任意丟兩個,然后通過算法進行恢復。

ec2

HDFS EC 方案

傳統模式下HDFS中文件的基本構成單位是block,而EC模式下文件的基本構成單位是block group。以RS(3,2)為例,每個block group包含3個數據塊,2個校驗塊。

連續布局(Contiguous Layout)

文件數據被依次寫入塊中,一個塊寫滿之后再寫入下一個塊,這種分布方式稱為連續布局。

優點:

  • 容易實現
  • 方便和多副本存儲策略進行轉換

缺點:

  • 需要客戶端緩存足夠的數據塊
  • 不適合存儲小文件

ec3

條形布局(Striping Layout)

條(stripe)是由若干個相同大小的單元(cell)構成的序列。文件數據被依次寫入條的各個單元中,當一個條寫滿之后再寫入下一個條,一個條的不同單元位於不同的數據塊中。這種分布方式稱為條形布局。

優點:

  • 客戶端緩存數據較少
  • 無論文件大小都適用
    缺點:
  • 會影響一些位置敏感任務的性能,因為原先在一個節點上的塊被分散到了多個不同的節點上
  • 和多副本存儲策略轉換比較麻煩

ec4

HDFS EC 開發計划

整個HDFS EC項目主要分為兩個階段:

1、用戶可以讀和寫一個條形布局(Striping Layout)的文件;如果該文件的一個塊丟失,后台能夠檢查出並恢復;如果在讀的過程中發現數據丟失,能夠立即解碼出丟失的數據從而不影響讀操作。
2、支持將一個多副本模式(HDFS原有模式)的文件轉換成連續布局(Contiguous Layout),以及從連續布局轉換成多副本模式。

第一階段 HDFS-7285 已經實現,第二階段 HDFS-8030 正在進行中。

ec5

ec6

注意

1、EC存儲策略下的文件,不支持append()、hflush()、hsync()
2、不同存儲策略的目錄或文件,目前沒有提供轉換的方法。比如想把一個以RS(3,2)存儲的文件,轉換為RS(6,3)存儲策略,或者三副本存儲策略,目前並沒有轉換方法,但可以通過把文件復制到相應存儲策略的目錄來達到這個目的(比如cp、distcp)

HDFS EC 讀流程分析

先看一下代碼流程圖

ec7

引用

http://hadoop.apache.org/docs/r3.0.0-beta1/hadoop-project-dist/hadoop-hdfs/HDFSErasureCoding.html
https://www.iteblog.com/archives/1684.html
http://geek.csdn.net/news/detail/77338


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM