偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

深入剖析 HDFS 3.x 新特性-糾刪碼

大數(shù)據(jù)
HDFS是一個(gè)高吞吐、高容錯(cuò)的分布式文件系統(tǒng),但是HDFS在保證高容錯(cuò)的同時(shí)也帶來(lái)了高昂的存儲(chǔ)成本,比如有5T的數(shù)據(jù)存儲(chǔ)在HDFS上,按照HDFS的默認(rèn)3副本機(jī)制,將會(huì)占用15T的存儲(chǔ)空間。

[[385912]]

本文轉(zhuǎn)載自微信公眾號(hào)「五分鐘學(xué)大數(shù)據(jù)」,作者園陌 。轉(zhuǎn)載本文請(qǐng)聯(lián)系五分鐘學(xué)大數(shù)據(jù)公眾號(hào)。

HDFS 3.x 數(shù)據(jù)存儲(chǔ)新特性-糾刪碼

HDFS是一個(gè)高吞吐、高容錯(cuò)的分布式文件系統(tǒng),但是HDFS在保證高容錯(cuò)的同時(shí)也帶來(lái)了高昂的存儲(chǔ)成本,比如有5T的數(shù)據(jù)存儲(chǔ)在HDFS上,按照HDFS的默認(rèn)3副本機(jī)制,將會(huì)占用15T的存儲(chǔ)空間。那么有沒有一種能達(dá)到和副本機(jī)制相同的容錯(cuò)能力但是能大幅度降低存儲(chǔ)成本的機(jī)制呢,有,就是在HDFS 3.x 版本引入的糾刪碼機(jī)制。

1. EC介紹

Erasure Coding 簡(jiǎn)稱 EC,中文名:糾刪碼

EC(糾刪碼)是一種編碼技術(shù),在 HDFS 之前,這種編碼技術(shù)在廉價(jià)磁盤冗余陣列(RAID)中應(yīng)用最廣泛,RAID 通過條帶化技術(shù)實(shí)現(xiàn) EC,條帶化技術(shù)就是一種自動(dòng)將 I/O 的負(fù)載均衡到多個(gè)物理磁盤上的技術(shù),原理就是將一塊連續(xù)的數(shù)據(jù)分成很多小部分并把他們分別存儲(chǔ)到不同磁盤上去,這就能使多個(gè)進(jìn)程同時(shí)訪問數(shù)據(jù)的多個(gè)不同部分而不會(huì)造成磁盤沖突(當(dāng)多個(gè)進(jìn)程同時(shí)訪問一個(gè)磁盤時(shí),可能會(huì)出現(xiàn)磁盤沖突),而且在需要對(duì)這種數(shù)據(jù)進(jìn)行順序訪問的時(shí)候可以獲得最大程度上的 I/O 并行能力,從而獲得非常好的性能。

在HDFS中,把連續(xù)的數(shù)據(jù)分成很多的小部分稱為條帶化單元,對(duì)于原始數(shù)據(jù)單元的每個(gè)條帶單元,都會(huì)計(jì)算并存儲(chǔ)一定數(shù)量的奇偶檢驗(yàn)單元,計(jì)算的過程稱為編碼,可以通過基于剩余數(shù)據(jù)和奇偶校驗(yàn)單元的解碼計(jì)算來(lái)恢復(fù)任何條帶化單元上的錯(cuò)誤。

2. HDFS數(shù)據(jù)冗余存儲(chǔ)策略

HDFS的存儲(chǔ)策略是副本機(jī)制,這種存儲(chǔ)方式使得數(shù)據(jù)存儲(chǔ)的安全性得到提高,但同時(shí)也帶來(lái)了額外的開銷,HDFS默認(rèn)的3副本方案在存儲(chǔ)空間和其他資源(如網(wǎng)絡(luò)帶寬)上有200%的額外開銷,但是對(duì)于I/O活動(dòng)相對(duì)較低的數(shù)據(jù),在正常期間很少訪問其他塊副本,但是仍然消耗與第一個(gè)副本相同的資源量。

