Hadoop3.0 HDFS擦除編碼

目的

復(fù)制是昂貴的 - HDFS中的默認(rèn)3x復(fù)制方案在存儲空間和其他資源(例如網(wǎng)絡(luò)帶寬)上具有200%的開銷勾效。但是斗躏,對于I / O活動相對較低的熱數(shù)據(jù)集和冷數(shù)據(jù)集,在正常操作期間很少訪問額外的塊副本低散,但仍占用與第一個副本相同數(shù)量的資源桨昙。
因此,自然的改進是使用擦除編碼(EC)來代替復(fù)制措左,這提供了相同級別的容錯性以及更少的存儲空間依痊。在典型的擦除編碼(EC)設(shè)置中,存儲開銷不超過50%媳荒。EC文件的復(fù)制因素是沒有意義的抗悍。它始終為1驹饺,不能通過-setrep命令更改。

背景

在存儲系統(tǒng)中缴渊,EC最顯著的用途是廉價磁盤冗余陣列(RAID)赏壹。RAID通過條帶化來實現(xiàn)EC,將邏輯上連續(xù)的數(shù)據(jù)(如文件)分割成更小的單元(比如位衔沼,字節(jié)或塊)蝌借,并將連續(xù)的單元存儲在不同的磁盤上。在本指南的其余部分指蚁,這個條帶分布單元被稱為條帶單元(或單元)菩佑。對于原始數(shù)據(jù)單元的每個條帶,計算并存儲一定數(shù)量的奇偶單元 - 其過程被稱為編碼凝化。任何分條單元上的錯誤可以通過基于存活數(shù)據(jù)和奇偶校驗單元的解碼計算來恢復(fù)稍坯。
將EC與HDFS集成可以提高存儲效率,同時仍能提供與傳統(tǒng)的基于復(fù)制的HDFS部署類似的數(shù)據(jù)持久性搓劫。舉個例子瞧哟,一個有6個塊的3x復(fù)制文件會占用6 * 3 = 18塊磁盤空間。但是隨著EC(6數(shù)據(jù)枪向,3奇偶校驗)的部署勤揩,它將只消耗9塊磁盤空間。

結(jié)構(gòu)

