HDFS RAID實現方案

2021-09-25 20:45:57 字數 2984 閱讀 4126

分布式檔案系統主要用於解決海量資料儲存的問題,如goolge、facebook等大型網際網路企業都使用分布式檔案系統作為資料儲存的基礎設施,並在其上構建很多服務,分布式檔案系統通常採用三副本的策略來保證資料的可靠性,但隨著應用資料量的不斷膨脹,三副本策略為可靠性犧牲的儲存空間也越來越大,如何在不降低資料可靠性的基礎上,進一步降低儲存空間成本? facebook將erasure code應用到內部hdfs集群中,該方案使用erasure code代替傳統的三副本策略,在保持集群可用性不變的情況下,節省了數pb的儲存空間,facebook的實現方案(hdfs raid)目前已貢獻給開源社群。

erasure code

如下圖所示,hdfs要想容忍2個block的丟失,則需要為每個block建立3個副本,儲存空間成本為資料量大小的3倍。而採用rs編碼,只需要1.4倍(10個資料塊、4個校驗塊)的儲存開銷,能容忍4個block的丟失。(rs的原理請自行google)

hdfs中的檔案通常很大,檔案有多個固定大小(64m)的block組成,block一旦寫滿就不會再更改,hdfs raid以檔案為單位計算校驗,並將計算出來的校驗block儲存為乙個hdfs檔案。hdfs-raid目前支援raid5rsraid6可用rs實現)兩種編碼方式,下圖為副本、raid5、rs三種方案編碼的對比,其中副本方式儲存空間成本最高、但能獲得較高的讀寫效率(多副本並行服務);rs方案儲存成本最低,但資料儲存、恢復時計算開銷較大。

drfs總體架構(distributed raid file system)

為了不影響現有的服務邏輯,drfs採用漸進式的部署方案,可逐步的將編碼應用到hdfs中的檔案,使用者可配置需要編碼的檔案的模式(如指定字尾名為mkv、指定某個目錄下的所有檔案等),raidnode根據使用者的配置,從namenode獲取符合要求的檔案(滿足使用者配置的模式,且超過指定時間沒有更新)分布資訊,並從datanode上讀取檔案資料塊,計算出校驗檔案,並儲存到hdfs中(使用者可配置校驗檔案的儲存位置)。

drfs以檔案為單位計算校驗,將檔案劃分成多個stripe,每個stripe包含一或多個block(stripe length可配置),stripe length越小,計算出的校驗資料量越小,資料恢復時的成本越高;反之,,stripe length越大,儲存空間成本越高,但當block丟失,恢復時的計算和傳輸成本越低 。如下圖所示,6個block組成的檔案,當stripe length為1和2時,校驗塊的情況;兩者都可以容忍兩個block丟失,但前者的儲存開銷為1.33倍,而後者的儲存1.67倍;但當block丟失時,前者需要讀取6個block來恢復,而後者只需要讀取3個block。

當校驗資料塊計算完成,且校驗檔案儲存到hdfs後,hdfs將降低檔案的副本數,以節省儲存空間。另外,對於一些小的檔案(block數較少),raidnode並不會為其計算校驗塊,而是什麼也不做,因為當檔案較小時,副本方案與rs方案的儲存成本開銷相差不大,並不能起到節省儲存空間的作用,反而降低了檔案並行服務的能力,增加了block丟失時的恢復開銷。

raidnode還負責丟失塊的恢復工作,它定期的檢查已經應用erasue code的檔案狀態,確定其是否有block已經丟失(source file、parity file都需要檢查),如果有block已經丟失,則其先從各個ds上獲取恢復該block需要的資料,並重新計算該block。

hdfs raid主要問題在於,parity file的資料塊可能分布到跟source file資料塊相同的datanode上,這樣實際上降低了系統的整體可靠性;為解決該問題,hdfs raid提出了新的資料放置方案,已將source和parity的block資料分散到不同的datanode,但要應用新的放置方案,需要重啟namenode的服務。

drfs client

使用者需要讀取已經應用erasue code的方案的檔案時,需要使用drfs client,其對hdfs client進行了封裝,並透明處理block丟失的情況;當出現block丟失或檢驗錯誤時,drfs client透明的計算出丟失block的資料,並返回給使用者;當使用者請求完成後,drfs client會丟棄block的資料,該block的恢復會由raidnode完成,或由管理員通過raidshell手動觸發恢復

geo實現方案

1 資料庫內在支援gis 地理資訊系統 mysql 目前只有myisam引擎是支援gis的,innodb在5.7版本中才支援空間索引。myisam這個引擎 不支援事務 外來鍵,而且是表鎖。適合讀為主,不適合寫操作。而且如果單獨建一張表的話,那每次都要與 現有的表聯合查詢返回tag的地點,效率多少會有...

FPGA實現DDS方案

一 dds的系統結構 dds是直接數字式頻率合成器 direct digital synthesizer 系統結構可分為如下幾個部分,其中相位控制字可調整輸出正弦波的相位,頻率控制字可以調整輸出正弦波的頻率。dac把fpga輸出的數字量轉換成模擬訊號,因為訊號中有大量高頻訊號,再加一級的低通濾波器可...

Redux非同步方案實現

一 不借用第三方庫實現redux非同步 場景建立 先來個很常見的場景,在http請求之前我們一般會用loading元件來表示資料正在請求,等http請求結束就關閉loading。下圖所示的是http請求的3種狀態 上述場景如果不使用redux狀態管理器,我們會使用react的state或hooks特...