因此,HDFS 3.x 版本一個(gè)重大改進(jìn)就是使用糾刪碼(EC)代替副本機(jī)制,糾刪碼技術(shù)提供了與副本機(jī)制相同的容錯(cuò)能力,而存儲(chǔ)空間卻少得多。在典型的糾刪碼(EC)設(shè)置中,存儲(chǔ)開銷不超過50%。

3. EC算法實(shí)現(xiàn)原理

EC的實(shí)現(xiàn)算法有很多種,較為常見的一種算法是Reed-Solomon(RS),它有兩個(gè)參數(shù),記為RS(k,m),k 表示數(shù)據(jù)塊,m 表示校驗(yàn)塊,有多少個(gè)校驗(yàn)塊就最多可容忍多少個(gè)塊(包括數(shù)據(jù)塊和校驗(yàn)塊)丟失,具體原理通過如下例子解釋:

我們使用RS(3,2),表示使用 3 個(gè)原始數(shù)據(jù)塊,2 個(gè)校驗(yàn)塊。

例:由RS(3,2) 可求出它的生成矩陣 GT,和 7、8、9 三個(gè)原始數(shù)據(jù)塊 Data,通過矩陣乘法,計(jì)算出來(lái)兩個(gè)校驗(yàn)數(shù)據(jù)塊 50、122。這時(shí)原始數(shù)據(jù)加上校驗(yàn)數(shù)據(jù),一共五個(gè)數(shù)據(jù)塊:7、8、9、50、122,可以任意丟兩個(gè),然后通過算法進(jìn)行恢復(fù),矩陣乘法如下圖所示:

矩陣乘法

GT 是生成矩陣,RS(k,m) 的生成矩陣就是 m 行 k 列的矩陣;

Data 代表原始數(shù)據(jù),7,8,9代表原始數(shù)據(jù)塊;

Parity 代表校驗(yàn)數(shù)據(jù),50,122代表校驗(yàn)數(shù)據(jù)塊。

所以3個(gè)原始數(shù)據(jù)塊,如果使用2個(gè)校驗(yàn)塊,EC編碼總共占用5個(gè)數(shù)據(jù)塊的磁盤空間,與2副本機(jī)制占用6個(gè)數(shù)據(jù)塊的磁盤空間容錯(cuò)能力相當(dāng)。

4. EC的應(yīng)用場(chǎng)景

將EC技術(shù)集成進(jìn)HDFS可以提高存儲(chǔ)效率,同時(shí)仍提供與傳統(tǒng)的基于副本的HDFS部署類似的數(shù)據(jù)持久性。例如,一個(gè)具有6個(gè)塊的3副本文件將消耗 6 * 3 = 18 個(gè)磁盤空間。但是,使用EC(6個(gè)數(shù)據(jù),3個(gè)校驗(yàn))部署時(shí),它將僅消耗9個(gè)磁盤空間塊。

但是EC在編碼過程及數(shù)據(jù)重建期間會(huì)大量的使用CPU資源,并且數(shù)據(jù)大部分是執(zhí)行遠(yuǎn)程讀取,所以還會(huì)有大量的網(wǎng)絡(luò)開銷。

所以,對(duì)于CPU資源緊張且存儲(chǔ)成本較低的情況下,可以采用副本機(jī)制存儲(chǔ)數(shù)據(jù),對(duì)于CPU資源有剩余且存儲(chǔ)成本較高的情況下,可以采用EC機(jī)制存儲(chǔ)數(shù)據(jù)。

5. EC在HDFS的架構(gòu)

HDFS 是直接使用 Online EC(以EC格式寫入數(shù)據(jù)),避免了轉(zhuǎn)換階段并節(jié)省了存儲(chǔ)空間。Online EC 還通過并行利用多個(gè)磁盤主軸來(lái)增強(qiáng)順序I/O性能。在具有高端網(wǎng)絡(luò)的群集中,這尤其理想。其次,它自然地將一個(gè)小文件分發(fā)到多個(gè)DataNode,而無(wú)需將多個(gè)文件捆綁到一個(gè)編碼組中。這極大地簡(jiǎn)化了文件操作,例如刪除,磁盤配額以及namespaces之間的遷移。