在EC的背景下秘蛔,條帶化有幾個關(guān)鍵的優(yōu)勢陨亡。首先,它使在線EC(立即以EC格式寫入數(shù)據(jù))深员,避免了轉(zhuǎn)換階段负蠕,并立即節(jié)省存儲空間。在線EC還通過并行使用多個磁盤主軸來增強順序I / O性能; 這在高端網(wǎng)絡(luò)的群集中是特別理想的辨液。其次虐急,它自然將一個小文件分發(fā)給多個DataNode,并且不需要將多個文件捆綁到一個編碼組中滔迈。這極大地簡化了文件操作,如刪除被辑,配額報告以及聯(lián)邦名稱空間之間的遷移燎悍。
在典型的HDFS集群中,小文件占總存儲消耗的3/4以上盼理。為了更好地支持小文件谈山,在第一階段的工作中,HDFS支持帶有條帶的EC宏怔。未來奏路,HDFS也將支持連續(xù)的EC布局畴椰。有關(guān)更多信息,請參閱HDFS-7285的設(shè)計文檔和討論鸽粉。
NameNode擴展 - 條帶化的HDFS文件在邏輯上由塊組組成斜脂,每個塊組包含一定數(shù)量的內(nèi)部塊。為了減少來自這些附加塊的NameNode內(nèi)存消耗触机,引入了新的分層塊命名協(xié)議帚戳。塊組的ID可以從任何內(nèi)部塊的ID中推斷出來。這允許在塊組而不是塊的級別進行管理儡首。
客戶端擴展 - 客戶端讀寫路徑得到了增強片任,可并行處理塊組中的多個內(nèi)部塊。在輸出/寫入路徑上蔬胯,DFSStripedOutputStream管理一組數(shù)據(jù)流对供,每個DataNode存儲當(dāng)前塊組中的內(nèi)部塊。拖纜主要是異步工作的氛濒。一個協(xié)調(diào)器負(fù)責(zé)整個塊組的操作产场,包括結(jié)束當(dāng)前塊組,分配一個新的塊組泼橘,等等涝动。信范讀范范亦范范亦亦H2讀亦讀信范上亦讀信范中內(nèi)亦讀 然后它并行發(fā)出讀取請求。一旦失敗炬灭,它會發(fā)出額外的解碼請求醋粟。
DataNode擴展 - DataNode運行額外的ErasureCodingWorker(ECWorker)任務(wù),用于失敗的刪除編碼塊的后臺恢復(fù)重归。NameNode檢測到失敗的EC塊米愿,然后選擇一個DataNode進行恢復(fù)工作”撬保恢復(fù)任務(wù)作為心跳響應(yīng)傳遞育苟。這個過程類似于復(fù)制塊在失敗時被重新復(fù)制的方式。重建執(zhí)行三項關(guān)鍵任務(wù):
從源節(jié)點讀取數(shù)據(jù):使用專用線程池從源節(jié)點并行讀取輸入數(shù)據(jù)椎木∥グ兀基于EC策略,它將讀取請求安排到所有的源目標(biāo)香椎,只讀取最小數(shù)量的輸入塊進行重構(gòu)漱竖。
解碼數(shù)據(jù)并生成輸出數(shù)據(jù):從輸入數(shù)據(jù)中解碼新數(shù)據(jù)和奇偶校驗塊。所有丟失的數(shù)據(jù)和奇偶校驗塊一起解碼畜伐。
將生成的數(shù)據(jù)塊傳輸?shù)侥繕?biāo)節(jié)點:一旦解碼完成馍惹,恢復(fù)的塊將傳輸?shù)侥繕?biāo)DataNode。
擦除編碼策略為了適應(yīng)異構(gòu)工作負(fù)載,我們允許HDFS集群中的文件和目錄具有不同的復(fù)制和擦除編碼策略万矾。擦除編碼策略封裝了如何對文件進行編碼/解碼悼吱。每個策略由以下幾條信息定義:
EC模式:這包括EC組(例如,6 + 3)中的數(shù)據(jù)和奇偶校驗塊的數(shù)量良狈,以及編解碼器算法(例如Reed-Solomon后添,XOR)。
條紋單元的大小们颜。這決定了條帶讀取和寫入的粒度吕朵,包括緩沖區(qū)大小和編碼工作。
策略被命名為codec - num數(shù)據(jù)塊 - num奇偶校驗塊 - 單元大小窥突。目前支持六種內(nèi)置策略:RS-3-2-1024k努溃,RS-6-3-1024k,RS-10-4-1024k阻问,RS-LEGACY-6-3-1024k梧税,XOR-2-1- 1024k和REPLICATION。
復(fù)制是一項特殊的政策称近。它只能在目錄上設(shè)置第队,強制目錄采用3x復(fù)制方案,而不是繼承祖先的刪除編碼策略刨秆。此策略可以將3x復(fù)制方案目錄與刪除編碼目錄交錯凳谦。
REPLICATION策略始終處于啟用狀態(tài)。對于其他內(nèi)置策略衡未,默認(rèn)情況下它們是禁用的尸执。
類似于HDFS存儲策略,擦除編碼策略在目錄上設(shè)置缓醋。當(dāng)一個文件被創(chuàng)建時如失,它會繼承它最近的祖先目錄的EC策略。
目錄級EC策略僅影響在該目錄中創(chuàng)建的新文件送粱。一旦創(chuàng)建了一個文件褪贵,就可以查詢它的刪除編碼策略,但不能改變抗俄。如果擦除編碼的文件被重命名為具有不同EC策略的目錄脆丁,則該文件保留其現(xiàn)有的EC策略。將文件轉(zhuǎn)換為不同的EC策略需要重寫其數(shù)據(jù); 通過復(fù)制文件(例如动雹,通過distcp)而不是重命名它偎快。
我們允許用戶通過一個XML文件來定義他們自己的EC策略,該文件必須包含以下三個部分:
layoutversion:這表示EC策略XML文件格式的版本洽胶。
schemas:這包括所有用戶定義的EC模式。
policies:這包括所有用戶定義的EC策略,每個策略由模式標(biāo)識和條帶化單元的大墟⒚ァ(單元格大胸で印)組成。
名為user_ec_policies.xml.template的示例EC策略XML文件位于Hadoop conf目錄中翔横,供用戶參考读跷。
英特爾ISA-L英特爾ISA-L代表英特爾智能存儲加速庫。ISA-L是為存儲應(yīng)用程序設(shè)計的優(yōu)化低級函數(shù)的開源集合禾唁。它包含針對Intel AVX和AVX2指令集優(yōu)化的快速塊Reed-Solomon類型擦除代碼效览。HDFS擦除編碼可以利用ISA-L來加速編碼和解碼計算。ISA-L支持大部分主流操作系統(tǒng)荡短,包括Linux和Windows丐枉。ISA-L默認(rèn)是不啟用的。有關(guān)如何啟用ISA-L掘托,請參閱下面的說明瘦锹。

