鄧杰銘 王榆心 張柯匯 王彥青 賓茂梨
摘 要:針對海量數(shù)據(jù)分布式序列數(shù)據(jù)量大、增長速度快、序列重復(fù)性高等特點(diǎn),結(jié)合HBase分布式數(shù)據(jù)庫的相關(guān)理論和技術(shù)提出并實(shí)現(xiàn)了一套基于HBase的海量數(shù)據(jù)分布式序列存儲方案。該方案設(shè)計(jì)了基于分布式數(shù)據(jù)分類碼的預(yù)分區(qū)和行鍵優(yōu)化策略,解決了服務(wù)器的均衡負(fù)載問題。通過構(gòu)造文件索引替代二進(jìn)制碼序列實(shí)現(xiàn)了數(shù)據(jù)的高效存取。利用HBase協(xié)處理器實(shí)現(xiàn)了分布式序列記錄單次提交多表插入的功能,提升了分布式多格式存儲的效率。實(shí)驗(yàn)表明,通過上述方案設(shè)計(jì)的分布式序列存儲系統(tǒng)具有良好的存儲能力和擴(kuò)展性。
關(guān)鍵詞:HBase;分布式序列;分類碼;文件索引;協(xié)處理器
0 引言
在海量數(shù)據(jù)存儲方案中,以hadoop[1]分布式文件系統(tǒng)hdfs為基礎(chǔ)的HBase數(shù)據(jù)庫經(jīng)過不斷的發(fā)展完善得到了更加廣泛的應(yīng)用,特別以Facebook Message 系統(tǒng)對HBase 的應(yīng)用為世界知名。HBase 本身作為谷歌公司Bigtable的開源實(shí)現(xiàn),除了具有分布式、版本化、可擴(kuò)展性的特征外,它與分布式計(jì)算框架如mapreduce? 和spa-rk 等具有良好的結(jié)合性,這對于大數(shù)據(jù)量的科研工作非常便捷。本文以海量數(shù)據(jù)存儲方式作為研究對象,結(jié)合當(dāng)前分布式序列文件存儲格式的特點(diǎn),設(shè)計(jì)了基于HBase的分布式序列存儲系統(tǒng),利用基于數(shù)據(jù)分類碼的預(yù)分區(qū)行鍵設(shè)計(jì)策略和協(xié)處理器機(jī)制對該系統(tǒng)進(jìn)行優(yōu)化,并通過實(shí)驗(yàn)驗(yàn)證該系統(tǒng)的可行性。
1 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
1.1 數(shù)據(jù)表設(shè)計(jì)
對HBase表進(jìn)行設(shè)計(jì)時(shí),列族數(shù)量不宜過多,因?yàn)镠Base 表的列族對應(yīng)于 HBase 物理存儲結(jié)構(gòu) Store,當(dāng)Store中的memstore達(dá)到flushing閥值時(shí)會(huì)觸發(fā)所有列族的flushing操作,所以列族數(shù)量盡量控制在1到2個(gè)。根據(jù) HBase 表設(shè)計(jì)相關(guān)原則,對GBFF格式和FASTA格式應(yīng)分別建表,兩表都只設(shè)置一個(gè)列族Column Family,在設(shè)計(jì)相應(yīng)列名Column Qua-lifier時(shí),特別針對GBFF格式文件第二部分特性FEA-TURES中包含多個(gè)子屬性的結(jié)構(gòu),列名需將FEATURES作為前綴與子屬性結(jié)合,如“FEATURES_source”這種形式,這樣可以滿足表中只存在一個(gè)列族的設(shè)計(jì)要求。
1.2 針對序列數(shù)據(jù)的預(yù)分區(qū)和行健優(yōu)化策略
行鍵Rowkey 是HBase 數(shù)據(jù)表的主鍵,Rowkey[2] 的唯一性標(biāo)示行記錄的唯一性。由于HBase數(shù)據(jù)庫只維護(hù)了主鍵Rowkey的索引,所以對Rowkey的設(shè)計(jì)直接影響數(shù)據(jù)的查詢和整個(gè)集群的region分配,本系統(tǒng)設(shè)計(jì)方案中選取分布式序列記錄檢索號(ACCESSION)作為行鍵Rowkey的主要組成部分。在HBase中以檢索號AC-CESSION作為行鍵Rowkey,由于Rowkey的排序默認(rèn)字典序升序,雖然對于scan操作效率很高,但是同樣易造成之前所述的局部熱點(diǎn)問題? ,因此對于每一條分布式序列記錄,提出一種結(jié)合預(yù)分區(qū)機(jī)制的行鍵生成策略。
(1) 設(shè)預(yù)分區(qū)Region數(shù)為N,當(dāng)前分布式序列所屬分類碼Division[3]下的分布式序列數(shù)據(jù)量占比為A i ,由此可得該分類碼所需的region數(shù)D i =N·A i ;
(2) 當(dāng)前分布式序列檢索號ACCESSION中的整數(shù)部分對D i 取模得到值S,將分類碼與整數(shù)值S拼接得到字符串prefix。
(3) 對字符串prefix 做MD5哈希生成16位字符串prefixMD5,將字符串 prefixMD5 前 7 位與檢索號 AC-CESSION拼接為16位Rowkey。
上述操作完成后即生成所需行鍵Rowkey,例如檢索號為AB000100的分布式序列,其所屬分類碼為BCT,取模值為1,對應(yīng)的Rowkey為“74378dc_ AB000100”。
1.3 協(xié)處理器優(yōu)化
本文利用HBase協(xié)處理器Coprocessor實(shí)現(xiàn)單次提交多表插入的功能來解決上述問題。HBase提供了一套完整的Coprocessor[4]開發(fā)接口,采用java語言封裝,主要有三種可供實(shí)現(xiàn)的協(xié)處理器:Co-processor、RegionObserver 和 Endpoint。RegionObse-rver給出了HBase表相關(guān)操作的鉤子函數(shù)。
2實(shí)驗(yàn)結(jié)果與分析
查詢性能比較基于4臺服務(wù)器共200個(gè)并發(fā)線程的環(huán)境下進(jìn)行,從表中可以看出在大數(shù)據(jù)量查詢時(shí),優(yōu)化方案性能優(yōu)勢非常明顯.
3 結(jié)束語
本文針對海量數(shù)據(jù)分布式序列多年來快速增長導(dǎo)致的存儲維護(hù)問題,以海量數(shù)據(jù)分布式序列為研究對象,對分布式序列數(shù)據(jù)的組成結(jié)構(gòu)和當(dāng)前主流的 GBFF 和FASTA序列文件存儲格式進(jìn)行研究分析,結(jié)合HBase數(shù)據(jù)庫的存儲模型和HBase分布式存儲的相關(guān)特性,對分布式序列在HBase數(shù)據(jù)庫中的存儲進(jìn)行多維度的優(yōu)化。實(shí)驗(yàn)結(jié)果表明經(jīng)過優(yōu)化設(shè)計(jì)的分布式序列存儲方案具有更好的存儲和查詢掃描性能,同時(shí)該方案可以把分布式序列數(shù)據(jù)與基于hadoop的大數(shù)據(jù)分析工具良好地耦合,使分布式序列的研究分析更加便捷,滿足了當(dāng)前云計(jì)算環(huán)境下對分布式序列數(shù)據(jù)高效存取的需求。未來的研究工作主要針對分布式序列數(shù)據(jù)的壓縮優(yōu)化和索引優(yōu)化以及對序列數(shù)據(jù)的版本控制。
參考文獻(xiàn):
[1] 王銘,田茂,趙鑫,等.基于Hadoop平臺的數(shù)據(jù)遷移方法研究實(shí)現(xiàn)[J].計(jì)算機(jī)測量與控制,2018,26(4):225-230.
[2] 鄭通,郭衛(wèi)斌,范貴生.HDFS中海量小文件合并與預(yù)取優(yōu)化方法的研究[J].計(jì)算機(jī)科學(xué),2017,44(S2):516-519,541.
[3] 樊路遙,張晶,陳小龍,等.開源大數(shù)據(jù)框架在海洋信息處理中的應(yīng)用[J].科技導(dǎo)報(bào),2017,35(20):126-133.
[4] 周華平,劉光宗,張貝貝.基于索引偏移的MapReduce聚類負(fù)載均衡策略[J].計(jì)算機(jī)科學(xué),2018,45(5):303-309.
[5] 丁祥武,解書亮,李繼云.基于Spark的并行ETL[J].計(jì)算機(jī)工程與設(shè)計(jì),2017,38(9):2580-2585.