在一般HDFS集群中,小文件可占總存儲(chǔ)消耗的3/4以上,為了更好的支持小文件,HDFS目前支持條形布局(Striping Layout)的EC方案,而HDFS連續(xù)布局(Contiguous Layout)方案正在開發(fā)中。

條形布局:

條形布局

優(yōu)點(diǎn):

  • 客戶端緩存數(shù)據(jù)較少;
  • 無(wú)論文件大小都適用。

缺點(diǎn):

  • 會(huì)影響一些位置敏感任務(wù)的性能,因?yàn)樵仍谝粋€(gè)節(jié)點(diǎn)上的塊被分散到了多個(gè)不同的節(jié)點(diǎn)上;
  • 和多副本存儲(chǔ)策略轉(zhuǎn)換比較麻煩。

連續(xù)布局:

連續(xù)布局

優(yōu)點(diǎn):

  • 容易實(shí)現(xiàn);
  • 方便和多副本存儲(chǔ)策略進(jìn)行轉(zhuǎn)換。

缺點(diǎn):

  • 需要客戶端緩存足夠的數(shù)據(jù)塊;
  • 不適合存儲(chǔ)小文件。

傳統(tǒng)模式下 HDFS 中文件的基本構(gòu)成單位是block,而EC模式下文件的基本構(gòu)成單位是block group。以RS(3,2)為例,每個(gè)block group包含3個(gè)數(shù)據(jù)塊,2個(gè)校驗(yàn)塊。

HDFS對(duì)于引入EC模式所做的主要擴(kuò)展如下:

  • NameNode:HDFS文件在邏輯上由block group組成,每個(gè)block group包含一定數(shù)量的內(nèi)部塊,為了減少這些內(nèi)部塊對(duì)NameNode內(nèi)存消耗,HDFS引入了新的分層塊命名協(xié)議??梢詮钠淙魏蝺?nèi)部塊的ID推斷出block group的ID。這允許在塊組而不是塊的級(jí)別進(jìn)行管理。
  • Client:客戶端讀取和寫入路徑得到了增強(qiáng),可以并行處理block group中的多個(gè)內(nèi)部塊。
  • DataNode:DataNode運(yùn)行額外ErasureCodingWorker(ECWorker)任務(wù),用于對(duì)失敗的糾刪編碼塊進(jìn)行后臺(tái)恢復(fù)。NameNode檢測(cè)到失敗的EC塊, 會(huì)選擇一個(gè)DataNode進(jìn)行恢復(fù)工作。此過程類似于失敗時(shí)如何重新恢復(fù)副本的塊。重建執(zhí)行三個(gè)關(guān)鍵的任務(wù)節(jié)點(diǎn):
  1. 從源節(jié)點(diǎn)讀取數(shù)據(jù):使用專用線程池從源節(jié)點(diǎn)并行讀取輸入數(shù)據(jù)?;贓C策略,對(duì)所有源目標(biāo)的發(fā)起讀取請(qǐng)求,并僅讀取最少數(shù)量的輸入塊進(jìn)行重建。
  2. 解碼數(shù)據(jù)并生成輸出數(shù)據(jù):從輸入數(shù)據(jù)解碼新數(shù)據(jù)和奇偶校驗(yàn)塊。所有丟失的數(shù)據(jù)和奇偶校驗(yàn)塊一起解碼。
  3. 將生成的數(shù)據(jù)塊傳輸?shù)侥繕?biāo)節(jié)點(diǎn):解碼完成后,恢復(fù)的塊將傳輸?shù)侥繕?biāo)DataNodes。
  • 糾刪碼策略:為了適應(yīng)異構(gòu)的工作負(fù)載,HDFS群集中的文件和目錄允許具有不同的復(fù)制和糾刪碼策略。糾刪碼策略封裝了如何對(duì)文件進(jìn)行編碼/解碼。每個(gè)策略由以下信息定義:
  1. EC模式:這包括EC組(例如6 + 3)中的數(shù)據(jù)和奇偶校驗(yàn)塊的數(shù)量,以及編解碼器算法(例如Reed-Solomon,XOR)。
  2. 條帶化單元的大小。這確定了條帶讀取和寫入的粒度,包括緩沖區(qū)大小和編碼工作。

