• 
    

    
    

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

      ?

      基于Hadoop平臺(tái)的數(shù)據(jù)遷移方法研究實(shí)現(xiàn)

      2018-04-25 07:47:59,,
      關(guān)鍵詞:存儲(chǔ)空間數(shù)據(jù)表數(shù)據(jù)庫(kù)

      , , ,

      (湖北大學(xué) 計(jì)算機(jī)與信息工程學(xué)院,武漢 430062)

      0 引言

      隨著計(jì)算機(jī)與信息技術(shù)的迅速發(fā)展,企業(yè)應(yīng)用系統(tǒng)的規(guī)模迅速擴(kuò)大,所產(chǎn)生的數(shù)據(jù)呈海量型變化。大數(shù)據(jù)(Big Data)一詞越來(lái)越多地被提及,人們就用它來(lái)描述和定義信息爆炸時(shí)代產(chǎn)生的海量數(shù)據(jù),并命名與之相關(guān)的技術(shù)發(fā)展與創(chuàng)新[1]。在大數(shù)據(jù)時(shí)代,企業(yè)應(yīng)用系統(tǒng)數(shù)據(jù)量快速增長(zhǎng)已達(dá)到PB(1PB=1000TB)甚至EB(1EB=1000PB)級(jí)別,而大多數(shù)企業(yè)應(yīng)用系統(tǒng)之前所使用的數(shù)據(jù)庫(kù)都是傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)[2],實(shí)際上關(guān)系型數(shù)據(jù)庫(kù)已經(jīng)無(wú)法滿(mǎn)足當(dāng)前海量數(shù)據(jù)處理的高擴(kuò)展性、高可用性、高并發(fā)讀寫(xiě)、高吞吐量、較低延遲及高效存儲(chǔ)和查詢(xún)等需求。與關(guān)系型數(shù)據(jù)庫(kù)不同,NoSQL數(shù)據(jù)庫(kù)[3]由于其擴(kuò)展性和可用性強(qiáng)以及靈活的數(shù)據(jù)模型,在大數(shù)據(jù)時(shí)代得到廣泛應(yīng)用。

      Hadoop生態(tài)系統(tǒng)中的HBase數(shù)據(jù)庫(kù)是一個(gè)開(kāi)源的基于列的非關(guān)系型分布式數(shù)據(jù)庫(kù),是Apache軟件基金會(huì)的Hadoop項(xiàng)目的一部分,不僅擁有大部分NoSQL數(shù)據(jù)庫(kù)所擁有的特點(diǎn),而且因?yàn)槟芘cHadoop大數(shù)據(jù)平臺(tái)進(jìn)行集成,所以它能在數(shù)據(jù)存儲(chǔ)方面提供更為強(qiáng)大的擴(kuò)展性和在數(shù)據(jù)操作方面提供更為完善的操作性能[4]?;贖Base的巨大優(yōu)勢(shì),如今企業(yè)的應(yīng)用系統(tǒng)都開(kāi)始將HBase數(shù)據(jù)庫(kù)作為進(jìn)行大數(shù)據(jù)的存儲(chǔ)和處理的工具。但是,在實(shí)際需求的限制下,企業(yè)應(yīng)用系統(tǒng)在更改存儲(chǔ)系統(tǒng)時(shí)不應(yīng)該丟失原有系統(tǒng)中的歷史數(shù)據(jù),而是需要將原有系統(tǒng)中的歷史數(shù)據(jù)遷移到新構(gòu)建的存儲(chǔ)系統(tǒng)中,所以如何將原有應(yīng)用系統(tǒng)中的歷史數(shù)據(jù)盡量完整、有策略、自動(dòng)遷移到新構(gòu)建的HBase數(shù)據(jù)庫(kù)中是一個(gè)值得研究的課題。

      HBase本身是一種NoSQL數(shù)據(jù)庫(kù),由于其數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)與傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)結(jié)構(gòu)有很大的差異,因此在設(shè)計(jì)數(shù)據(jù)存儲(chǔ)表結(jié)構(gòu)及表關(guān)系時(shí)也有很大的不同,所以要實(shí)現(xiàn)從關(guān)系型數(shù)據(jù)庫(kù)向分布式數(shù)據(jù)庫(kù)HBase進(jìn)行數(shù)據(jù)遷移,需要重新設(shè)計(jì)新構(gòu)建的存儲(chǔ)系統(tǒng)HBase的表模式,這個(gè)過(guò)程是個(gè)比較復(fù)雜的過(guò)程,在完成數(shù)據(jù)遷移過(guò)程后還需要考慮數(shù)據(jù)遷移后數(shù)據(jù)查詢(xún)及存儲(chǔ)的性能問(wèn)題,因此實(shí)現(xiàn)一個(gè)從關(guān)系型數(shù)據(jù)庫(kù)向分布式數(shù)據(jù)庫(kù)HBase進(jìn)行數(shù)據(jù)遷移的方法是非常有必要的。

      本文在上述背景及需求下,通過(guò)對(duì)Hadoop大數(shù)據(jù)平臺(tái)、HBase數(shù)據(jù)庫(kù)存儲(chǔ)原理及典型數(shù)據(jù)庫(kù)遷移策略的研究,設(shè)計(jì)基于Hadoop平臺(tái)數(shù)據(jù)遷移方法來(lái)實(shí)現(xiàn)將傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)中的歷史數(shù)據(jù)以及表模式向HBase數(shù)據(jù)庫(kù)中進(jìn)行遷移和轉(zhuǎn)換,有效解決之前同類(lèi)遷移工具無(wú)法對(duì)關(guān)系型數(shù)據(jù)庫(kù)中表模式進(jìn)行遷移不足的問(wèn)題。

      本文組織結(jié)構(gòu)如下:第1部分簡(jiǎn)述相關(guān)理論基礎(chǔ);第2部分介紹數(shù)據(jù)遷移方法的設(shè)計(jì)思想及具體實(shí)現(xiàn);第3部分對(duì)數(shù)據(jù)遷移方法實(shí)現(xiàn)后的查詢(xún)與存儲(chǔ)等方面與同類(lèi)遷移工具進(jìn)行比較;第4部分總結(jié)全文。

      1 相關(guān)理論

      1.1 Hadoop平臺(tái)

      Hadoop[5]是一個(gè)由Apache基金會(huì)根據(jù)Google公司發(fā)表的Google文件系統(tǒng)(GFS)和MapReduce的論文自行實(shí)現(xiàn)而成的分布式系統(tǒng)架構(gòu)。使用者可以在不了解底層細(xì)節(jié)的情況下,開(kāi)發(fā)分布式程序,充分利用集群的作用進(jìn)行高速運(yùn)算和存儲(chǔ)。Hadoop框架最核心的設(shè)計(jì)就是由HDFS(Hadoop Distributed File System:分布式文件系統(tǒng))和MapReduce(分布式計(jì)算框架)組成。

      HDFS[6]在Hadoop系統(tǒng)中為海量數(shù)據(jù)提供了存儲(chǔ),為了高數(shù)據(jù)吞吐量而優(yōu)化的,適合那些有超大數(shù)據(jù)集的應(yīng)用程序,有高容錯(cuò)性、低成本的特點(diǎn)。一般情況下,HDFS集群主要由一個(gè)NameNode節(jié)點(diǎn)(master)和多個(gè)DataNode節(jié)點(diǎn)(slave)組成,在集群節(jié)點(diǎn)通信中,NameNode發(fā)揮著管理、協(xié)調(diào)、操控的作用,主要負(fù)責(zé)管理文件系統(tǒng)的命名空間,協(xié)助客戶(hù)端對(duì)文件的訪問(wèn),并對(duì)DataNode發(fā)起的請(qǐng)求進(jìn)行響應(yīng);而DataNode是HDFS中最終存儲(chǔ)數(shù)據(jù)的節(jié)點(diǎn),負(fù)責(zé)自身及其他物理節(jié)點(diǎn)的存儲(chǔ)管理。客戶(hù)端向HDFS發(fā)起訪問(wèn)文件請(qǐng)求時(shí),首先需要從NameNode節(jié)點(diǎn)上獲取文件在HDFS中所處的位置信息,根據(jù)文件位置信息找到存儲(chǔ)數(shù)據(jù)塊所在的DataNode,最后讀取DataNode上存儲(chǔ)的數(shù)據(jù)。

      MapReduce[7]是為海量數(shù)據(jù)提供了計(jì)算。它是面向大數(shù)據(jù)并行處理的計(jì)算模型、框架和平臺(tái)。在一個(gè)MapReduce計(jì)算任務(wù)過(guò)程中,主要有兩個(gè)階段:Map(映射)階段和Reduce(歸約)階段,每個(gè)階段都是以鍵值對(duì)作為輸入和輸出,Map階段負(fù)責(zé)對(duì)輸入文件進(jìn)行切分處理,然后匯總再分組給Reduce進(jìn)行處理,達(dá)到高效的分布式計(jì)算效率。

      1.2 HBase存儲(chǔ)原理

      HBase[8]是Apache Hadoop中的一個(gè)子項(xiàng)目,是Google BigTable的開(kāi)源實(shí)現(xiàn),依托于Hadoop的HDFS作為最基本存儲(chǔ)基礎(chǔ)單元,通過(guò)使用Hadoop的DFS工具就可以看到這些數(shù)據(jù)存儲(chǔ)文件夾的結(jié)構(gòu),還可以通過(guò)Map/Reduce的框架對(duì)HBase進(jìn)行操作。

      HBase是一個(gè)分布式、面向列的數(shù)據(jù)存儲(chǔ)系統(tǒng),與關(guān)系型數(shù)據(jù)庫(kù)的模式固定,面向行的數(shù)據(jù)庫(kù)具有ACID性質(zhì)不同,HBase是一個(gè)適合于非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)庫(kù),是介于Map Entry(key&value)和DB Row之間的一種數(shù)據(jù)存儲(chǔ)方式。HBase中的數(shù)據(jù)是依靠行健(RowKey)、列族(ColumnFamily)、列標(biāo)識(shí)(ColumnQualifier)、時(shí)間戳(TimeStamp)來(lái)標(biāo)識(shí)一個(gè)單元格中的數(shù)據(jù)。表1是HBase的簡(jiǎn)單邏輯視圖。

      表1 HBase邏輯視圖

      表1表示的是在HBase數(shù)據(jù)庫(kù)中保存的兩條訂單信息1001和1002,其中1001和1002是表示行鍵,orderInfo是列族,在orderInfo列族中包含有username、phoneNum、orderStatus列標(biāo)識(shí)。如要獲取某一單元格中的訂單信息,則可使用{RowKey,column(=+),version},如若不指定時(shí)間戳,則默認(rèn)獲取的是最新的一條記錄。為了更好的理解HBase的數(shù)據(jù)模型,可以使用JSON格式來(lái)表示。HBase中數(shù)據(jù)模型的JSON格式的一般形式[9]如下:

      RowKey{

      ColumnFamily1{

      Column1:

      T2:value2

      T1:value1

      Column2:

      T1:value3

      }

      ColumnFamily2{

      T3:value4

      }

      }

      由表1和HBase數(shù)據(jù)模型的JSON格式的一般形式可以看出HBase與RDBMS之間有很大的不同,其實(shí)HBase是基于列族的、稀疏的、多維的數(shù)據(jù)庫(kù)系統(tǒng),所以在設(shè)計(jì)數(shù)據(jù)遷移方法時(shí)需要充分考慮HBase數(shù)據(jù)模型的特點(diǎn)。

      HBase的底層存儲(chǔ)結(jié)構(gòu)如圖1所示,是按列族存儲(chǔ)的。

      圖1 HBase底層存儲(chǔ)結(jié)構(gòu)

      某一RowKey的數(shù)據(jù)(如表1)雖然在數(shù)據(jù)模型上看是在一行上,但是在HBase底層存儲(chǔ)中是分開(kāi)存儲(chǔ)的,如圖1所示,數(shù)據(jù)在存儲(chǔ)時(shí),HBase會(huì)自動(dòng)的將表水平劃分成多個(gè)區(qū)域(Region),每個(gè)Region中會(huì)保存某段連續(xù)的數(shù)據(jù),而一個(gè)Region包含多個(gè)Store,這里每一個(gè)Store就是一個(gè)ColumnFamily(列族),由此可以看出,HBase在底層存儲(chǔ)時(shí),同一列族的數(shù)據(jù)存儲(chǔ)在一個(gè)文件中,不同列族的數(shù)據(jù)存儲(chǔ)在不同的文件之中,而且HBase中并不是所有的行和列中都存儲(chǔ)數(shù)據(jù),不存儲(chǔ)數(shù)據(jù)的單元格不占存儲(chǔ)空間,每一個(gè)store在初始化時(shí)設(shè)置了固定存儲(chǔ)大??;另外,雖然HBase列標(biāo)識(shí)可以有上百萬(wàn)列,由于HBase結(jié)構(gòu)中的HFile有一定的大小限制,如果一行數(shù)據(jù)量太大,在存儲(chǔ)時(shí)會(huì)導(dǎo)致HFile無(wú)法選擇合適的分割點(diǎn)。

      由于HBase底層存儲(chǔ)有以上特點(diǎn),在設(shè)計(jì)數(shù)據(jù)遷移方法的HBase表模式時(shí)應(yīng)考慮無(wú)論數(shù)據(jù)量的大小,每個(gè)列族都占用固定的存儲(chǔ)空間(初始化前確定)這一因素,所以應(yīng)該盡可能少的創(chuàng)建列族,HBase官方文檔推薦是創(chuàng)建最好不多于三個(gè)列族,故將相鄰的數(shù)據(jù)、經(jīng)常在一起使用的數(shù)據(jù)放在同一列族下,這樣不僅可以減少數(shù)據(jù)存儲(chǔ)空間而且可以有效減少檢索時(shí)查詢(xún)存儲(chǔ)文件的次數(shù)。

      綜合考慮HBase數(shù)據(jù)模型及HBase數(shù)據(jù)存儲(chǔ)的特點(diǎn),在設(shè)計(jì)HBase的數(shù)據(jù)格式時(shí)需要充分利用行鍵(RowKey),適當(dāng)?shù)氖褂昧凶?ColumnFamily),將關(guān)系型數(shù)據(jù)庫(kù)中需要索引的字段盡量放在RowKey或列族中來(lái)提高數(shù)據(jù)存儲(chǔ)和查詢(xún)的性能。

      2 數(shù)據(jù)遷移方法的設(shè)計(jì)與實(shí)現(xiàn)

      2.1 概述思想

      由于HBase與關(guān)系型數(shù)據(jù)庫(kù)的區(qū)別,所以在進(jìn)行關(guān)系型數(shù)據(jù)庫(kù)(MySQL)向非關(guān)系數(shù)據(jù)庫(kù)(HBase)的數(shù)據(jù)遷移時(shí),需要重新設(shè)計(jì)HBase的數(shù)據(jù)表模式。在設(shè)計(jì)HBase表模式時(shí)要充分考慮HBase數(shù)據(jù)的存儲(chǔ)和查詢(xún)特點(diǎn),使得系統(tǒng)業(yè)務(wù)數(shù)據(jù)的存儲(chǔ)性能和查詢(xún)效率較高。

      在數(shù)據(jù)存儲(chǔ)上,由1.2節(jié)HBase存儲(chǔ)原理可知,HBase底層是按列族進(jìn)行存儲(chǔ)的,每個(gè)表中包含有多個(gè)區(qū)域,而一個(gè)區(qū)域中包含多個(gè)store,這里的一個(gè)store就代表一個(gè)列族,每個(gè)store在初始化時(shí)給定固定值,由此可知,HBase表中的列族越多就越占用空間,所以在設(shè)計(jì)HBase表時(shí)盡量按照官方文檔建議列族最好不多于三個(gè),故將相鄰的、經(jīng)常使用的數(shù)據(jù)放在一個(gè)列族中以減少存儲(chǔ)空間和提高查詢(xún)效率。

      在數(shù)據(jù)查詢(xún)上,由于HBase不支持表間關(guān)聯(lián)查詢(xún)[10],所以在進(jìn)行數(shù)據(jù)庫(kù)遷移時(shí)需要充分考慮關(guān)系型數(shù)據(jù)庫(kù)中的表間關(guān)系在HBase數(shù)據(jù)庫(kù)中的體現(xiàn),相對(duì)于關(guān)系型數(shù)據(jù)庫(kù),在HBase數(shù)據(jù)庫(kù)中就需要對(duì)HBase表模式進(jìn)行重新設(shè)計(jì),提高HBase的查詢(xún)效率,由此本文提出關(guān)于MySQL數(shù)據(jù)庫(kù)到HBase數(shù)據(jù)庫(kù)的幾種表轉(zhuǎn)換關(guān)系原則。

      2.2 表模式設(shè)計(jì)

      在對(duì)HBase的表模式進(jìn)行設(shè)計(jì)時(shí),以關(guān)系型數(shù)據(jù)庫(kù)MySQL數(shù)據(jù)庫(kù)的表間關(guān)系為基準(zhǔn),分為“基本變換”、“‘一對(duì)一’變換”、“‘一對(duì)多’變換”,“‘多對(duì)多’變換”四種變換,下面詳細(xì)介紹其變換規(guī)則[11-14]。

      2.2.1 基本變換

      此類(lèi)變換對(duì)應(yīng)于MySQL數(shù)據(jù)庫(kù)向HBase數(shù)據(jù)庫(kù)進(jìn)行單表遷移沒(méi)有表間關(guān)系也即是基本表遷移的情況,表模式變換即用基本變換方法將MySQL數(shù)據(jù)庫(kù)中表模式變換成符合HBase數(shù)據(jù)庫(kù)的表模式。

      具體變換方法說(shuō)明:如圖2所示,將MySQL數(shù)據(jù)庫(kù)中A表的表名作為HBase數(shù)據(jù)庫(kù)中對(duì)應(yīng)表的表名HA,在HA中創(chuàng)建表A的自定義列族CF1,并將表A中的所有列作為HA表列族CF1中的列標(biāo)識(shí)(ColumnQualifier)。最后以表A的主鍵作為HA的RowKey進(jìn)行數(shù)據(jù)導(dǎo)入。

      圖2 基本變換

      此類(lèi)是數(shù)據(jù)庫(kù)基本表的遷移,所以在海量數(shù)據(jù)的存儲(chǔ)和查詢(xún)的效率上與HBase的一般表的存儲(chǔ)和查詢(xún)效率一樣。

      2.2.2 “一對(duì)一”變換

      此類(lèi)變換對(duì)應(yīng)于MySQL數(shù)據(jù)庫(kù)中表間關(guān)系為“一對(duì)一”的關(guān)系類(lèi)型的數(shù)據(jù)表遷移,表模式變換即將MySQL中兩張表的記錄轉(zhuǎn)換成HBase中一張表的記錄,存儲(chǔ)兩張相關(guān)聯(lián)表的信息。

      具體變換方法說(shuō)明:如圖3所示,在MySQL數(shù)據(jù)庫(kù)中有數(shù)據(jù)表A和B,表A與表B的表間關(guān)系是“一對(duì)一”關(guān)系,現(xiàn)將表A的表名作為HBase數(shù)據(jù)表HA的表名,并創(chuàng)建表A和表B在HA中的列族CF1和CF2,將表A中所有列添加到表A對(duì)應(yīng)的列族CF1中,同時(shí)將與表A相關(guān)聯(lián)的表B的所有列添加到相對(duì)應(yīng)的列族CF2中,根據(jù)實(shí)際需求對(duì)表B進(jìn)行保留或刪除操作,即完成“一對(duì)一”關(guān)系變換。

      圖3 “一對(duì)一”變換

      此類(lèi)“一對(duì)一”變換,可以有效解決HBase中無(wú)法進(jìn)行表間的連接查詢(xún)問(wèn)題,由“一對(duì)一”變換圖可知,存儲(chǔ)的數(shù)據(jù)看似冗余,消耗更多的存儲(chǔ)空間,但是提高了表間數(shù)據(jù)的連接查詢(xún)效率。

      2.2.3 “一對(duì)多”變換

      此類(lèi)變換對(duì)應(yīng)于MySQL數(shù)據(jù)庫(kù)中表間關(guān)系為“一對(duì)多”的關(guān)系類(lèi)型的數(shù)據(jù)表遷移,表模式變換即將MySQL中“一”的一端對(duì)應(yīng)的多條關(guān)聯(lián)表記錄在HBase中的一條記錄進(jìn)行存儲(chǔ),而“多”的一端與“一對(duì)一”變換類(lèi)似。

      具體變換方法說(shuō)明:如圖4所示,在MySQL數(shù)據(jù)庫(kù)中有表A和表B,表A和表B的表間關(guān)系是“一對(duì)多”關(guān)系,現(xiàn)將表A的表名作為HBase中HA的表名,并創(chuàng)建表A的列族CF1以及關(guān)系表表B的列族CF2,同時(shí)將表A的所有列添加到對(duì)應(yīng)的CF1中,將與表A相關(guān)聯(lián)的N條記錄的表B的主鍵添加到列族CF2中;對(duì)于MySQL中表B類(lèi)似于“一對(duì)一”變換,完成表A和表B兩表的變換即完成“一對(duì)多”變換。

      圖4 “一對(duì)多”變換

      此類(lèi)“一對(duì)多”變換,可以在HBase中通過(guò)行鍵查詢(xún)可以得到表A的記錄,并且可以由關(guān)聯(lián)關(guān)系快速查詢(xún)到表A對(duì)應(yīng)表B的關(guān)聯(lián)信息,由“一對(duì)多”變換圖可知,存儲(chǔ)的數(shù)據(jù)看似冗余,消耗了更多的存儲(chǔ)空間,但是提高了表間數(shù)據(jù)的連接查詢(xún)效率。

      2.2.4 “多對(duì)多”變換

      此類(lèi)變換對(duì)應(yīng)于MySQL數(shù)據(jù)庫(kù)中表間關(guān)系為“多對(duì)多”的關(guān)系類(lèi)型的數(shù)據(jù)表,而且在中間表中有本表自有屬性列的情況,表模式轉(zhuǎn)換即根據(jù)中間表信息,將MySQL中兩張關(guān)聯(lián)表對(duì)應(yīng)的多條記錄在HBase中一條記錄中存儲(chǔ),同理將中間表中自有屬性根據(jù)“一對(duì)多”或“多對(duì)多”表模式轉(zhuǎn)換方式進(jìn)行轉(zhuǎn)換。

      具體轉(zhuǎn)換方法說(shuō)明:如圖5所示,在MySQL數(shù)據(jù)庫(kù)中有表A、表B以及表C,其中表A和表B表間關(guān)系是“多對(duì)多”關(guān)系,表A和表B的中間表為表C,表C中有本表自有屬性?,F(xiàn)將表A的表名作為HBase中HA的表名,并創(chuàng)建表A的列族CF1、關(guān)聯(lián)表表B的列族CF2以及中間表表C的列族CF3,同時(shí)將表A中的所有列添加到列族CF1中,將與表A相關(guān)聯(lián)的N條記錄的表B的主鍵添加到CF2中,同理將中間表表C中與表A相關(guān)聯(lián)的列添加到列族CF3中。對(duì)于表B的模式轉(zhuǎn)換同表A一樣,根據(jù)實(shí)際需求決定保存或刪除表C,即完成“多對(duì)多”變換。

      圖5 “多對(duì)多”變換

      此類(lèi)“多對(duì)多”變換,可以在HBase中根據(jù)行鍵查詢(xún)快速得到表A、表B中記錄的關(guān)聯(lián)信息,由以上變換圖可知,存儲(chǔ)的數(shù)據(jù)看似冗余,消耗了更多的存儲(chǔ)空間,但是提高了表間數(shù)據(jù)的連接查詢(xún)效率。

      2.3 遷移方法及具體實(shí)現(xiàn)

      2.3.1 遷移流程

      在完成對(duì)HBase的表模式設(shè)計(jì)之后,需要了解數(shù)據(jù)遷移流程,本文在數(shù)據(jù)遷移過(guò)程中,利用了XML標(biāo)記語(yǔ)言[15-16]對(duì)數(shù)據(jù)進(jìn)行結(jié)構(gòu)化處理的特點(diǎn),采用XML文件作為存儲(chǔ)源數(shù)據(jù)庫(kù)表的元數(shù)據(jù),由此對(duì)于基于Hadoop平臺(tái)的數(shù)據(jù)遷移流程分為以下幾個(gè)部分:

      1)建立HBase數(shù)據(jù)庫(kù),并獲得源數(shù)據(jù)庫(kù)和目標(biāo)HBase數(shù)據(jù)庫(kù)的連接信息;

      2)根據(jù)源數(shù)據(jù)庫(kù)的連接信息,獲取數(shù)據(jù)庫(kù)表的元數(shù)據(jù)并保存在XML文件中;

      3)根據(jù)XML文件信息,按照2.2節(jié)中表模式轉(zhuǎn)換原則建立HBase數(shù)據(jù)庫(kù)表模式;

      4)將關(guān)系型數(shù)據(jù)庫(kù)中的數(shù)據(jù)按照2.2節(jié)中表模式轉(zhuǎn)換原則遷移至新建立的HBase數(shù)據(jù)表中。

      整體數(shù)據(jù)遷移流程如圖6所示。

      圖6 數(shù)據(jù)遷移流程

      2.3.2 具體實(shí)現(xiàn)

      在數(shù)據(jù)遷移的主要流程中,其中第二部分中需要?jiǎng)?chuàng)建源數(shù)據(jù)庫(kù)表的元數(shù)據(jù)XML文件。在程序設(shè)計(jì)中通過(guò)以下步驟及方法獲取數(shù)據(jù)庫(kù)表元數(shù)據(jù):

      1)連接源數(shù)據(jù)庫(kù):public static Connection getConnectDB();

      2)獲取源數(shù)據(jù)庫(kù)的元數(shù)據(jù):DatabaseMetaDatadbMetaData = ct.getMetaData();

      3)獲取源數(shù)據(jù)庫(kù)所有數(shù)據(jù)表:ResultSettablesResultSet = dbMetaData.getTables(catalog,null,null,new String[]{"TABLE"});

      4)獲取源數(shù)據(jù)庫(kù)表的主鍵:ResultSetpkResultSet = dbMetaData.getPrimaryKeys(catalog,null,tableName);

      5)獲取源數(shù)據(jù)庫(kù)表的外鍵:ResultSetfkResultSet = dbMetaData.getImportedKeys(catalog,null,tableName);

      6)獲取源數(shù)據(jù)庫(kù)表的字段名:rsMetaData.getColumnName(i);

      在獲取源數(shù)據(jù)庫(kù)所有表的元數(shù)據(jù)的基礎(chǔ)上,創(chuàng)建保存源數(shù)據(jù)庫(kù)表元數(shù)據(jù)的XML文件流程如圖7所示。

      圖7 創(chuàng)建XML文件流程圖

      根據(jù)創(chuàng)建XML文件流程,創(chuàng)建的XML文件格式如下:

      tableName

      primaryKeyName

      ColumnType

      ColumnTypeLength

      ForeignKeyName

      ForeignKeyColumnName

      ...

      columnName

      columnType

      columnLength

      ...

      在此XML文件中記錄著源數(shù)據(jù)庫(kù)中所有表的元數(shù)據(jù),主要包括表名、主鍵、外鍵所在表、字段名及字段類(lèi)型,通過(guò)源數(shù)據(jù)庫(kù)表元數(shù)據(jù)文件創(chuàng)建目標(biāo)數(shù)據(jù)庫(kù)HBase的表模式。

      創(chuàng)建HBase表模式步驟如下:

      1)通過(guò)高性能的DOM4J方式讀取源數(shù)據(jù)庫(kù)表元數(shù)據(jù)XML文件;

      2)根據(jù)XML文件中

      標(biāo)簽,在HBase中創(chuàng)建HBase數(shù)據(jù)表及主表列族;

      3)根據(jù)XML文件中標(biāo)簽,根據(jù)2.2節(jié)表模式轉(zhuǎn)換原則,創(chuàng)建外鍵列族。

      步驟2)中是通過(guò)HTableDescriptor對(duì)象和HColumnDescriptor對(duì)象來(lái)創(chuàng)建HBase數(shù)據(jù)表及主表列族,主要方法如下:

      String tableName = table.get(0).getText();

      if(admin.tableExists(tableName)){

      admin.disableTable(tableName);

      admin.deleteTable(tableName);

      }else{

      HTableDescriptor t =new HTableDescriptor

      (tableName.getBytes());

      HColumnDescriptorcf1 = new HColumnDescriptor(("CF_"+tableName)

      .getBytes());

      t.addFamily(cf1);

      admin.createTable(t);

      }

      如果在遷移過(guò)程中有符合2.2節(jié)所介紹的幾種轉(zhuǎn)換原則的數(shù)據(jù)表,則需要在完成主表的及主表列族的創(chuàng)建后,對(duì)相關(guān)外鍵表的列族進(jìn)行創(chuàng)建,同樣使用HTableDescriptor對(duì)象和HColumnDescriptor對(duì)象來(lái)進(jìn)行創(chuàng)建操作,具體流程如圖8所示。

      圖8 HBase數(shù)據(jù)庫(kù)表模式創(chuàng)建流程

      完成創(chuàng)建HBase數(shù)據(jù)庫(kù)的表模式后,接著進(jìn)行源數(shù)據(jù)庫(kù)數(shù)據(jù)向目標(biāo)數(shù)據(jù)庫(kù)的遷移操作,本文中自定義的HBase表模式特點(diǎn)及主要要體現(xiàn)數(shù)據(jù)遷移完成后的數(shù)據(jù)查詢(xún)及存儲(chǔ)性能,故在此選擇使用HBase中的Put類(lèi)進(jìn)行數(shù)據(jù)遷移。首先通過(guò)getConnectDB()方法連接源數(shù)據(jù)庫(kù)MySQL數(shù)據(jù)庫(kù),使用SQL查詢(xún)語(yǔ)句獲取MySQL數(shù)據(jù)庫(kù)中數(shù)據(jù),然后通過(guò)HBaseConfiguration配置連接HBase數(shù)據(jù)庫(kù),根據(jù)2.2節(jié)所定義的表模式轉(zhuǎn)換原則,操作HBase中Put對(duì)象將查詢(xún)出的MySQL數(shù)據(jù)庫(kù)數(shù)據(jù)插入到HBase數(shù)據(jù)表中,即根據(jù)所設(shè)計(jì)的遷移方法完成數(shù)據(jù)遷移工作。

      3 測(cè)試與比較

      為了測(cè)試本文所設(shè)計(jì)的數(shù)據(jù)遷移方法在自動(dòng)化、查詢(xún)性能及存儲(chǔ)方面的性能,選用了業(yè)界使用比較廣泛的Sqoop[17]遷移工具對(duì)MySQL數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行遷移,并在不同數(shù)據(jù)集下在上述三個(gè)方面對(duì)兩種遷移方式的性能進(jìn)行比較,由于實(shí)驗(yàn)室條件限制,實(shí)驗(yàn)中選擇了其中500萬(wàn)條數(shù)據(jù)進(jìn)行測(cè)試,實(shí)驗(yàn)結(jié)果如下:

      1)操作性能方面,使用Sqoop遷移工具進(jìn)行數(shù)據(jù)遷移時(shí),需要在命令行中選擇數(shù)據(jù)遷移入得列族及指定RowKey進(jìn)行遷移,而本文所設(shè)計(jì)的遷移方法在完成通用代碼后均是自動(dòng)完成上述工作,這一點(diǎn)比Sqoop遷移工具操作方便,自動(dòng)化程度高。

      2)查詢(xún)性能方面,由于本文所設(shè)計(jì)的遷移方法在2.2節(jié)表模式設(shè)計(jì)階段對(duì)數(shù)據(jù)的連接查詢(xún)進(jìn)行了深度優(yōu)化,而Sqoop工具只是遷移數(shù)據(jù)表中的數(shù)據(jù)沒(méi)有對(duì)表間關(guān)系進(jìn)行遷移,所以本文所設(shè)計(jì)的遷移方法與Sqoop工具相比,表間的連接查詢(xún)性能得到了很大的提高。在此本文以MySQL數(shù)據(jù)庫(kù)中常見(jiàn)的表間連接查詢(xún)“select od.userName,od.phoneNumfrom orderdetail od, orderinfooi where od.OrderID=oi.OrderID”為例,實(shí)驗(yàn)結(jié)果圖9所示。

      圖9 查詢(xún)性能比較

      圖10 存儲(chǔ)性能比較

      3)在存儲(chǔ)性能方面,因?yàn)楸疚乃O(shè)計(jì)的遷移方法在進(jìn)行表模式轉(zhuǎn)換時(shí),為優(yōu)化表間連接查詢(xún)效率進(jìn)行了冗余處理,所以這方面與Sqoop相比,數(shù)據(jù)遷移后所占用的存儲(chǔ)空間會(huì)較大,實(shí)驗(yàn)結(jié)果如圖10所示。

      通過(guò)以上的實(shí)驗(yàn)分析,本文所設(shè)計(jì)的數(shù)據(jù)遷移方法是以數(shù)據(jù)冗余犧牲少量存儲(chǔ)空間換取表間連接查詢(xún)性能的極大提高,在大數(shù)據(jù)時(shí)代,為了爭(zhēng)取到更高的查詢(xún)效率,犧牲少量存儲(chǔ)空間是值得的。

      4 結(jié)論

      在利用本文基于Hadoop平臺(tái)的數(shù)據(jù)遷移方法進(jìn)行MySQL向HBase數(shù)據(jù)遷移,較同類(lèi)遷移工具顯得更加方便,而且該遷移方法不僅僅是進(jìn)行系統(tǒng)歷史數(shù)據(jù)的遷移,而且將MySQL數(shù)據(jù)庫(kù)中的表間關(guān)系根據(jù)設(shè)定原則在HBase數(shù)據(jù)庫(kù)中進(jìn)行重新設(shè)計(jì)表模式,雖然這樣的表模式設(shè)計(jì)浪費(fèi)了一定的數(shù)據(jù)存儲(chǔ)空間,但是相對(duì)于其提高的查詢(xún)效率帶來(lái)的利益來(lái)說(shuō),損失一定的存儲(chǔ)空間是值得的。本文所研究的數(shù)據(jù)遷移問(wèn)題,提供的一種從關(guān)系型數(shù)據(jù)庫(kù)向HBase進(jìn)行數(shù)據(jù)遷移的方法,在當(dāng)今大數(shù)據(jù)時(shí)代的那些既想保存系統(tǒng)歷史數(shù)據(jù)又想發(fā)展大數(shù)據(jù)研究的互聯(lián)網(wǎng)企業(yè)中,具有很大的應(yīng)用價(jià)值。

      參考文獻(xiàn):

      [1] 何 瑩. “大數(shù)據(jù)時(shí)代”的管理創(chuàng)新[J].人力資源,2013(10):62-63.

      [2] 周亞翠. 關(guān)系型數(shù)據(jù)庫(kù)[J].現(xiàn)代情報(bào),1998(6):7-8.

      [3] Stonebraker M. SQL databases v. No SQL databases[J]. Communications of the ACM, 2010, 53(4): 10-11.

      [4] George L.HBase:the definitive guide[M].Sebastopol,USA:O’Reilly Media,2011.

      [5] Hadoop[EB/OL]. [2011-06]. http://hadoop.apache.org/.

      [6] Borthakur D. The Hadoop distributed file system: Architecture and design[DB/OL].http://hadoop.apache.org/common/docs/r0.18.0/hdfs_design.pdf/.

      [7] Lee K H, Lee Y J. Parallel data processing with Map Reduce: a survey[J]. ACMSIGMOD Record. 2011, 40(4):11-20.

      [8] Apache HBase. Apache HBaseProject[EB/OL].http://hadoop.apache.org/hbase/, 2014-10-28.

      [9] LI C. Transforming relational database into HBase: A case study[A].IEEE. Software Engineering and Service Sciences (ICSESS)[C]. ICSESS, 2010:683-687.

      [10] George L. HBase: the definitive guide[Z]. USA: O'Reilly Media, Inc., 2011.

      [11] 郝樹(shù)魁. Hadoop HDFS和MapReduce架構(gòu)淺析[J].郵電設(shè)計(jì)技術(shù),2012(7):37-42.

      [12] Kolaitis P.Schema mappings, data exchange and metadata management[A]. Proceedings of the 24thACM Symposium on Principles of Database Systems(PODS)[C].2005:61-75.

      [13] 李 剛.XML講義[M].北京:電子工業(yè)出版社,2011.

      [14] Arenas M, Libkin L.XML data exchange:consistency and query answering[A]. in Proceedings of the 28thACM Symposium on Principles of Database Systems(PODS)[C].2005:13-24.

      [15] Apache Sqoop. Apache SqoopProject[EB/OL].http://hadoop.apache.org/, 2014-10-09.

      [16] 付志成.商品比價(jià)系統(tǒng)中大數(shù)據(jù)遷移及數(shù)據(jù)轉(zhuǎn)換技術(shù)研究[D].北京:北京郵電大學(xué),2015.

      [17] 楊寒冰,趙 龍,賈金原. HBase數(shù)據(jù)庫(kù)遷移工具的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)科學(xué)與探索,2013(3):236-246.

      猜你喜歡
      存儲(chǔ)空間數(shù)據(jù)表數(shù)據(jù)庫(kù)
      基于多種群協(xié)同進(jìn)化算法的數(shù)據(jù)并行聚類(lèi)算法
      蘋(píng)果訂閱捆綁服務(wù)Apple One正式上線
      湖北省新冠肺炎疫情數(shù)據(jù)表
      黨員生活(2020年2期)2020-04-17 09:56:30
      用好Windows 10保留的存儲(chǔ)空間
      基于列控工程數(shù)據(jù)表建立線路拓?fù)潢P(guān)系的研究
      數(shù)據(jù)庫(kù)
      數(shù)據(jù)庫(kù)
      數(shù)據(jù)庫(kù)
      數(shù)據(jù)庫(kù)
      圖表
        
        

            
            

                汕尾市| 酉阳| 启东市| 历史| 灯塔市| 鲁山县| 黑河市| 滁州市| 沁源县| 普宁市| 宁化县| 体育| 余干县| 于田县| 西藏| 涡阳县| 抚州市| 浦北县| 黄龙县| 托克逊县| 宁蒗| 霸州市| 城固县| 桂平市| 五莲县| 泰宁县| 丰县| 绥宁县| 忻州市| 卢湾区| 浮梁县| 抚松县| 临朐县| 汨罗市| 崇义县| 宝鸡市| 图木舒克市| 淄博市| 钟祥市| 沁水县| 潍坊市|