專利名稱:一種分布式文件系統(tǒng)上基于硬件加速卡的壓縮解壓縮方法
技術(shù)領(lǐng)域:
本發(fā)明涉及分布式文件系統(tǒng)技術(shù)領(lǐng)域,尤其涉及ー種分布式文件系統(tǒng)上基于硬件加速卡的壓縮解壓縮方法。
背景技術(shù):
隨著數(shù)據(jù)時(shí)代的到來,互聯(lián)網(wǎng)所要處理的數(shù)據(jù)量日益増大,為了保證數(shù)據(jù)的高可靠性,當(dāng)前的分布式文件系統(tǒng)一般采用多副本策略。但是,在大規(guī)模機(jī)群中這將會(huì)帶來不可忽略的巨額存儲(chǔ)開銷,同時(shí)對于分布式文件系統(tǒng)之上的系統(tǒng)或應(yīng)用,如分布式數(shù)據(jù)庫、分布式數(shù)據(jù)倉庫、MapReduce框架或其它應(yīng)用,也有可能會(huì)產(chǎn)生冗余數(shù)據(jù),使得數(shù)據(jù)的膨脹率更高,I/O性能成為系統(tǒng)的瓶頸日益明顯,現(xiàn)有的分布式文件系統(tǒng)難以同時(shí)滿足高性能、高可靠性和低存儲(chǔ)開銷的需求。通過對分布式文件系統(tǒng)之上應(yīng)用的類型進(jìn)行分析可以得知,這些應(yīng)用使用或產(chǎn)生的大部分?jǐn)?shù)據(jù)是文本信息,特別是離線或在線分析系統(tǒng)中的數(shù)據(jù)基本都是文本,而文本本身是ー種高度可壓縮的數(shù)據(jù),因此通過引入ー種快速的數(shù)據(jù)壓縮方法,可以有效降低數(shù)據(jù)的存儲(chǔ)開銷,提高磁盤和網(wǎng)絡(luò)I/O的有效帶寬,從而提高應(yīng)用的呑吐量。對于傳統(tǒng)的采用軟件方式實(shí)現(xiàn)數(shù)據(jù)壓縮或解壓縮方法,如GZip,該方式雖然能使系統(tǒng)的存儲(chǔ)開銷減小,但是在壓縮或解壓縮過程中會(huì)占用大量的CPU資源,有可能導(dǎo)致系統(tǒng)的處理能力下降。
發(fā)明內(nèi)容
本發(fā)明的目的在于提出ー種分布式文件系統(tǒng)上基于硬件加速卡的壓縮解壓縮方法,能夠使得在占用少量系統(tǒng)資源的情況下,完成對用戶透明的壓縮和解壓縮過程,降低系統(tǒng)的存儲(chǔ)開銷,并且具有良好的容錯(cuò)機(jī)制。為達(dá)此目的,本發(fā)明采用以下技術(shù)方案—種分布式文件系統(tǒng)上基于硬件加速卡的壓縮解壓縮方法,所述方法包括分布式文件系統(tǒng)中的客戶端向數(shù)據(jù)節(jié)點(diǎn)寫入數(shù)據(jù)時(shí)所述客戶端將文件塊分成多個(gè)分片,調(diào)用硬件加速卡對各分片進(jìn)行壓縮,再將壓縮后的各分片發(fā)送至所述數(shù)據(jù)節(jié)點(diǎn);所述數(shù)據(jù)節(jié)點(diǎn)將所述壓縮后的各分片存儲(chǔ)至壓縮塊文件中,并更新所述數(shù)據(jù)節(jié)點(diǎn)中的索引文件;分布式文件系統(tǒng)中的客戶端從數(shù)據(jù)節(jié)點(diǎn)讀取數(shù)據(jù)時(shí)所述數(shù)據(jù)節(jié)點(diǎn)找到保存讀取數(shù)據(jù)的壓縮塊文件;所述客戶端取回包含所述讀取數(shù)據(jù)的各分片,調(diào)用所述硬件加速卡對所述各分片進(jìn)行解壓縮,并組合解壓縮后的各分片,將組合后的解壓縮數(shù)據(jù)發(fā)送至上層應(yīng)用。優(yōu)選地,所述各分片為64KB大小的數(shù)據(jù)。 進(jìn)ー步地,所述硬件加速卡采用PCI接ロ;所述硬件加速卡利用一個(gè)壓縮方法庫,實(shí)現(xiàn)對特定內(nèi)存緩沖區(qū)中的數(shù)據(jù)進(jìn)行壓縮或解壓縮的功能;所述硬件加速卡上配備有多個(gè)處理芯片,每個(gè)芯片可單獨(dú)進(jìn)行壓縮或解壓縮操作,所述芯片由可編程邏輯器件構(gòu)成;其中,所述壓縮方法庫包括各種壓縮解壓縮算法和驅(qū)動(dòng)程序,具有壓縮和解壓縮兩個(gè)接ロ,兩個(gè)接ロ的參數(shù)均包括輸入緩沖區(qū)和輸出緩沖區(qū);進(jìn)ー步地,所述硬件加速卡利用一個(gè)壓縮方法庫,實(shí)現(xiàn)對特定內(nèi)存緩沖區(qū)中的數(shù)據(jù)進(jìn)行壓縮或解壓縮的功能包括所述壓縮方法庫將壓縮或解壓縮算法經(jīng)所述用戶層編程接ロ接入;調(diào)用驅(qū)動(dòng)程序,經(jīng)所述用戶層編程接ロ驅(qū)動(dòng)硬件加速卡,完成對特定內(nèi)存緩沖區(qū)中的數(shù)據(jù)壓縮或解壓縮功能。進(jìn)ー步地,所述調(diào)用所述硬件加速卡對各分片進(jìn)行壓縮包括所述客戶端將所述各分片送入所述壓縮方法庫壓縮接ロ的輸入緩沖區(qū),所述壓縮方法庫驅(qū)動(dòng)所述硬件加速卡,所述硬件加速卡完成對所述各分片的壓縮過程,并將壓縮后的所述各分片送入所述壓縮方法庫壓縮接ロ的輸出緩沖區(qū)。進(jìn)ー步地,所述調(diào)用所述硬件加速卡對所述各分片進(jìn)行解壓縮包括所述客戶端將所述各分片送入所述壓縮方法庫解壓縮接ロ的輸入緩沖區(qū),所述壓縮方法庫驅(qū)動(dòng)所述硬件加速卡,所述硬件加速卡完成對所述各分片的解壓縮過程,并將解壓縮后的所述各分片送入所述壓縮方法庫解壓縮接ロ的輸出緩沖區(qū)。進(jìn)ー步地,所述壓縮方法庫在對數(shù)據(jù)進(jìn)行壓縮或解壓縮時(shí),如果發(fā)現(xiàn)所述硬件加速卡出現(xiàn)故障,將采用軟件方式對數(shù)據(jù)進(jìn)行壓縮或解壓縮。進(jìn)ー步地,所述壓縮后的分片信息包括頭部信息和壓縮數(shù)據(jù),所述頭部信息包括原始數(shù)據(jù)大小、壓縮數(shù)據(jù)大小、壓縮算法類型。進(jìn)ー步地,所述數(shù)據(jù)節(jié)點(diǎn)將所述壓縮后的各分片存儲(chǔ)至壓縮塊文件中,并更新所述數(shù)據(jù)節(jié)點(diǎn)的索引文件包括所述數(shù)據(jù)節(jié)點(diǎn)按順序?qū)⑺鰤嚎s后的各分片寫到壓縮塊文件中,并另外維護(hù)ー個(gè)索引文件;其中所述索引文件按所述各分片在文件塊原始文件中的順序,記錄所述各分片在壓縮塊文件中的位置偏移量和長度。進(jìn)ー步地,所述數(shù)據(jù)節(jié)點(diǎn)找到保存讀取數(shù)據(jù)的壓縮塊文件包括所述數(shù)據(jù)節(jié)點(diǎn)根據(jù)所述讀取數(shù)據(jù)在文件塊原始文件中的偏移位置和長度,在所述索引文件中找到所述讀取數(shù)據(jù)在壓縮塊文件中的位置。進(jìn)ー步地,所述分布式文件系統(tǒng)的上層應(yīng)用可獨(dú)立使用所述硬件加速卡以數(shù)據(jù)流的形式對數(shù)據(jù)進(jìn)行壓縮或解壓縮。進(jìn)ー步地,所述上層應(yīng)用使用所述硬件加速卡向數(shù)據(jù)流中寫入數(shù)據(jù)的過程包括所述上層應(yīng)用先對需要寫入的數(shù)據(jù)進(jìn)行緩存,如果緩存數(shù)據(jù)的大小超過預(yù)設(shè)值,將所述預(yù)設(shè)值大小的數(shù)據(jù)作為ー個(gè)壓縮塊,調(diào)用所述硬件加速卡對所述壓縮塊進(jìn)行壓縮,并將壓縮后的數(shù)據(jù)寫到數(shù)據(jù)流中。優(yōu)選地,所述預(yù)設(shè)值取64KB。進(jìn)ー步地,所述上層應(yīng)用使用所述硬件加速卡從數(shù)據(jù)流中讀取數(shù)據(jù)的過程包括所述數(shù)據(jù)流內(nèi)部有一個(gè)緩沖區(qū),用于緩存已解壓縮數(shù)據(jù),如果所述緩沖區(qū)不為空,將所述已解壓縮數(shù)據(jù)發(fā)送至所述上層應(yīng)用,如果所述緩沖區(qū)為空,則從所述數(shù)據(jù)流中讀取ー個(gè)壓縮數(shù)據(jù)塊,調(diào)用所述硬件加速卡對所述壓縮數(shù)據(jù)塊進(jìn)行解壓縮,并將解壓縮后的數(shù)據(jù)存至所述緩沖區(qū)中。本發(fā)明技術(shù)方案的優(yōu)勢在于在大型分布式文件系統(tǒng)上采用PCI接ロ的硬件加速卡來完成數(shù)據(jù)壓縮或解壓縮,過程中只消耗少量系統(tǒng)資源,可以卸載傳統(tǒng)壓縮方法所消耗的大量CPU資源;數(shù)據(jù)的壓縮或解壓縮對于用戶是完全透明的,上層應(yīng)用無需做任何改動(dòng),并且無論是寫入或讀取數(shù)據(jù),都可以提高磁盤和網(wǎng)絡(luò)I/o的有效帶寬;采用分片式壓縮格式,將文件分成大小為64KB的分片,能達(dá)到較好的壓縮效果,而且對于硬件加速卡只需要很小的緩存就能實(shí)現(xiàn)壓縮;在硬件加速卡出現(xiàn)故障時(shí),壓縮方法庫能夠切換到軟件方式進(jìn)行壓縮或解壓縮, 具有良好的容錯(cuò)機(jī)制;分布式文件系統(tǒng)的上層應(yīng)用可獨(dú)立使用硬件加速卡創(chuàng)建輸入流或輸出流,用以封裝原有的輸入流或輸出流,能方便地對數(shù)據(jù)進(jìn)行壓縮或解壓縮。
圖1是本發(fā)明具體實(shí)施例一提供的ー種分布式文件系統(tǒng)上基于硬件加速卡的壓縮解壓縮方法的系統(tǒng)結(jié)構(gòu)示意圖;圖2是本發(fā)明具體實(shí)施例一提供的分布式文件系統(tǒng)上基于硬件加速卡的壓縮解壓縮方法的數(shù)據(jù)寫入流程示意圖;圖3是本發(fā)明具體實(shí)施例一提供的客戶端調(diào)用硬件加速卡壓縮數(shù)據(jù)流程示意圖;圖4是本發(fā)明具體實(shí)施例一提供的分布式文件系統(tǒng)上基于硬件加速卡的壓縮解壓縮方法的文件塊格式示意圖;圖5是本發(fā)明具體實(shí)施例一提供的分布式文件系統(tǒng)上基于硬件加速卡的壓縮解壓縮方法的數(shù)據(jù)讀取流程示意圖;圖6是本發(fā)明具體實(shí)施例ニ提供的另ー種分布式文件系統(tǒng)上基于硬件加速卡的壓縮解壓縮方法的系統(tǒng)結(jié)構(gòu)示意圖;圖7是本發(fā)明具體實(shí)施例ニ提供的上層應(yīng)用壓縮數(shù)據(jù)流程示意圖;圖8是本發(fā)明具體實(shí)施例ニ提供的上層應(yīng)用解壓縮數(shù)據(jù)流程示意圖。
具體實(shí)施例方式下面結(jié)合附圖并通過具體實(shí)施方式
來進(jìn)ー步說明本發(fā)明的技術(shù)方案。實(shí)施例一本實(shí)施例基于Apache HDFSCHadoop DistributedFile System,分布式文件系統(tǒng))實(shí)現(xiàn)基于硬件加速卡的壓縮原型,HDFS為Google GFS的開源實(shí)現(xiàn),是Hadoop生態(tài)圈各項(xiàng)目的基礎(chǔ)。HDFS上層應(yīng)用使用客戶端來寫入或讀取文件。HDFS中一個(gè)文件會(huì)被分成多個(gè)大小相同的文件,最后ー個(gè)文件塊的大小可能比其它的文件塊小。屬于同一個(gè)文件的不同文件塊可能存儲(chǔ)在不同的數(shù)據(jù)節(jié)點(diǎn)上,且每個(gè)數(shù)據(jù)塊在數(shù)據(jù)節(jié)點(diǎn)中共有3個(gè)副本。參見圖1,ー種分布式文件系統(tǒng)上基于硬件加速卡的壓縮解壓縮方法的系統(tǒng)結(jié)構(gòu)示意圖。本實(shí)施例提供的壓縮解壓縮方法是通過調(diào)用硬件加速卡,來完成對文件塊的壓縮或解壓縮,其壓縮或解壓縮過程工作在客戶端與數(shù)據(jù)節(jié)點(diǎn)。該方法在硬件加速卡之上實(shí)現(xiàn)了一個(gè)壓縮方法庫。壓縮方法庫包括各種壓縮解壓縮算法和驅(qū)動(dòng)程序,具有壓縮和解壓縮兩個(gè)接ロ,兩個(gè)接ロ的參數(shù)均包括輸入緩沖區(qū)和輸出緩沖區(qū),方便應(yīng)用使用硬件加速卡。壓縮方法庫將壓縮或解壓縮算法經(jīng)所述用戶層編程接ロ接入,調(diào)用驅(qū)動(dòng)程序,經(jīng)所述用戶層編程接ロ驅(qū)動(dòng)硬件加速卡,將數(shù)據(jù)送往硬件加速卡的緩存,由硬件加速卡完成對數(shù)據(jù)的壓縮或解壓縮,操作完成后再從硬件加速卡的緩存讀回?cái)?shù)據(jù)。由此可見,壓縮方法庫通過調(diào)用驅(qū)動(dòng)程序來驅(qū)動(dòng)硬件加速卡,完成數(shù)據(jù)的壓縮或解壓縮。硬件加速卡米用PCI(Peripheral ComponentInterconnect,外設(shè)互聯(lián)接ロ)接ロ,能在普通的商用機(jī)器上使用,通過將壓縮方法庫中的壓縮算法經(jīng)用戶層編程接ロ接入,以硬件的方式實(shí)現(xiàn)對特定內(nèi)存緩沖區(qū)中的數(shù)據(jù)進(jìn)行壓縮或解壓縮的功能。硬件加速卡上配備有多個(gè)處理芯片,每個(gè)芯片可以單獨(dú)進(jìn)行壓縮或解壓縮操作,因此支持同時(shí)執(zhí)行多個(gè)操作。各芯片由可編程邏輯器件構(gòu)成。參見圖2,分布式文件系統(tǒng)上基于硬件加速卡的壓縮解壓縮方法的數(shù)據(jù)寫入流程示意圖。當(dāng)客戶端向數(shù)據(jù)節(jié)點(diǎn)寫入數(shù)據(jù)的過程如下101 :客戶端調(diào)用硬件加速卡對用戶數(shù)據(jù)進(jìn)行壓縮,生成壓縮后的多個(gè)分片。102 :客戶端將壓縮后的各分片發(fā)送至第一數(shù)據(jù)節(jié)點(diǎn)。103:第一數(shù)據(jù)節(jié)點(diǎn)更新塊文件和索引文件,并復(fù)制壓縮后的各分片,將其發(fā)送至第二數(shù)據(jù)節(jié)點(diǎn)。104:第二數(shù)據(jù)節(jié)點(diǎn)更新塊文件和索引文件,并復(fù)制壓縮后的各分片,將其發(fā)送至第三數(shù)據(jù)節(jié)點(diǎn)。105 :第三數(shù)據(jù)節(jié)點(diǎn)更新塊文件和索引文件。其中,步驟101中客戶端調(diào)用硬件加速卡對用戶數(shù)據(jù)進(jìn)行壓縮的過程,參見圖3,具體步驟如下201 :當(dāng)客戶端緩存的用戶數(shù)據(jù)大小達(dá)到ー個(gè)文件塊大小時(shí),客戶端將用戶數(shù)據(jù)進(jìn)行分片,各分片大小要適中,以便能夠達(dá)到較好的壓縮效果,而且對于硬件加速卡只需要很小的緩存就能實(shí)現(xiàn)壓縮或解壓縮。優(yōu)選的各分片大小采用64KB。202:客戶端將各分片送入壓縮方法庫壓縮接ロ的輸入緩沖區(qū),壓縮方法庫調(diào)用驅(qū)動(dòng)程序來驅(qū)動(dòng)硬件加速卡,硬件加速卡完成對各分片的壓縮過程,并將壓縮后的各分片送入壓縮方法庫壓縮接ロ的輸出緩沖區(qū)。203 :客戶端從壓縮方法庫壓縮接ロ的輸出緩沖區(qū)讀回壓縮后的各分片。另外,步驟103、104、105中數(shù)據(jù)節(jié)點(diǎn)更新塊文件和索引文件,具體的過程為數(shù)據(jù)節(jié)點(diǎn)順序存儲(chǔ)壓縮后的各分片至壓縮塊文件中,在維護(hù)原有索引的基礎(chǔ)上另外維護(hù)ー個(gè)索引文件,新維護(hù)的索引文件按各分片在文件塊原始文件中的順序,記錄各分片在壓縮塊文件中的位置,根據(jù)索引文件能夠快速定位特定分片。圖4是本實(shí)施例提供的分布式文件系統(tǒng)上基于硬件加速卡的壓縮解壓縮方法的文件塊格式示意圖。當(dāng)客戶端未對用戶數(shù)據(jù)進(jìn)行壓縮吋,HDFS數(shù)據(jù)節(jié)點(diǎn)保存的是未壓縮塊,包括塊文件和元文件。元文件是用于描述要素、數(shù)據(jù)集或數(shù)據(jù)集系列的內(nèi)容、覆蓋范圍、管理方式等有關(guān)信息。當(dāng)客戶端使用硬件加速卡對用戶數(shù)據(jù)進(jìn)行壓縮時(shí),HDFS數(shù)據(jù)節(jié)點(diǎn)保存的是壓縮塊,壓縮塊包括壓縮塊文件、索引文件、元文件。壓縮塊文件由順序存儲(chǔ)的壓縮分片構(gòu)成,每個(gè)壓縮分片包括頭部信息和壓縮數(shù)據(jù),頭部信息包括原始數(shù)據(jù)大小、壓縮數(shù)據(jù)大小、壓縮算法類型。根據(jù)各壓縮分片的頭部信息,可以按壓縮算法類型對數(shù)據(jù)進(jìn)行解壓縮。根據(jù)原始數(shù)據(jù)大小這個(gè)信息,很容易計(jì)算出當(dāng)前分片在文件塊原始文件中的起始位置。索引文件由各分片索引構(gòu)成,所述各分片索引記錄著各壓縮分片在壓縮塊文件中的偏移量和長度。參見圖5,分布式文件系統(tǒng)上基于硬件加速卡的壓縮解壓縮方法的數(shù)據(jù)讀取流程示意圖。當(dāng)客戶端從數(shù)據(jù)節(jié)點(diǎn)讀取數(shù)據(jù)時(shí),具體過程如下301 :在數(shù)據(jù)節(jié)點(diǎn)上尋找保存讀取數(shù)據(jù)的壓縮塊文件,并將找到的讀取數(shù)據(jù)壓縮塊文件中的各分片發(fā)送至客戶端。其中,數(shù)據(jù)節(jié)點(diǎn)根據(jù)讀取數(shù)據(jù)在文件塊原始文件中的偏移位置和長度,在新維護(hù)的索引文件中找到讀取數(shù)據(jù)在壓縮塊文件中的起始位置,最終尋找到保存讀取數(shù)據(jù)的各分片。例如現(xiàn)有ー個(gè)IMB大小的原始文件,要讀取從256KB位置開始的16KB數(shù)據(jù),由于每個(gè)未壓縮分片大小為64KB,可知要讀取的數(shù)據(jù)在第5個(gè)分片中。在壓縮塊文件中首先讀出第I個(gè)壓縮分片的頭部信息,然后跳過壓縮數(shù)據(jù)部分,定位到第2個(gè)分片的起始位置,依此類推,直到定位到第5個(gè)分片,讀出第5個(gè)分片的壓縮數(shù)據(jù),將數(shù)據(jù)解壓縮后從中讀出16KB的數(shù)據(jù)。302:客戶端接收讀取數(shù)據(jù)壓縮塊文件中的各分片,并將各分片送入壓縮方法庫解壓縮接ロ的輸入緩沖區(qū),壓縮方法庫調(diào)用驅(qū)動(dòng)程序來驅(qū)動(dòng)硬件加速卡,驅(qū)動(dòng)硬件加速卡完成對各分片的解壓縮過程,并將解壓縮后的各分片送入壓縮方法庫解壓縮接ロ的輸出緩沖區(qū)。303:客戶端從解壓縮接ロ的輸出緩沖區(qū)讀回解壓縮后的各分片,并對各解分片按順序組合成完整的請求數(shù)據(jù)文件塊,將其發(fā)送至上層應(yīng)用。上述基于分片的頭部信息,能夠有效完成ー些操作。在分布式文件系統(tǒng)中,經(jīng)常會(huì)遇到需要把一個(gè)大文件分割成多個(gè)小文件或在一個(gè)大文件中隨機(jī)讀取一部分?jǐn)?shù)據(jù)的情況。在對大文件進(jìn)行數(shù)據(jù)切分或隨機(jī)讀操作時(shí),只需讀取壓縮分片的頭部信息,獲取分片壓縮后的數(shù)據(jù)大小,然后跳過壓縮數(shù)據(jù)部分,經(jīng)過多次重復(fù)操作,定位到大文件指定位置。在此過程中,不必讀取壓縮數(shù)據(jù),也不需要解壓縮數(shù)據(jù),減少了很多I/O操作,増加了靈活性。當(dāng)壓縮方法庫通過驅(qū)動(dòng)程序驅(qū)動(dòng)硬件加速卡,以硬件的方式對數(shù)據(jù)進(jìn)行壓縮或解壓縮時(shí),如果發(fā)現(xiàn)所述硬件加速卡出現(xiàn)故障,壓縮方法庫將采用軟件方式對數(shù)據(jù)進(jìn)行壓縮和解壓縮,完成與硬件加速卡同樣的處理結(jié)果。本實(shí)施例基于硬件加速卡的壓縮原型采用hadoop-0. 20. 2作為代碼基礎(chǔ),采用Java語言實(shí)現(xiàn)。本實(shí)施例的優(yōu)勢在于1、借助硬件加速卡,壓縮或解壓縮過程只占用少量CPU資源,壓縮處理吞吐率高于磁盤I/O帶寬,相比傳統(tǒng)采用軟件方式的壓縮解壓縮方法所節(jié)省的系統(tǒng)資源可用于其它處理過程。2、于目前測試效果看來,對于真實(shí)的數(shù)據(jù),壓縮比大約為25%左右,有效降低了存儲(chǔ)開銷,將磁盤的有效帶寬提高了 4到5倍;3、壓縮解壓縮工作在HDFS的客戶端和數(shù)據(jù)節(jié)點(diǎn),對上層應(yīng)用完全透明,因此基于HDFS的在線或離線數(shù)據(jù)分析系統(tǒng),例如HBase、Hive等,均可方便使用數(shù)據(jù)壓縮,無需做任何改動(dòng),并且可以減少客戶端與數(shù)據(jù)節(jié)點(diǎn)、數(shù)據(jù)節(jié)點(diǎn)之間的數(shù)據(jù)傳輸量。4、在HDFS中對壓縮后的分片進(jìn)行切分或隨機(jī)讀操作時(shí),只需要讀出壓縮分片的頭部信息,跳過真實(shí)的壓縮數(shù)據(jù)部分,從而減少IO操作。5、在硬件加速卡出現(xiàn)故障不能使用時(shí),壓縮方法庫采用軟件方式來完成同樣的處理過程,形成了良好的容錯(cuò)機(jī)制。實(shí)施例ニ·
參見圖6,另ー種分布式系統(tǒng)上基于硬件加速卡的壓縮解壓縮方法的系統(tǒng)結(jié)構(gòu)示意圖。本實(shí)施例是對實(shí)施例一的進(jìn)ー步延伸,硬件加速卡除了用于HDFS的客戶端與數(shù)據(jù)節(jié)點(diǎn)上之外,還可用于上層應(yīng)用。對于HDFS上層應(yīng)用,例如分布式數(shù)據(jù)庫、分布式數(shù)據(jù)倉庫、MapReduce框架及其它需要數(shù)據(jù)存儲(chǔ)的應(yīng)用,可獨(dú)立的調(diào)用硬件加速卡,以數(shù)據(jù)流的形式對數(shù)據(jù)進(jìn)行壓縮或解壓縮,然后將處理后的數(shù)據(jù)存儲(chǔ)在分布式文件系統(tǒng)、本地文件系統(tǒng)、在網(wǎng)絡(luò)上進(jìn)行傳輸或用于其它用途。壓縮方法庫通過驅(qū)動(dòng)程序驅(qū)動(dòng)硬件加速卡進(jìn)行壓縮或解壓縮,可以創(chuàng)建數(shù)據(jù)輸入流和輸出流,數(shù)據(jù)的流式寫入具有只追加數(shù)據(jù)、沒有隨機(jī)寫的特征,該特征有利于簡化數(shù)據(jù)壓縮。上層應(yīng)用在調(diào)用硬件加速卡壓縮數(shù)據(jù)時(shí)會(huì)創(chuàng)建ー個(gè)數(shù)據(jù)輸出流,該流封裝了原來的輸出流。參見圖7,上層應(yīng)用壓縮數(shù)據(jù)流程示意圖。上層應(yīng)用往數(shù)據(jù)流中寫壓縮數(shù)據(jù)時(shí),具體過程如下401 :上層應(yīng)用緩存數(shù)據(jù),如果緩存數(shù)據(jù)的大小超過64KB,每64KB大小的數(shù)據(jù)作為ー個(gè)數(shù)據(jù)塊;402:上層應(yīng)用將各數(shù)據(jù)塊送入壓縮方法庫壓縮接ロ的輸入緩沖區(qū),壓縮方法庫調(diào)用驅(qū)動(dòng)程序來驅(qū)動(dòng)硬件加速卡,驅(qū)動(dòng)硬件加速卡完成對各數(shù)據(jù)塊的壓縮過程,生成各壓縮分塊;403 :上層應(yīng)用將各壓縮分塊寫到原來的輸出流;上層應(yīng)用在使用硬件加速卡解壓縮數(shù)據(jù)時(shí)會(huì)創(chuàng)建ー個(gè)數(shù)據(jù)輸入流,該流封裝了原來的輸入流。參見圖8,上層應(yīng)用解壓縮數(shù)據(jù)流程示意圖。上層應(yīng)用從數(shù)據(jù)流中讀取壓縮數(shù)據(jù)時(shí),具體過程如下501 :原來輸入流內(nèi)部的緩沖區(qū)緩存已解壓縮的數(shù)據(jù)。502 :上層應(yīng)用從數(shù)據(jù)輸入流讀取數(shù)據(jù)時(shí),判斷緩沖區(qū)是否為空。503 :如果緩沖區(qū)不為空,將緩沖區(qū)中的數(shù)據(jù)返回至上層應(yīng)用。504:如果緩沖區(qū)為空,則上層應(yīng)用從原來的輸入流中讀取ー個(gè)壓縮塊,壓縮方法庫通過驅(qū)動(dòng)程序驅(qū)動(dòng)硬件加速卡,對壓縮塊進(jìn)行解壓縮,并將解壓縮后的數(shù)據(jù)存在緩沖區(qū)中,返回步驟502。關(guān)于硬件加速卡、壓縮方法庫更加詳細(xì)的描述,可以參見實(shí)施例一,這里不再贅述。對于原來就啟用壓縮的上層應(yīng)用,只需做出少量改動(dòng),使用硬件加速卡替換原來的壓縮器,即可完成壓縮算法的切換。在應(yīng)用中根據(jù)配置來選擇對應(yīng)的壓縮方式,可以避免切換壓縮方式時(shí)重新編譯代碼。本實(shí)施例提供的壓縮解壓縮方法除在分布式系統(tǒng)上使用硬件加速卡外,對上層應(yīng)用還提供了 一個(gè)硬件加速卡,上層應(yīng)用可調(diào)用硬件加速卡,創(chuàng)建輸入流或輸出流,用以封裝原有的輸入流或輸出流,能方便地對數(shù)據(jù)進(jìn)行壓縮或解壓縮。本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例的全部或部分步驟可以通過硬件來完成,也可以通過程序來指令相關(guān)的硬件完成,所述的程序可以存儲(chǔ)于ー種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,上述提到的存儲(chǔ)介質(zhì)可以是只讀存儲(chǔ)器,磁盤或光盤等。以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種分布式文件系統(tǒng)上基于硬件加速卡的壓縮解壓縮方法,其特征在于,所述方法包括 分布式文件系統(tǒng)中的客戶端向數(shù)據(jù)節(jié)點(diǎn)寫入數(shù)據(jù)時(shí)所述客戶端將文件塊分成多個(gè)分片,調(diào)用硬件加速卡對各分片進(jìn)行壓縮,再將壓縮后的各分片發(fā)送至所述數(shù)據(jù)節(jié)點(diǎn);所述數(shù)據(jù)節(jié)點(diǎn)將所述壓縮后的各分片存儲(chǔ)至壓縮塊文件中,并更新所述數(shù)據(jù)節(jié)點(diǎn)中的索引文件; 分布式文件系統(tǒng)中的客戶端從數(shù)據(jù)節(jié)點(diǎn)讀取數(shù)據(jù)時(shí)所述數(shù)據(jù)節(jié)點(diǎn)找到保存讀取數(shù)據(jù)的壓縮塊文件;所述客戶端取回包含所述讀取數(shù)據(jù)的各分片,調(diào)用所述硬件加速卡對所述各分片進(jìn)行解壓縮,并組合解壓縮后的各分片,將組合后的解壓縮數(shù)據(jù)發(fā)送至上層應(yīng)用。
2.根據(jù)權(quán)利要求1所述的分布式文件系統(tǒng)上基于硬件加速卡的壓縮解壓縮方法,其特征在于,所述各分片為64KB大小的數(shù)據(jù)。
3.根據(jù)權(quán)利要求1所述的分布式文件系統(tǒng)上基于硬件加速卡的壓縮解壓縮方法,其特征在于,所述硬件加速卡采用PCI接口; 所述硬件加速卡利用一個(gè)壓縮方法庫,實(shí)現(xiàn)對特定內(nèi)存緩沖區(qū)中的數(shù)據(jù)進(jìn)行壓縮或解壓縮的功能; 所述硬件加速卡上配備有多個(gè)處理芯片,每個(gè)芯片可單獨(dú)進(jìn)行壓縮或解壓縮操作,所述芯片由可編程邏輯器件構(gòu)成; 其中,所述壓縮方法庫包括各種壓縮解壓縮算法和驅(qū)動(dòng)程序,具有壓縮和解壓縮兩個(gè)接口,兩個(gè)接口的參數(shù)均包括輸入緩沖區(qū)和輸出緩沖區(qū)。
4.根據(jù)權(quán)利要求3所述的分布式文件系統(tǒng)上基于硬件加速卡的壓縮解壓縮方法,其特征在于,所述硬件加速卡利用一個(gè)壓縮方法庫,實(shí)現(xiàn)對特定內(nèi)存緩沖區(qū)中的數(shù)據(jù)進(jìn)行壓縮或解壓縮的功能包括所述壓縮方法庫將壓縮或解壓縮算法經(jīng)所述用戶層編程接口接入;調(diào)用驅(qū)動(dòng)程序,經(jīng)所述用戶層編程接口驅(qū)動(dòng)硬件加速卡,完成對特定內(nèi)存緩沖區(qū)中的數(shù)據(jù)壓縮或解壓縮功能。
5.根據(jù)權(quán)利要求4所述的分布式文件系統(tǒng)上基于硬件加速卡的壓縮解壓縮方法,其特征在于,所述調(diào)用所述硬件加速卡對各分片進(jìn)行壓縮包括所述客戶端將所述各分片送入所述壓縮方法庫壓縮接口的輸入緩沖區(qū),所述壓縮方法庫驅(qū)動(dòng)所述硬件加速卡,所述硬件加速卡完成對所述各分片的壓縮過程,并將壓縮后的所述各分片送入所述壓縮方法庫壓縮接口的輸出緩沖區(qū)。
6.根據(jù)權(quán)利要求4所述的分布式文件系統(tǒng)上基于硬件加速卡的壓縮解壓縮方法,其特征在于,所述調(diào)用所述硬件加速卡對所述各分片進(jìn)行解壓縮包括所述客戶端將所述各分片送入所述壓縮方法庫解壓縮接口的輸入緩沖區(qū),所述壓縮方法庫驅(qū)動(dòng)所述硬件加速卡,所述硬件加速卡完成對所述各分片的解壓縮過程,并將解壓縮后的所述各分片送入所述壓縮方法庫解壓縮接口的輸出緩沖區(qū)。
7.根據(jù)權(quán)利要求3-6任一所述的,分布式文件系統(tǒng)上基于硬件加速卡的壓縮解壓縮方法,其特征在于,所述壓縮方法庫在對數(shù)據(jù)進(jìn)行壓縮或解壓縮時(shí),如果發(fā)現(xiàn)所述硬件加速卡出現(xiàn)故障,將采用軟件方式對數(shù)據(jù)進(jìn)行壓縮或解壓縮。
8.根據(jù)權(quán)利要求1所述的分布式文件系統(tǒng)上基于硬件加速卡的壓縮解壓縮方法,其特征在于,所述壓縮后的分片信息包括頭部信息和壓縮數(shù)據(jù),所述頭部信息包括原始數(shù)據(jù)大小、壓縮數(shù)據(jù)大小、壓縮算法類型。
9.根據(jù)權(quán)利要求1所述的分布式文件系統(tǒng)上基于硬件加速卡的壓縮解壓縮方法,其特征在于,所述數(shù)據(jù)節(jié)點(diǎn)將所述壓縮后的各分片存儲(chǔ)至壓縮塊文件中,并更新所述數(shù)據(jù)節(jié)點(diǎn)的索引文件包括所述數(shù)據(jù)節(jié)點(diǎn)按順序?qū)⑺鰤嚎s后的各分片寫到壓縮塊文件中,并另外維護(hù)一個(gè)索引文件; 其中所述索引文件按所述各分片在文件塊原始文件中的順序,記錄所述各分片在壓縮塊文件中的位置偏移量和長度。
10.根據(jù)權(quán)利要求1所述的分布式文件系統(tǒng)上基于硬件加速卡的壓縮解壓縮方法,其特征在于,所述數(shù)據(jù)節(jié)點(diǎn)找到保存讀取數(shù)據(jù)的壓縮塊文件包括所述數(shù)據(jù)節(jié)點(diǎn)根據(jù)所述讀取數(shù)據(jù)在文件塊原始文件中的偏移位置和長度,在所述索引文件中找到所述讀取數(shù)據(jù)在壓縮塊文件中的位置。
11.根據(jù)權(quán)利要求1所述的分布式文件系統(tǒng)上基于硬件加速卡的壓縮解壓縮方法,其特征在于,所述分布式文件系統(tǒng)的上層應(yīng)用可獨(dú)立使用所述硬件加速卡以數(shù)據(jù)流的形式對數(shù)據(jù)進(jìn)行壓縮或解壓縮。
12.根據(jù)權(quán)利要求11所述的分布式文件系統(tǒng)上基于硬件加速卡的壓縮解壓縮方法,其特征在于,所述上層應(yīng)用使用所述硬件加速卡向數(shù)據(jù)流中寫入數(shù)據(jù)的過程包括所述上層應(yīng)用先對需要寫入的數(shù)據(jù)進(jìn)行緩存,如果緩存數(shù)據(jù)的大小超過預(yù)設(shè)值,將所述預(yù)設(shè)值大小的數(shù)據(jù)作為一個(gè)壓縮塊,調(diào)用所述硬件加速卡對所述壓縮塊進(jìn)行壓縮,并將壓縮后的數(shù)據(jù)寫到數(shù)據(jù)流中。
13.根據(jù)權(quán)利要求11所述的分布式文件系統(tǒng)上基于硬件加速卡的壓縮解壓縮方法,其特征在于,所述預(yù)設(shè)值取64KB。
14.根據(jù)權(quán)利要求11所述的分布式文件系統(tǒng)上基于硬件加速卡的壓縮解壓縮方法,其特征在于,所述上層應(yīng)用使用所述硬件加速卡從數(shù)據(jù)流中讀取數(shù)據(jù)的過程包括所述數(shù)據(jù)流內(nèi)部有一個(gè)緩沖區(qū),用于緩存已解壓縮數(shù)據(jù),如果所述緩沖區(qū)不為空,將所述已解壓縮數(shù)據(jù)發(fā)送至所述上層應(yīng)用,如果所述緩沖區(qū)為空,則從所述數(shù)據(jù)流中讀取一個(gè)壓縮數(shù)據(jù)塊,調(diào)用所述硬件加速卡對所述壓縮數(shù)據(jù)塊進(jìn)行解壓縮,并將解壓縮后的數(shù)據(jù)存至所述緩沖區(qū)中。
全文摘要
本發(fā)明公開了一種分布式文件系統(tǒng)上基于硬件加速卡的壓縮解壓縮方法,屬于分布式文件系統(tǒng)技術(shù)領(lǐng)域。該技術(shù)包括客戶端向數(shù)據(jù)節(jié)點(diǎn)寫數(shù)據(jù)時(shí),先將文件塊進(jìn)行分片,再經(jīng)硬件加速卡對分片進(jìn)行壓縮,將壓縮后的分片發(fā)送至數(shù)據(jù)節(jié)點(diǎn);客戶端從數(shù)據(jù)節(jié)點(diǎn)讀取數(shù)據(jù)時(shí),先從數(shù)據(jù)節(jié)點(diǎn)取回包含讀取數(shù)據(jù)的各分片,調(diào)用硬件加速卡對各分片解壓縮并組合,將組合后的數(shù)據(jù)發(fā)送至上層應(yīng)用。上層應(yīng)用可獨(dú)立使用硬件加速卡以數(shù)據(jù)流的形式對數(shù)據(jù)進(jìn)行壓縮或解壓縮。本發(fā)明提出的技術(shù)在分布式文件系統(tǒng)和上層應(yīng)用中使用硬件加速卡,只需要很小的緩存就能實(shí)現(xiàn)數(shù)據(jù)壓縮或解壓縮,可以卸載傳統(tǒng)壓縮方法所消耗的大量CPU資源,并且對系統(tǒng)的用戶而言完全透明。
文檔編號(hào)G06F17/30GK103020205SQ201210518038
公開日2013年4月3日 申請日期2012年12月5日 優(yōu)先權(quán)日2012年12月5日
發(fā)明者劉佳, 胡肖, 查禮 申請人:北京普澤天璣數(shù)據(jù)技術(shù)有限公司