部署

群集和硬件配置
擦除編碼在CPU和網(wǎng)絡(luò)方面對集群提出了額外的要求。
編碼和解碼工作在HDFS客戶端和DataNode上消耗額外的CPU闪盔。
擦除編碼的文件也分布在機架上以實現(xiàn)機架容錯弯院。這意味著在讀取和寫入條帶化文件時,大多數(shù)操作都是機架外的泪掀。網(wǎng)絡(luò)二等分帶寬非常重要听绳。
對于機架容錯,配置至少與配置的EC條帶寬度一樣多的機架也很重要异赫。對于歐共體政策RS(6,3)椅挣,這意味著最少9個機架,最好是10或11個祝辣,以處理計劃內(nèi)和計劃外停機贴妻。對于機架數(shù)量少于條帶寬度的機箱,HDFS無法保持機架的容錯性蝙斜,但仍然會嘗試在多個節(jié)點間傳播條帶文件以保持節(jié)點級的容錯性名惩。

配置鍵

默認(rèn)情況下,除了在默認(rèn)情況下啟用的dfs.namenode.ec.system.default.policy中定義的內(nèi)容之外孕荠,所有內(nèi)置的擦除編碼策略都是禁用的娩鹉。集群管理員可以通過hdfs ec [-enablePolicy -policy <policyName>]命令根據(jù)集群的大小和所需的容錯屬性啟用一組策略。例如稚伍,對于具有9個機架的集群弯予,像RS-10-4-1024k這樣的策略將不能保持機架級別的容錯,而RS-6-3-1024k或RS-3-2-1024k可能更合適个曙。如果管理員只關(guān)心節(jié)點級容錯锈嫩,那么只要集群中至少有14個DataNode ,RS-10-4-1024k仍然適用。
系統(tǒng)默認(rèn)的EC策略可以通過“dfs.namenode.ec.system.default.policy”配置進行配置呼寸。使用此配置艳汽,當(dāng)在“-setPolicy”命令中沒有將策略名稱作為參數(shù)傳遞時,將使用默認(rèn)的EC策略对雪。
默認(rèn)情況下河狐,“dfs.namenode.ec.system.default.policy”是“RS-6-3-1024k”。
該編解碼器實現(xiàn)的用于里德-索羅門和XOR可與以下客戶端和數(shù)據(jù)管理部的配置的鍵被構(gòu)造成:io.erasurecode.codec.rs.rawcoders默認(rèn)RS編解碼器瑟捣,io.erasurecode.codec.rs-legacy.rawcoders用于遺留RS編解碼器馋艺,用于XOR編解碼器的io.erasurecode.codec.xor.rawcoders。用戶還可以使用配置鍵配置自定義的編解碼器迈套,如:io.erasurecode.codec.self-defined-codec.rawcoders捐祠。這些鍵的值是帶有回退機制的編碼器名稱列表。這些編解碼器工廠按照配置值指定的順序加載交汤,直到成功加載編解碼器雏赦。默認(rèn)的RS和XOR編解碼器配置優(yōu)先于純Java的本地實現(xiàn)。沒有RS-LEGACY本地編解碼器實現(xiàn)芙扎,所以默認(rèn)只是純Java實現(xiàn)星岗。所有這些編解碼器都在純Java中實現(xiàn)。對于默認(rèn)的RS編解碼器戒洼,還有一個本地實現(xiàn)俏橘,利用英特爾ISA-L庫來提高編解碼器的性能。對于XOR編解碼器圈浇,還支持利用Intel ISA-L庫來提高編解碼器性能的本機實現(xiàn)寥掐。有關(guān)更多詳細信息,請參閱“啟用Intel ISA-L”部分磷蜀。RS Legacy的默認(rèn)實現(xiàn)是純Java召耘,
DataNode上的擦除編碼后臺恢復(fù)工作也可以通過以下配置參數(shù)進行調(diào)整:
dfs.datanode.ec.reconstruction.stripedread.timeout.millis - 條帶讀取超時。默認(rèn)值是5000毫秒褐隆。
dfs.datanode.ec.reconstruction.stripedread.buffer.size - 讀取器服務(wù)的緩沖區(qū)大小污它。默認(rèn)值是64KB。
dfs.datanode.ec.reconstruction.threads - Datanode用于后臺重建工作的線程數(shù)庶弃。默認(rèn)值是8個線程衫贬。
啟用英特爾ISA-L
默認(rèn)RS編解碼器的HDFS本地實現(xiàn)利用了Intel ISA-L庫來改進編碼和解碼計算。要啟用和使用英特爾ISA-L歇攻,有三個步驟固惯。1.建立ISA-L庫。有關(guān)詳細信息缴守,請參閱官方網(wǎng)站“ https://github.com/01org/isa-l/ ”葬毫。2.用ISA-L支持構(gòu)建Hadoop镇辉。請參閱源代碼(BUILDING.txt)中的“構(gòu)建Hadoop指令”中的“Intel ISA-L構(gòu)建選項”部分。3.使用-Dbundle.isal將isal.lib目錄的內(nèi)容復(fù)制到最終的tar文件中供常。用tar文件部署Hadoop摊聋。確保ISA-L在HDFS客戶端和DataNode上可用。
要驗證Hadoop正確檢測到ISA-L栈暇,請運行hadoop checknative命令。

