• 
    

    
    

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

      ?

      基于Hbase的大數(shù)據(jù)查詢優(yōu)化

      2017-09-18 06:31朱明王志瑞

      朱明++王志瑞

      摘要: Hbase有著先天的優(yōu)勢(shì)和先天的劣勢(shì),而劣勢(shì)就是其較差的數(shù)據(jù)定位能力,也就是數(shù)據(jù)查詢能力。因?yàn)槊嫦蛄械奶攸c(diǎn),Hbase只能單單地以rowkey為主鍵作查詢,而無法對(duì)表進(jìn)行多維查詢和join操作,并且查詢通常都是全表掃描,耗費(fèi)資源較大,查詢效率較低。類比于傳統(tǒng)型數(shù)據(jù)庫里的一些查詢方式,本文對(duì)Hbase的存儲(chǔ)原理進(jìn)行了研究,借助分布式計(jì)算框架Mapreduce在Hbase上構(gòu)建了二級(jí)索引,就可以對(duì)表進(jìn)行有針對(duì)性的定位和高效率的查找,同時(shí)也減輕zookeeper服務(wù)對(duì)資源調(diào)度的壓力。

      關(guān)鍵詞: Hbase; 大數(shù)據(jù)處理; Secondary Indexing

      中圖分類號(hào):TP311

      文獻(xiàn)標(biāo)志碼:A

      文章編號(hào):2095-2163(2017)04-0059-03

      0引言

      隨著企業(yè)在發(fā)展過程中積累數(shù)據(jù)的日益遞增,關(guān)于大量業(yè)務(wù)數(shù)據(jù)的存儲(chǔ)和處理即已成為關(guān)涉企業(yè)運(yùn)營效率的熱點(diǎn)研究問題之一,此時(shí)則需對(duì)自身的數(shù)據(jù)庫作出調(diào)整。而Google公司關(guān)于BigTable的開源實(shí)現(xiàn),更為非傳統(tǒng)型數(shù)據(jù)庫探討研發(fā)提供了高端設(shè)計(jì)可能。作為非傳統(tǒng)型數(shù)據(jù)庫的優(yōu)秀代表,Hbase就因具備的高可靠性、高性能、面向列、可伸縮的特點(diǎn),已然成為企業(yè)在面臨大量數(shù)據(jù)處理時(shí)的基礎(chǔ)實(shí)效應(yīng)用設(shè)計(jì)模式。本文即針對(duì)這一內(nèi)容展開如下研究論述。

      1Hbase體系架構(gòu)

      Hbase技術(shù)來源于 Fay Chang 所撰寫的Google論文“Bigtable”關(guān)于一個(gè)結(jié)構(gòu)化數(shù)據(jù)的“分布式存儲(chǔ)系統(tǒng)”。是和Hadoop分布式文件系統(tǒng)對(duì)應(yīng)的一個(gè)分布式數(shù)據(jù)庫的概念。具體地,Hbase是一個(gè)分布式、面向列開源數(shù)據(jù)庫。而且也不同于一般的關(guān)系數(shù)據(jù)庫,Hbase是一個(gè)適合于非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)庫。進(jìn)一步地,Hbase是基于列的而非基于行的模式,這就與傳統(tǒng)型數(shù)據(jù)庫呈現(xiàn)出顯著差別。Hbase是Apache的Hadoop項(xiàng)目的頂級(jí)項(xiàng)目。綜上可知,Hbase就是建立在HDFS上的分布式列存儲(chǔ)系統(tǒng)。

      2Hbase存儲(chǔ)原理

      Hbase所有的行數(shù)據(jù)都是按照rowkey的字典展開排序的,所以查詢Hbase表的任何一行數(shù)據(jù)都要從rowkey的第一行開始掃描,依次向下,直至找到相關(guān)的行為止,如此可知查詢的效率將會(huì)很低,但這只是從第一層查詢效率來考慮的,也就是研究中表明的Hbase的一級(jí)索引(就是以rowkey字典排序的方式查詢數(shù)據(jù))。

      如圖1所示,Hbase表中的數(shù)據(jù),都是存放在region里面的,原本一張表中只有一個(gè)region,隨著行數(shù)的不斷增多,region包含的數(shù)據(jù)資源也會(huì)不斷增多,當(dāng)達(dá)到一個(gè)閾值時(shí)(默認(rèn)為256 M),這個(gè)region即會(huì)分成2個(gè)同樣大小的region,重復(fù)這一過程,當(dāng)插入的數(shù)據(jù)越多,這個(gè)表的region就越多。region是由regionserver管理的,通常情況下,一個(gè)regionserver可以管理多個(gè)region。

      針對(duì)Hbase查詢的特點(diǎn),分析可知Hbase都是通過Rowkey的方式全盤掃描表的,因此效率較慢,并且,Hbase表并不支持非主鍵查詢,和連接查詢、join操作的。

      [JP3]如果能夠采用傳統(tǒng)型數(shù)據(jù)庫的索引方式來對(duì)Hbase建立索引,本次研究則擬將獲得更高效率。顯然,索引表僅需包含一個(gè)列值,因此索引表的大小要比原表小很多,所以索引表的一個(gè)region要比原表包含更多的記錄。研究可以通過mapreduce構(gòu)建一個(gè)二級(jí)索引,其主體思想可表述為:通過分布式計(jì)算框架[JP4]mapreduce構(gòu)建一個(gè)二級(jí)索引的方法。對(duì)此,將重點(diǎn)給出闡釋如下:[JP]

      1)Map階段。將Hbase中的相關(guān)表遍歷rowkey值,根據(jù)rowkey讀出維度值,再通過維度值讀出value值,并將對(duì)應(yīng)的rowkey-value輸出。

      2)Reduce階段。取出rowkey和value,將兩值取反,即將value值作為行鍵,行健作為value值存入Hbase。

      4研發(fā)設(shè)計(jì)流程

      綜合前文研究所述,這里將得出在Hbase中的操作實(shí)現(xiàn)流程可如圖2所示。

      throws IOException, InterruptedException

      {

      Set keys = indexes.keySet();

      for (byte[] k : keys)

      {

      [JP3]ImmutableBytesWritable indexTableName = indexes.get(k);[JP]

      [JP4]byte[] val = value.getValue(Bytes.toBytes(columnFamily),k);[JP]

      [JP3]Put put = new Put(val); // 索引表的rowkey為原始表的值[JP]

      put.add(Bytes.toBytes("f1"), Bytes.toBytes("id"), key.get()); // 索引表的內(nèi)容為原始表的rowkey

      context.write(indexTableName, put);}

      }

      }

      protected void setup(Context context) throws IOException,InterruptedException

      {

      Configuration conf = context.getConfiguration();

      String tableName = conf.get("tableName");

      columnFamily = conf.get("columnFamily");

      String[] qualifiers = conf.getStrings("qualifiers"); // indexes的key為列名,value為索引表名

      for (String q : qualifiers)

      {

      indexes.put(Bytes.toBytes(q),newImmutableBytesWritable(Bytes.toBytes(tableName+ "-" + q)));

      }

      }[HJ]

      6實(shí)驗(yàn)數(shù)據(jù)比較

      至此,研究通過Hadoop的mapreduce機(jī)制將java代碼編譯組裝成jar包寫入到HDFS里,得到新的索引表,而對(duì)新的索引表就可以進(jìn)行基于原表的非主鍵查詢,并且對(duì)新的索引表的查詢將會(huì)節(jié)約大量的資源。測(cè)試中,即以班級(jí)系點(diǎn)名冊(cè)作為數(shù)據(jù)源,對(duì)于建立了二級(jí)索引后的數(shù)據(jù)源的查詢和并未建立二級(jí)索引的數(shù)據(jù)源、即原表的實(shí)驗(yàn)數(shù)據(jù)展開了性能對(duì)比,可得運(yùn)行實(shí)驗(yàn)結(jié)果如圖3、圖4所示。

      [PS朱明3.EPS;S*3;X*3,BP#]

      [HJ*3][ST6HZ][WT6HZ][JZ]圖3原表與索引表查詢對(duì)比結(jié)果1

      Fig. 3[ZK(]Query comparison results1 between the original table and index table[ZK)][HJ]

      [PS朱明4.EPS;S*2;X*2,BP#]

      [ST6HZ][WT6HZ][JZ]圖4原表與索引表查詢對(duì)比結(jié)果2

      Fig. 4[ZK(]Query comparison results2 between the original table and index table[ZK)]

      [HT5”SS][ST5”BZ][WT5”BZ]

      7結(jié)束語

      基于Hbase的大數(shù)據(jù)查詢中二級(jí)索引的創(chuàng)建研究,也就是針對(duì)Hbase表的查詢優(yōu)化則使學(xué)界對(duì)非傳統(tǒng)型數(shù)據(jù)庫查詢?nèi)〉昧嗣黠@突破,通過這種二級(jí)索引表,就可以大大降低查詢的效率,也可以把nosql的劣勢(shì),即只能通過主鍵rowkey的查詢方式,轉(zhuǎn)化為非主鍵的查詢方式等,這是對(duì)nosql半結(jié)構(gòu)化數(shù)據(jù)查詢應(yīng)用的一次研發(fā)嘗試。也為后續(xù)關(guān)于更大數(shù)據(jù)量的非傳統(tǒng)型數(shù)據(jù)庫優(yōu)化提供了重要有益的基礎(chǔ)借鑒。

      [LL]參考文獻(xiàn):

      [WTBZ][ST6BZ][HT6SS][1] [ZK(#〗

      張新榮. 基于Hbase的小文件存儲(chǔ)系統(tǒng)的研究及實(shí)現(xiàn)[D]. 沈陽:東北大學(xué),2012.

      [2] 江柳. HDFS下小文件存儲(chǔ)優(yōu)化相關(guān)技術(shù)研究[D]. 北京:北京郵電大學(xué),2010.

      [3] 李穎. 基于分布式文件系統(tǒng)的農(nóng)業(yè)數(shù)據(jù)云存儲(chǔ)研究[D]. 泰安:山東農(nóng)業(yè)大學(xué),2013.

      [4] WHITE T. Hadoop: The definitive guide [M]. America: O'Reilly Media, 2009.

      [5] 于翔. NoSQL:大數(shù)據(jù)浪潮中崛起[N]. 網(wǎng)絡(luò)世界,2012-04-23(40).

      [6] 徐小威. 非關(guān)系型數(shù)據(jù)庫數(shù)據(jù)恢復(fù)技術(shù)研究[D]. 杭州:杭州電子科技大學(xué),2014.

      [7] 王映東,匡藝,費(fèi)江濤. Bigtable系統(tǒng)的負(fù)載平衡技術(shù)研究[J]. 計(jì)算機(jī)安全,2009(2):41-43.

      [8] 徐達(dá)宇. 云計(jì)算環(huán)境下資源需求預(yù)測(cè)與優(yōu)化配置方法研究[D]. 合肥:合肥工業(yè)大學(xué),2014.

      [9] 毛典輝. 基于MapReduce的CanopyKmeans改進(jìn)算法[J]. 計(jì)算機(jī)工程與應(yīng)用,2012,48(27):22-26,68.

      [10]SITTO K, PRESSER M. Field guide to Hadoop:An introduction to Hadoop, its Ecosystem, and aligned technologies[M]. America:O'Reilly Media,2015.endprint

      丹寨县| 永定县| 濮阳市| 永福县| 调兵山市| 南皮县| 南靖县| 田阳县| 宝丰县| 奎屯市| 邯郸市| 宜兰市| 浑源县| 原阳县| 镇巴县| 吉林省| 红桥区| 缙云县| 吉水县| 永顺县| 云龙县| 白山市| 德令哈市| 梓潼县| 遵义县| 江城| 房产| 柯坪县| 达拉特旗| 黄龙县| 建宁县| 大竹县| 忻州市| 临澧县| 贵南县| 施甸县| 乌鲁木齐县| 登封市| 新沂市| 中山市| 古田县|