• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      HBase分布式二級索引通用方案研究

      2018-03-26 02:14:46周偉劉希陳浩
      軟件導(dǎo)刊 2018年3期
      關(guān)鍵詞:協(xié)處理器

      周偉 劉?!£惡?/p>

      摘要:二級索引方案是分布式存儲研究的重要分支之一,基于通用目標(biāo)設(shè)計二級索引方案可避免單一業(yè)務(wù)編程繁瑣問題,使實施人員更多地關(guān)注業(yè)務(wù)本身而非編程細(xì)節(jié)。以HBase數(shù)據(jù)庫為研究對象,引入分布式索引機制,通過重寫觀察者Observer協(xié)處理器方法,操作完數(shù)據(jù)后立即觸發(fā)創(chuàng)建或更新索引的請求,進一步在SolrCloud中完成對索引的管理。反向進行多條件組合查詢時,先在SolrCloud中查詢包含行鍵和索引列的文檔,再以行鍵為條件查詢并獲取HBase記錄。部署通用方案,實驗證明該方案很好地滿足了創(chuàng)建和維護HBase二級索引的要求,且保證了索引與記錄的一致性,對進一步研究分布式存儲二級索引方案有一定的指導(dǎo)意義。

      關(guān)鍵詞:分布式存儲;分布式索引;二級索引;協(xié)處理器;通用方案

      DOIDOI:10.11907/rjdk.171483

      中圖分類號:TP391

      文獻標(biāo)識碼:A文章編號文章編號:16727800(2018)003018704

      英文摘要Abstract:Secondary indexing scheme is an important branch of HBase database research. A scheme based on the general purpose will avoid programming against every single business detail, which helps the developers focus more on the business rather than the programming details. By overriding the methods of observer coprocessor, requests for creating indexes will be triggered after the records are stored in database, and then the indexes will be created and stored in SolrCloud which is a distributed indexer. Furthermore, documents of SolrCloud which contain both row keys and indexed columns can be filtered by a multiconditional query, and the target records will be fetched by the target row keys in the documents. Through deploying this scheme, it turns out that it completely meets the requirements of creating and maintaining secondary indexes of HBase and ensures the consistency between indexes and records. Whats more, the scheme referred in this paper has instructional significance for further study of HBase secondary indexing.

      英文關(guān)鍵詞Key Words:HBase; SolrCloud; secondary indexing; coprocessor; general schema

      0引言

      索引是一種特殊文件,存儲著數(shù)據(jù)表中所有記錄的引用指針,從邏輯上對記錄進行排序。索引通常建立在數(shù)據(jù)表的某些列上,在數(shù)據(jù)量不大時,有無合適的索引對記錄查找速度影響不大,隨著數(shù)據(jù)量的增加,查找性能會急劇下降,此時索引能加速查找過程。索引對數(shù)據(jù)庫的查詢速度至關(guān)重要,重構(gòu)索引是數(shù)據(jù)庫性能調(diào)優(yōu)的起點。傳統(tǒng)關(guān)系型數(shù)據(jù)庫支持二級索引(也稱多級索引),擴展了一級索引只針對單列構(gòu)建索引的特性,主要用于多條件組合查詢的場景。

      在大數(shù)據(jù)應(yīng)用中,作為一個分布式、可伸縮的列存儲數(shù)據(jù)庫,HBase表現(xiàn)出強大的生命力。HBase歸屬Hadoop生態(tài)系統(tǒng),利用Hadoop分布式文件系統(tǒng)存儲切片數(shù)據(jù),通過Hadoop MapReduce計算框架處理海量數(shù)據(jù),適用于聯(lián)機分析處理和數(shù)據(jù)挖掘的場景。HBase主要定義了一個四維數(shù)據(jù)模型,分別為行鍵(rowkey)、列族(column family)、列修飾符(column qualifier)和版本(version)。HBase基于行鍵有序存儲,在查詢時使用行鍵十分高效,同時列修飾符可以被動態(tài)創(chuàng)建,適合應(yīng)對屬性不固定的半結(jié)構(gòu)化數(shù)據(jù)。然而HBase本身無法輕易建立二級多列索引(以下簡稱二級索引),隨著應(yīng)用業(yè)務(wù)復(fù)雜度的增加,單一行鍵滿足不了類似關(guān)系型數(shù)據(jù)庫多條件組合查詢、分頁等功能的要求。

      為了突破單一行鍵在復(fù)雜查詢上的限制,避免全表掃描,業(yè)界已有一些研究成果。朱夏等[1]基于多維數(shù)據(jù)檢索機制MIndex,實現(xiàn)了從復(fù)雜查詢請求到一維查詢鍵值的轉(zhuǎn)換,并保證了復(fù)雜查詢的高效性。丁飛等[2]基于HBase協(xié)處理器,通過倒排索引實現(xiàn)了第二索引擴展功能。徐熙超等[3]提出HBase4M架構(gòu),利用協(xié)處理器建立和維護輔助索引,將字段查詢轉(zhuǎn)化為索引表的行鍵查詢。葛微等[4]提出的分層式非主鍵索引方案中,在組合查詢時也會轉(zhuǎn)換成索引表主鍵的查詢。上述研究需要巧妙地設(shè)計索引表的行鍵,通過將多個查詢條件鍵值對映射到行鍵的方式縮小索引表的行鍵區(qū)間,最后確定目標(biāo)行鍵。該方式依賴于表結(jié)構(gòu)已知且查詢條件固定的情況,具有一定的局限性。陳東輝等[5]依靠第三方搜索引擎Solr提供的API接口,參考具體業(yè)務(wù)中的查詢用例對相關(guān)字段建立輔助索引以適應(yīng)檢索時效。該方式借助Solr提供的索引功能為HBase記錄創(chuàng)建、存儲索引,其中HBase負(fù)責(zé)存儲數(shù)據(jù),Solr負(fù)責(zé)索引數(shù)據(jù)和檢索。許杰等[6]亦使用Solr建立二級索引的方法,提高了檢索效率。該方式充分利用各角色的優(yōu)點,更適于企業(yè)級的架構(gòu)設(shè)計。考慮到適應(yīng)海量數(shù)據(jù)存儲和索引的要求,將原有架構(gòu)擴展為分布式架構(gòu)極為迫切[7]。付劍生[8]總結(jié)了SolrCloud作為Solr分布式實現(xiàn)的特色功能:數(shù)據(jù)檢索時自動負(fù)載均衡、自動化容錯處理、索引分片、倒排索引的虛擬化存儲等。本文結(jié)合SolrCloud研究分布式存儲HBase二級索引的通用實現(xiàn),基于通用目標(biāo)設(shè)計構(gòu)建索引的具體過程,該過程不依賴于任何特定的業(yè)務(wù)。二級索引方案整體架構(gòu)如圖1。

      1相關(guān)技術(shù)

      1.1分布式存儲模型

      HBase基于Hadoop分布式文件系統(tǒng)(HDFS)構(gòu)建,對數(shù)據(jù)進行索引后,將結(jié)果文件存放在HDFS上,以提高查找或更新大數(shù)據(jù)表中目標(biāo)記錄的速度,同時確保數(shù)據(jù)的容錯性。HBase支持線性伸縮和模塊化擴展,突破了關(guān)系型數(shù)據(jù)庫有限擴展能力的限制,通過新增節(jié)點,集群的存儲能力和處理能力明顯增強。同時基于HDFS的架構(gòu),HBase在故障處理和容錯方面具有優(yōu)良的性能。

      1.2分布式索引模型

      SolrCloud為服務(wù)器之間分發(fā)索引文件和請求轉(zhuǎn)發(fā)創(chuàng)建了一個高可用、高容錯的分布式環(huán)境。一份索引文件經(jīng)切片后被保存在某臺機器上,同時索引文件的多份拷貝會被分別存儲在其它機器上,客戶端通過Solr API請求文件,若分布式系統(tǒng)感知該機器出現(xiàn)宕機、故障,就會直接返回其它機器上的文件拷貝。SolrCloud還支持集群集中管理、自動負(fù)載均衡和故障切換等特性。

      1.3分布式應(yīng)用協(xié)調(diào)服務(wù)

      ZooKeeper作為分布式應(yīng)用協(xié)調(diào)工具,能為分布式應(yīng)用提供高性能和可靠的協(xié)調(diào)服務(wù),簡化分布式協(xié)調(diào)服務(wù)的實現(xiàn)。HBase將元數(shù)據(jù)存儲在ZooKeeper中,使得客戶端不能直接訪問或修改HBase元數(shù)據(jù),并保證集群只存在唯一HMaster。SolrCloud將配置文件存放在ZooKeeper中,以集中化管理配置信息,使得各節(jié)點共享信息,協(xié)調(diào)工作,并通過配置ZooKeeper訪問控制列表以控制外部API調(diào)用。HBase(HDFS)、SolrCloud和ZooKeeper關(guān)系如圖2所示。

      2HBase二級索引

      傳統(tǒng)關(guān)系型數(shù)據(jù)庫(以MySQL為例)架構(gòu)主要分為SQL解析引擎和存儲引擎兩部分,前者包括解析器和查詢優(yōu)化器,負(fù)責(zé)解析,后者負(fù)責(zé)執(zhí)行(查詢或存儲),解析完SQL后,解析引擎會調(diào)用存儲引擎的相關(guān)接口供進一步處理。根據(jù)MySQL的架構(gòu)設(shè)計,本文構(gòu)思了HBase二級索引方案(見圖3)。HBase作為存儲引擎,負(fù)責(zé)存儲數(shù)據(jù),待執(zhí)行完存儲命令,索引器向索引引擎發(fā)起創(chuàng)建索引的請求,生成記錄的索引數(shù)據(jù)。

      HBase自0.92版本后引入了協(xié)處理器Coprocessor機制以支持二級索引,Coprocessor存在兩種實現(xiàn),分別是Observer Coprocessor和Endpoint Coprocessor,前者在特定事件出現(xiàn)前后被觸發(fā),功能與關(guān)系型數(shù)據(jù)庫中的觸發(fā)器類似,后者則可類比關(guān)系型數(shù)據(jù)庫的存儲過程,具體邏輯在RegionServer服務(wù)器端執(zhí)行,客戶端僅通過類庫方法調(diào)用服務(wù)端接口。Coprocessor執(zhí)行過程如圖4,其中Observer與Endpoint相互之間可通過ZooKeeper共享數(shù)據(jù)。

      根據(jù)HBase數(shù)據(jù)入庫的基本流程[5],本文在構(gòu)建二級索引過程時基于Observer實現(xiàn),待記錄被寫入(Put)到HRegion后,會立即觸發(fā)將記錄同步到SolrCloud的操作,進而生成索引。客戶端讀?。℅et)記錄時,首先根據(jù)索引字段請求SolrCloud查詢索引,得到目標(biāo)行鍵,繼而根據(jù)目標(biāo)行鍵獲取HBase記錄。二級索引方案中,各組件通過ZooKeeper協(xié)同工作,并通過暴露API接口供外部調(diào)用,整體流程如圖5。

      2.1索引方案設(shè)計

      Observer允許實施人員在記錄被寫入到HBase前后作一些處理,本文提供的索引工具類通過繼承BaseRegionObserver抽象類,重寫postPut方法,請求SolrCloud生成索引。默認(rèn)情況下,HBase每提交一條數(shù)據(jù)都會觸發(fā)一次postPut操作,考慮到系統(tǒng)的性能,工具類引入了一個本地可持久化的隊列機制,用來代理創(chuàng)建或刪除索引的操作,在postPut或postDelete重載方法中將包含索引字段的記錄放入隊列,隊列以定時器輪詢的方式向SolrCloud提交數(shù)據(jù),同時監(jiān)控異常以供故障恢復(fù)。索引工具類創(chuàng)建索引的活動見圖6。

      通用性是軟件設(shè)計的重要準(zhǔn)則之一,通用性使得工具更易于擴展,避免重復(fù)編碼,提高開發(fā)效率。檢索業(yè)務(wù)升級、需求變更伴隨著對索引字段靈活性的要求,這也意味著在設(shè)計時需考慮索引工具類對不同業(yè)務(wù)二級索引的通用性要求。

      為提高索引方案的通用性,本文規(guī)范了Solr配置和HBase創(chuàng)建數(shù)據(jù)表過程,首先在Solr的配置文件中定義統(tǒng)一的動態(tài)字段,格式以下劃線加字母的方式進行聲明,對照關(guān)系如表1。利用工具構(gòu)建HBase索引,Solr中每一條Document對應(yīng)著HBase的一條記錄,除了需要索引的字段外,還包括4個缺省字段:ID(表名+行鍵)、表名、行鍵、更新時間。接著在HBase中建立需索引的字段,其列修飾符按字段名加預(yù)定義的標(biāo)識符進行定義。比如統(tǒng)計用戶對各網(wǎng)站的訪問量排名,在設(shè)計數(shù)據(jù)表時,訪問量列標(biāo)識符需按照“訪問量_i”的格式設(shè)計,其中“i”表示訪問量是整型數(shù)。該方式統(tǒng)一了創(chuàng)建和維護索引的流程,在設(shè)計列修飾符時相應(yīng)字段按約定命名。實現(xiàn)過程參見代碼如下:

      //獲取rowKey

      for (Cell cell:cells){

      //獲取cFamily,cQualifier,cValue

      if (cQualifier.endsWith("_s"))

      jsonSet.putObject(cFamily+F_SEPARATOR+cQualifier,(new JsonObject()).putString("set",cValue));

      else if (cQualifier.endsWith("_t"))

      jsonSet.putObject(cFamily+F_SEPARATOR+cQualifier,(new JsonObject()).putString("set",cValue));

      //處理其它類型的cQualifier

      }

      jsonSet.putString(F_ID,tableName+F_SEPARATOR+rowKey);

      jsonSet.putObject(F_TABLENAME,(new JsonObject()).putString("set",tableName));

      jsonSet.putObject(F_ROWKEY,(new JsonObject()).putString("set",rowKey));

      jsonSet.putObject(F_UPDATETIME,(new JsonObject()).putString("set",SolrTools.solrDateFormat.format(new java.util.Date())));

      _bqUpdate.enqueue(jsonSet.encode().getBytes(SolrTools.UTF_8));

      2.2部署索引方案

      本文采用1臺服務(wù)器,基于3臺虛擬機搭建大數(shù)據(jù)分布式應(yīng)用實驗環(huán)境。各機器的具體配置如表2。安裝、配置分布式集群時,需配置各機器SSH免密碼登錄、關(guān)閉防火墻、調(diào)整SELinux參數(shù)、同步機器時間,另外使用官方推薦的整合方式確保各軟件版本之間的兼容性。依次分別啟動ZooKeeper、Hadoop、HBase和Solr Cloud,啟動無異常后,可通過WebUI訪問HBase和SolrCloud。

      停止HBase服務(wù),將索引工具類打包后上傳給所有的Region Servers,并放在HBase根目錄下的lib子目錄中,接著配置HBasesite.xml文件,主要設(shè)置Solr Cloud地址,設(shè)置coprocessor實現(xiàn)類為索引工具類。再次啟動HBase服務(wù),通過客戶端請求HBase,并插入預(yù)定義格式的記錄,刷新SolrCloud集群狀態(tài)后,發(fā)現(xiàn)SolrCloud產(chǎn)生新的索引記錄,ID參數(shù)形如“表名#行鍵”,其它屬性均與HBase記錄一致。如先執(zhí)行建表和插入實驗數(shù)據(jù)的命令:

      put 'test_table','row_1','report:name_s','張三'

      put 'test_table','row_1','report:age_i','24'

      put 'test_table','row_1','report:gender_b','true'

      put 'test_table','row_1','report:grade_f','89.5'

      put 'test_table','row_2','report:name_s','李四'

      put 'test_table','row_2','report:age_i','23'

      put 'test_table','row_2','report:gender_b','true'

      put 'test_table','row_2','report:grade_f','90.0'

      隨后在客戶端按指定URL(形如[domain]:[port]/solr/admin/collections?action=RELOAD&name;=[coreName])重新加載集群狀態(tài),查詢索引即得到如下記錄:

      "docs":[{

      "report#name_s":"張三",

      "id":"test_table#row_1",

      "t_s":"test_table",

      "r_s":"row_1",

      "u_dt":"2016-07-10T22:47:13Z",

      "report#age_i":24,

      "report#gender_b":true,

      "report#grade_f":89.5,

      "_version_":1539479473261379600

      },{

      "report#name_s":"李四",

      "id":"test_table#row_2",

      "t_s":"test_table",

      "r_s":"row_2",

      "u_dt":"2016-07-10T22:47:26Z",

      "report#age_i":23,

      "report#gender_b":true,

      "report#grade_f":90,

      "_version_":1539479487465390000

      }]

      以同樣的方式測試更新表中某行記錄、刪除某行記錄的某一列以及刪除某行記錄的情況,發(fā)現(xiàn)SolrCloud存儲的索引都會產(chǎn)生相應(yīng)變化。多條件查詢HBase記錄時,先在客戶端通過API查詢Solr索引,待返回目標(biāo)行鍵,便可根據(jù)目標(biāo)行鍵查詢HBase目標(biāo)記錄。

      3結(jié)語

      本文針對HBase在二級索引問題上的缺陷,結(jié)合SolrCloud分布式索引特性,利用HBase提供的Observer Coprocessor API,設(shè)計了創(chuàng)建和維護HBase二級索引的通用實現(xiàn),簡化了開發(fā)流程,避免了針對單一業(yè)務(wù)編程的繁瑣問題。通過部署索引方案,發(fā)現(xiàn)該方案能很好地滿足創(chuàng)建和維護HBase二級索引的要求,并保證索引與記錄的一致性。對于通用實現(xiàn)的高并發(fā)性能測試將是下一步研究的工作。

      參考文獻參考文獻:

      [1]朱夏,羅軍舟,宋愛波,等.云計算環(huán)境下支持復(fù)雜查詢的多維數(shù)據(jù)索引機制[J].計算機研究與發(fā)展,2013,50(8):15921603.

      [2]丁飛,陳長松,張濤,等.基于協(xié)處理器的區(qū)域級第二索引研究與實現(xiàn)[J].計算機應(yīng)用,2014,34(S1):181185.

      [3]徐熙超,楊錚,馬廷淮.基于HBase的氣象結(jié)構(gòu)化數(shù)據(jù)查詢優(yōu)化[J/OL].計算機工程與應(yīng)用,http://www.cnki.net/kcms/detail/11.2127.TP.20160510.1117.038.html.

      [4]葛微,羅圣美,周文輝,等.一種基于分層式索引的高效查詢技術(shù)與系統(tǒng)[J].計算機學(xué)報,2016,39(1):140153.

      [5]陳東輝,曾樂,梁中軍,等.基于的氣象地面分鐘數(shù)據(jù)分布式存儲系統(tǒng)[J].計算機應(yīng)用,2014,34(9):26172621.

      [6]許杰,冷冰,李明桂,等.大數(shù)據(jù)處理技術(shù)在安全審計系統(tǒng)中的應(yīng)用[J].通信技術(shù),2016,49(3):346351.

      [7]吳廣君,王樹鵬,陳明,等.海量結(jié)構(gòu)化數(shù)據(jù)存儲檢索系統(tǒng)[J].計算機研究與發(fā)展,2012,49(Sl):15.

      [8]付劍生,徐林龍,林文斌.分布式全網(wǎng)職位搜索引擎的研究與實現(xiàn)[J].計算機技術(shù)與發(fā)展,2015,25(5):69.

      責(zé)任編輯(責(zé)任編輯:何麗)

      猜你喜歡
      協(xié)處理器
      基于RISC-V 和密碼協(xié)處理器的SOC 設(shè)計
      面向異構(gòu)計算機平臺的HPL 方案?
      基于開源處理器Rocket 的異構(gòu)SoC 設(shè)計與驗證
      電子與封裝(2021年3期)2021-03-29 06:31:24
      基于HBase分布式數(shù)據(jù)庫海量數(shù)據(jù)序列存儲優(yōu)化
      異構(gòu)系統(tǒng)中的Web服務(wù)器軟件框架研究
      基于HBase分布式數(shù)據(jù)庫海量數(shù)據(jù)序列存儲優(yōu)化
      SVDU的多協(xié)處理器并行化方法研究
      空氣質(zhì)量監(jiān)測大數(shù)據(jù)區(qū)間的統(tǒng)計問題
      雙精度浮點矩陣乘協(xié)處理器研究
      可重構(gòu)分組密碼協(xié)處理器二維指令架構(gòu)
      新营市| 南郑县| 阿巴嘎旗| 光山县| 新兴县| 保靖县| 黄浦区| 巴南区| 泾川县| 三亚市| 黎城县| 龙州县| 海晏县| 崇明县| 盖州市| 札达县| 通山县| 台南县| 拉孜县| 昭觉县| 泾川县| 顺昌县| 如东县| 庆阳市| 上思县| 宁蒗| 兖州市| 元氏县| 慈利县| 昌邑市| 东乌珠穆沁旗| 桦甸市| 苗栗县| 华容县| 黔东| 友谊县| 普宁市| 丹凤县| 靖远县| 邳州市| 开平市|