管理命令

HDFS提供了一個ec子命令來執(zhí)行與刪除編碼相關(guān)的管理命令箍镜。

hdfs ec [通用選項]
[-setPolicy -path <path> [-policy <policyName>] [-replicate]]
[-getPolicy -path <path>]
[-unsetPolicy -path <path>]
[-listPolicies]
[ - addPolicies -policyFile <file>]
[-listCodecs]
[-enablePolicy -policy <policyName>]
[-disablePolicy -policy <policyName>]
[-help [cmd ...]]
以下是有關(guān)每個命令的詳細信息源祈。
[-setPolicy -path <path> [-policy <policyName>] [-replicate]]
在指定路徑的目錄中設(shè)置刪除編碼策略。
路徑:HDFS中的目錄色迂。這是一個強制參數(shù)香缺。設(shè)置策略只影響新創(chuàng)建的文件,不影響現(xiàn)有的文件歇僧。
policyName:用于此目錄下文件的擦除編碼策略图张。如果設(shè)置了“dfs.namenode.ec.system.default.policy”配置,則可以省略此參數(shù)诈悍。路徑的EC策略將在配置中設(shè)置為默認(rèn)值祸轮。
-replicate在目錄上應(yīng)用特殊的REPLICATION策略,強制目錄采用3x復(fù)制方案侥钳。
-replicate和-policy <policyName>是可選參數(shù)适袜。它們不能同時指定。
[-getPolicy -path <path>]
獲取指定路徑下文件或目錄的刪除編碼策略的詳細信息舷夺。
[-unsetPolicy -path <path>]
取消先前對目錄上的setPolicy調(diào)用所設(shè)置的擦除編碼策略苦酱。如果目錄繼承祖先目錄中的刪除編碼策略,則unsetPolicy為空操作给猾。在沒有顯式策略設(shè)置的目錄上取消設(shè)置策略不會返回錯誤疫萤。
[-listPolicies]
列出在HDFS中注冊的所有(啟用,禁用和刪除)刪除編碼策略敢伸。只有已啟用的策略適用于setPolicy命令扯饶。
[-addPolicies -policyFile <文件>]
添加刪除編碼策略的列表。示例策略文件請參考etc / hadoop / user_ec_policies.xml.template详拙。最大單元尺寸在屬性“dfs.namenode.ec.policies.max.cellsize”中定義帝际,默認(rèn)值為4MB。
[-listCodecs]
獲取系統(tǒng)中支持的糾刪碼編解碼器和編碼器列表饶辙。編碼器是一個編解碼器的實現(xiàn)蹲诀。一個編解碼器可以有不同的實現(xiàn),因此不同的編碼器弃揽。編解碼器的編碼器按照回退順序列出脯爪。
[-removePolicy -policy <policyName>]
刪除糾刪碼策略则北。
[-enablePolicy -policy <policyName>]
啟用刪除編碼策略。
[-disablePolicy -policy <policyName>]
禁用擦除編碼策略痕慢。