我們可以通過XML文件定義自己的EC策略,該文件必須包含以下三個(gè)部分:

  1. layoutversion:這表示EC策略XML文件格式的版本。
  2. schemas:這包括所有用戶定義的EC模式。
  3. policies:這包括所有用戶定義的EC策略,每個(gè)策略均由schema id和條帶化單元的大小(cellsize)組成。

Hadoop conf目錄中有一個(gè)配置EC策略的XML示例文件,配置時(shí)可以參考該文件,文件名稱為user_ec_policies.xml.template。

6. 集群的硬件配置

糾刪碼對(duì)群集在CPU和網(wǎng)絡(luò)方面有一定的要求:

  1. 編碼和解碼工作會(huì)消耗HDFS客戶端和DataNode上的額外CPU。
  2. 糾刪碼文件也分布在整個(gè)機(jī)架上,以實(shí)現(xiàn)機(jī)架容錯(cuò)。這意味著在讀寫條帶化文件時(shí),大多數(shù)操作都是在機(jī)架上進(jìn)行的。因此,網(wǎng)絡(luò)二等分帶寬非常重要。
  3. 對(duì)于機(jī)架容錯(cuò),擁有至少與配置的EC條帶寬度一樣多的機(jī)架也很重要。對(duì)于EC策略RS(6,3),這意味著最少要有9個(gè)機(jī)架,理想情況下是10或11個(gè)機(jī)架,以處理計(jì)劃內(nèi)和計(jì)劃外的中斷。對(duì)于機(jī)架少于條帶寬度的群集,HDFS無(wú)法保持機(jī)架容錯(cuò),但仍會(huì)嘗試在多個(gè)節(jié)點(diǎn)之間分布條帶化文件以保留節(jié)點(diǎn)級(jí)容錯(cuò)。

7. 最后

在HDFS默認(rèn)情況下,所有的EC策略是被禁止的,我們可以根據(jù)群集的大小和所需的容錯(cuò)屬性,通過hdfs ec [-enablePolicy -policy]命令啟用EC策略。

例如,對(duì)于具有9個(gè)機(jī)架的群集,像RS-10-4-1024k這樣的策略將不會(huì)保留機(jī)架級(jí)的容錯(cuò)能力,而RS-6-3-1024k或RS-3-2-1024k可能更合適。

RS-10-4-1024k 表示有10個(gè)數(shù)據(jù)塊,4個(gè)校驗(yàn)塊。

 

在副本機(jī)制下,我們可以設(shè)置副本因子,指定副本的數(shù)量,但是在EC策略下,指定副本因子是沒有意義的,因?yàn)樗冀K為1,無(wú)法通過相關(guān)命令進(jìn)行更改。

 

責(zé)任編輯:武曉燕 來(lái)源: 五分鐘學(xué)大數(shù)據(jù)
相關(guān)推薦

2022-05-12 09:39:01

HDFSvivo集群

2013-07-25 09:12:48

OpenStackSwift對(duì)象存儲(chǔ)對(duì)象存儲(chǔ)

2023-06-08 05:58:28

數(shù)據(jù)庫(kù)糾刪碼技術(shù)

2025-03-21 09:30:00

2025-02-26 08:16:38

2017-06-07 14:47:39

糾刪碼存儲(chǔ)系統(tǒng)

2019-05-20 10:19:50

Python 3Python函數(shù)

2024-05-11 08:10:10

2011-08-16 10:41:40

安裝XcodeLion

2012-06-17 20:19:29

2021-12-09 10:17:25

部署實(shí)戰(zhàn)Linux

2011-04-27 09:39:53

EclipseIntelliJ

2014-11-28 09:47:26

Python

2009-02-04 17:33:24

ibmdwPython

2024-11-05 09:25:45

2011-04-11 09:11:42

GNOME 3

2009-07-27 10:35:20

2009-09-24 10:22:38

Hibernate3新

2018-01-17 17:15:58

Python項(xiàng)目模塊

2024-05-06 07:39:30

CubeFS云原生存儲(chǔ)平臺(tái)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)