限制

擦除編碼文件不支持某些HDFS文件寫入操作尚揣,即hflush,hsync和append掖举,因為存在嚴(yán)重的技術(shù)挑戰(zhàn)快骗。
append()在擦除編碼文件將拋出IOException。
hflush()和HSYNC()上DFSStripedOutputStream是無操作塔次。因此方篮,在擦除編碼的文件上調(diào)用hflush()或hsync()不能保證數(shù)據(jù)持久。
客戶端可以使用StreamCapabilities API來查詢OutputStream是否支持hflush()和hsync()励负。如果客戶希望通過hflush()和hsync()來實現(xiàn)數(shù)據(jù)持久化藕溅,目前的補救措施是在非擦除編碼的目錄中創(chuàng)建常規(guī)3x復(fù)制文件等文件,或使用FSDataOutputStreamBuilder#replicate() API創(chuàng)建3x復(fù)制文件一個刪除編碼的目錄继榆。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末巾表,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子略吨,更是在濱河造成了極大的恐慌集币,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晋南,死亡現(xiàn)場離奇詭異惠猿,居然都是意外死亡,警方通過查閱死者的電腦和手機负间,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門偶妖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人政溃,你說我怎么就攤上這事趾访。” “怎么了董虱?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵扼鞋,是天一觀的道長。 經(jīng)常有香客問我愤诱,道長云头,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任淫半,我火速辦了婚禮溃槐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘科吭。我一直安慰自己昏滴,他們只是感情好猴鲫,可當(dāng)我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著谣殊,像睡著了一般拂共。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上姻几,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天宜狐,我揣著相機與錄音,去河邊找鬼鲜棠。 笑死肌厨,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的豁陆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼吵护,長吁一口氣:“原來是場噩夢啊……” “哼盒音!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起馅而,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤祥诽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后瓮恭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體雄坪,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年屯蹦,在試婚紗的時候發(fā)現(xiàn)自己被綠了维哈。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡登澜,死狀恐怖阔挠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情脑蠕,我是刑警寧澤购撼,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站谴仙,受9級特大地震影響迂求,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜晃跺,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一揩局、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧哼审,春花似錦谐腰、人聲如沸孕豹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽励背。三九已至,卻和暖如春砸西,著一層夾襖步出監(jiān)牢的瞬間叶眉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工芹枷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留衅疙,地道東北人。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓鸳慈,卻偏偏與公主長得像饱溢,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子走芋,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 首先绩郎,我們在使用前先看看HDFS是什麼?這將有助于我們是以后的運維使用和故障排除思路的獲得翁逞。 HDFS采用mast...
    W_Bousquet閱讀 4,196評論 0 2
  • 一肋杖、操作方式 Hadoop支持的文件系統(tǒng)由很多(見下圖),HDFS只是其中一種實現(xiàn)挖函。Java抽象類org.apac...
    Mervey閱讀 1,308評論 0 0
  • 這是那年流行單身狗頭像,我把彩色圖片勾勒出來了哲思。 眼神酷酷的有木有
    依依_默閱讀 203評論 0 0
  • 在高高的野山上 有朵花 盛開著 迎著風(fēng) 微微笑著 雨什么時候來 她不知道 雨后洼畅,凋謝了 天邊出現(xiàn)那一彎淺淺的彩虹 ...
    蕭塔閱讀 172評論 0 0
  • 1、 一次棚赔,我去一個朋友家做客帝簇,朋友家的客房很壯觀,可以說四壁都裝滿了書靠益,簡直像一座圖書館丧肴。 我不禁感嘆,擁有這么...
    miss蓓閱讀 658評論 0 11