国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種關(guān)系型數(shù)據(jù)非結(jié)構(gòu)化的轉(zhuǎn)換方法

2020-11-19 03:12
榆林學(xué)院學(xué)報(bào) 2020年6期
關(guān)鍵詞:單元格集群考試

林 徐

(1.安徽三聯(lián)學(xué)院 計(jì)算機(jī)工程學(xué)院 ,安徽 合肥 230601;2.安徽省普通高校交通信息與安全重點(diǎn)實(shí)驗(yàn)室,安徽 合肥 230601)

隨著互聯(lián)網(wǎng)技術(shù)的進(jìn)步和進(jìn)步,人們?cè)谌粘I钪性絹碓蕉嗟厥褂没ヂ?lián)網(wǎng)。因此,大量的數(shù)據(jù)是以各種格式生成的。如何存儲(chǔ)數(shù)據(jù)、分析數(shù)據(jù)并找到有用的信息成為重要的問題。云計(jì)算技術(shù)正是針對(duì)這些問題而發(fā)展起來的,如Google在2003年、2004年和2006年分別針對(duì)分布式文件系統(tǒng)、并行計(jì)算和分布式計(jì)算以及NoSQL數(shù)據(jù)庫提出的Google文件系統(tǒng)(GFS)、MapReduce 架構(gòu)和BigTable。Google提出了一個(gè)將數(shù)據(jù)分割成小塊并在節(jié)點(diǎn)上執(zhí)行相關(guān)作業(yè)的方法框架。結(jié)果將從節(jié)點(diǎn)收集、集成,然后返回到用戶。這樣,MapReduce將單節(jié)點(diǎn)處理作業(yè)轉(zhuǎn)換為并行處理作業(yè),提高了執(zhí)行效率。

隨著“云計(jì)算”技術(shù)的普及,一方面,現(xiàn)在仍有多數(shù)企業(yè)使用傳統(tǒng)的關(guān)系數(shù)據(jù)庫(RDB)處理業(yè)務(wù)。伴隨著數(shù)據(jù)的爭(zhēng)奪,RDB遇到了海量數(shù)據(jù)的處理瓶頸。另一方面,使用云數(shù)據(jù)庫處理數(shù)據(jù)是一種可行的解決方案。這就需要企業(yè)將數(shù)據(jù)從RDB遷移到云數(shù)據(jù)庫,進(jìn)行分布式存儲(chǔ)和非結(jié)構(gòu)化轉(zhuǎn)換,以提高數(shù)據(jù)庫使用方面的性能。

然而,NoSQL與傳統(tǒng)的數(shù)據(jù)庫不同,數(shù)據(jù)文件在不同的虛擬機(jī)(VM)中被分割和分發(fā)[1]。RDBMS將數(shù)據(jù)存儲(chǔ)在表(關(guān)系)中,表(關(guān)系)之間又有關(guān)系。從而數(shù)據(jù)被格式化和索引,因此從這些關(guān)系中獲取相關(guān)數(shù)據(jù)可能需要從2x表中提取它們,其中x>=1。然而,大多數(shù)NoSQL存儲(chǔ)(例如HBase)沒有標(biāo)準(zhǔn)化和索引。數(shù)據(jù)可以轉(zhuǎn)儲(chǔ)到一個(gè)或幾個(gè)獨(dú)立的表中,從而減輕了對(duì)聯(lián)接操作的需要。HBase不支持聯(lián)接操作,因此,如果執(zhí)行聯(lián)接操作,并且表的數(shù)據(jù)分布并存儲(chǔ)在不同的VM上,則會(huì)出現(xiàn)問題。這是本文要解決的問題。

1 關(guān)系型數(shù)據(jù)導(dǎo)入NoSQL

1.1 相關(guān)平臺(tái)與工具的特點(diǎn)

1.1.1 Hadoop

Hadoop是一個(gè)Apache頂級(jí)開源項(xiàng)目,它提供了一個(gè)分布式系統(tǒng)架構(gòu),主要由Hadoop分布式文件系統(tǒng)(HDFS)和MapReduce組成。HDFS是在GFS概念的基礎(chǔ)上發(fā)展起來的,它將節(jié)點(diǎn)連接在一起,形成一個(gè)大規(guī)模的分布式文件系統(tǒng)。HDFS設(shè)計(jì)用于處理大量數(shù)據(jù),并提供安全的存儲(chǔ)體系結(jié)構(gòu)以避免硬件故障。它還設(shè)計(jì)了一次讀寫多文件訪問模型,提供了簡(jiǎn)單的一致性機(jī)制,提高了數(shù)據(jù)轉(zhuǎn)換的吞吐量。HDFS在不同的數(shù)據(jù)節(jié)點(diǎn)上復(fù)制數(shù)據(jù),以確保在任何數(shù)據(jù)節(jié)點(diǎn)崩潰時(shí)用戶仍然可以訪問其數(shù)據(jù)[2]。

1.1.2 HBase

HBase也是一個(gè)Apache開源項(xiàng)目,是一個(gè)基于HDFS的分布式容錯(cuò)、高度可伸縮、面向列的noSQL數(shù)據(jù)庫。HBase用于對(duì)非常大的數(shù)據(jù)庫進(jìn)行實(shí)時(shí)讀寫隨機(jī)訪問。從邏輯角度看,HBase中的數(shù)據(jù)是按標(biāo)簽表組織的。每個(gè)HBase表都存儲(chǔ)為一個(gè)多維稀疏映射,包含行和列,每一行都有一個(gè)排序鍵和任意數(shù)量的列。表單元格已版本化。默認(rèn)情況下,它們的版本是HBase在插入單元格時(shí)自動(dòng)分配的時(shí)間戳。對(duì)于同一行鍵,每個(gè)特定列可以有多個(gè)版本。每個(gè)單元格都由列族和列名標(biāo)記,因此程序始終可以標(biāo)識(shí)給定單元格包含的數(shù)據(jù)項(xiàng)類型。單元格的內(nèi)容是一個(gè)不間斷的字節(jié)數(shù)組,由Table+Row Key+Column Family:Column+Timestamp唯一標(biāo)識(shí)。表行按行鍵排序,行鍵也是字節(jié)數(shù)組,用作表的主鍵。所有表訪問都是通過表主鍵進(jìn)行的,對(duì)HBase表的任何掃描結(jié)果都會(huì)被掃描到Map/Reduce作業(yè)中。根據(jù)Map/Reduce作業(yè)結(jié)果到更快的查詢響應(yīng)時(shí)間和更好的總體吞吐量的并行掃描[3]。

1.1.3 Sqoop

圖1顯示了Apache Sqoop系統(tǒng)架構(gòu)。Sqoop專注于在RDB和Hadoop之間遷移大量數(shù)據(jù)。通過Sqoop,用戶可以輕松地以命令行模式將數(shù)據(jù)遷移到HDFS或HBase。

圖1 Apache Sqoop 系統(tǒng)架構(gòu)

Apache Sqoop是為從RDB到NoSQL數(shù)據(jù)庫的數(shù)據(jù)遷移而開發(fā)的。Sqoop在2012年成為頂級(jí)項(xiàng)目,用戶可以將大量數(shù)據(jù)遷移到云環(huán)境中,并通過云技術(shù)進(jìn)行訪問。Apache Sqoop將一個(gè)表分成四部分,并由Mapper通過JDBC連接將它們遷移到HDFS或HBase[4]。

1.2 關(guān)系型數(shù)據(jù)的導(dǎo)入

本文利用Apache Sqoop將MySQL關(guān)系數(shù)據(jù)庫的數(shù)據(jù)導(dǎo)入到Hadoop平臺(tái)中HBase非結(jié)構(gòu)化數(shù)據(jù)庫中。導(dǎo)入數(shù)據(jù)的過程分為兩個(gè)步驟,第一步,收集與導(dǎo)入的數(shù)據(jù)相關(guān)的所有元數(shù)據(jù)信息。第二步是向Hadoop集群提交Map作業(yè)。在這一步中,實(shí)際的數(shù)據(jù)傳輸是通過使用在上一步中捕獲的元數(shù)據(jù)來完成的。導(dǎo)入的數(shù)據(jù)保存在HDFS的目錄中。默認(rèn)情況下,這些文件使用逗號(hào)分隔的字段,用新行分隔不同的記錄,這樣就很容易覆蓋已復(fù)制的數(shù)據(jù)的格式。

Apache Sqoop客戶端可以為導(dǎo)入過程設(shè)置映射任務(wù)的數(shù)量。這意味著從MySQL獲取數(shù)據(jù)的并行查詢的數(shù)量可以由客戶端控制。圖2顯示了從MySQL導(dǎo)入100條記錄的兩個(gè)、三個(gè)和四個(gè)Map作業(yè)的結(jié)果。表1顯示了用于導(dǎo)入100條記錄的兩個(gè)、三個(gè)和四個(gè)Map作業(yè)的比較。

表1 Map作業(yè)數(shù)和時(shí)間關(guān)系

圖2 Map作業(yè)數(shù)和時(shí)間關(guān)系圖

2 模式轉(zhuǎn)換和相關(guān)性感知技術(shù)

2.1 關(guān)系模式非結(jié)構(gòu)化的轉(zhuǎn)換

關(guān)系模式和非關(guān)系模式是兩種完全不同的數(shù)據(jù)庫模式。因此,兩種模式間的轉(zhuǎn)換也是關(guān)鍵的問題之一。在關(guān)系數(shù)據(jù)庫中,存在著多表聯(lián)接相互關(guān)聯(lián)的特點(diǎn)。例如以下的3個(gè)關(guān)系(表):

●學(xué)校(學(xué)校編號(hào),名稱,語言)

●考試(編號(hào),學(xué)校號(hào),通過人數(shù),失敗人數(shù),總?cè)藬?shù),考種編號(hào))

●考試種類(編號(hào),名稱,網(wǎng)站地址)

該模式表示一個(gè)簡(jiǎn)單的學(xué)??荚囉涗?。每所學(xué)??梢哉惺諏W(xué)生參加任何數(shù)量的考試,每項(xiàng)考試都由一個(gè)特定的考試機(jī)構(gòu)管理。所以基本上我們有兩個(gè)一對(duì)多的關(guān)系,就是學(xué)校->考試和考試種類->考試。這種關(guān)系顯示了RDBMS中關(guān)系或表之間的相關(guān)性。由于HBase或大多數(shù)NoSQL存儲(chǔ)中的表之間沒有嚴(yán)格的關(guān)系,我們必須找到一種方法來標(biāo)識(shí)這些數(shù)據(jù)并將它們合并到單個(gè)或幾個(gè)獨(dú)立的表中。

我們將轉(zhuǎn)換過程分為兩個(gè)階段。在第一階段,根據(jù)HBase的數(shù)據(jù)模型和特點(diǎn),提出了一種啟發(fā)式的方法將源數(shù)據(jù)庫的關(guān)系模式轉(zhuǎn)換為HBase模式。然后,第二階段生成源架構(gòu)和目標(biāo)架構(gòu)之間的映射。因此,源數(shù)據(jù)庫中的數(shù)據(jù)可以根據(jù)在第二階段生成的模式映射轉(zhuǎn)換為目標(biāo)表示。

我們的做法是將相關(guān)數(shù)據(jù)存儲(chǔ)在一起。這包括以下三個(gè)重要步驟。以上述關(guān)系模式為例,我們將其轉(zhuǎn)換為HBase模式。假定學(xué)校表中有2行,主鍵編號(hào)是000078和000079。其中000078在考試表中有2條記錄通過學(xué)校號(hào)這個(gè)外鍵與之關(guān)聯(lián)。也就是說,這兩個(gè)表中有相關(guān)的數(shù)據(jù)。我們將按照以下步驟將架構(gòu)更改為兼容的HBase架構(gòu)。

步驟1:將表表示為列族:這涉及將所有或相關(guān)的RDB表存儲(chǔ)在一個(gè)HBase表中。在這一小步中,我們必須留意將有多少列族存在在HBase表中。如果表之間存在關(guān)系,則可以將其數(shù)據(jù)合并到一個(gè)列族中。HBase不能處理表中超過三列的族。另一種方法是有幾個(gè)獨(dú)立的HBase表,這些表的源只是RDBMS模式中的相關(guān)表。從上述關(guān)系模式中的表中,我們的轉(zhuǎn)換生成了兩個(gè)列族。為了簡(jiǎn)單起見,我將分別使用school和exam來表示學(xué)校和考試表。例如,學(xué)校表轉(zhuǎn)換成school:id,school:name,school:language這樣的列族??荚嚤硪沧魍瑯拥霓D(zhuǎn)換。

步驟2:將引用的數(shù)據(jù)放在一個(gè)RowKey下(僅限JOINS),這將幫助我們?cè)趶亩鄠€(gè)表中提取數(shù)據(jù)時(shí)避免交叉連接。

步驟3:?jiǎn)卧癜姹镜淖饔?僅限連接):?jiǎn)卧癜姹編椭覀儽A舯淼亩鄠€(gè)面,例如,考試表存儲(chǔ)在一個(gè)RowKey下,而不必將它們存儲(chǔ)在許多新的RowKey下。因此,如果我們想檢索與特定學(xué)校相關(guān)聯(lián)的所有考試,我們可以只獲取該RowKey的考試列族的所有版本。這有助于我們避免交叉相乘,而這是非常昂貴的,它完全取決于你的物理內(nèi)存。默認(rèn)情況下HBase檢索的是最新版本,但您也可以通過掃描來獲取特定RowKey->ColumnFamily的所有版本

2.2 相關(guān)性感知技術(shù)

盡管Sqoop可以方便和有效地將批量數(shù)據(jù)導(dǎo)入到Hadoop平臺(tái)的分布式存儲(chǔ)中。但是,由于執(zhí)行Mappers的節(jié)點(diǎn)是由Hadoop隨機(jī)決定的。因此,數(shù)據(jù)被隨機(jī)存儲(chǔ)在數(shù)據(jù)節(jié)點(diǎn)上,這會(huì)導(dǎo)致數(shù)據(jù)的局部性不好。

在數(shù)據(jù)庫操作中,查詢被用來訪問數(shù)據(jù)庫和顯示具有不同含義的數(shù)據(jù)。JOIN是根據(jù)特定列合并兩個(gè)表的常用操作。如果兩個(gè)表的數(shù)據(jù)分布在8個(gè)數(shù)據(jù)節(jié)點(diǎn)上,則為了執(zhí)行JOIN操作,網(wǎng)絡(luò)上的數(shù)據(jù)轉(zhuǎn)換和傳遞就不可避免。網(wǎng)絡(luò)上的數(shù)據(jù)訪問速度明顯慢于本地磁盤。因此,為了避免網(wǎng)絡(luò)上的數(shù)據(jù)轉(zhuǎn)換,提高JOIN操作的性能,需要增加數(shù)據(jù)的局部性。因此,我們采用相關(guān)性感知技術(shù),根據(jù)必要信息將數(shù)據(jù)分配給節(jié)點(diǎn)來解決這個(gè)問題。

關(guān)系數(shù)據(jù)庫通常有一個(gè)日志文件來存儲(chǔ)操作,包括配置、修改和查詢。日志文件通常用于監(jiān)視數(shù)據(jù)庫。此外,記錄的操作可以視為訪問數(shù)據(jù)庫的查詢。因此,一旦分析了日志文件,我們就可以知道查詢?cè)L問頻率較高的表。

表2通過分析日志文件中的查詢,演示了一個(gè)顯示表關(guān)聯(lián)度(TC)的矩陣。以Table1和Table2為例,度為15,Table示根據(jù)歷史記錄有15個(gè)查詢同時(shí)訪問這兩個(gè)Table。同樣,根據(jù)日志,有45個(gè)查詢?cè)L問Table4和Table5。

表2 表相關(guān)性

除了表的相關(guān)性程度外,還可以考慮表的大小。在某些情況下,即使表的相關(guān)性很高,也不必將兩個(gè)相對(duì)較小的表放在一起。Hadoop將一個(gè)任務(wù)分配給其中一個(gè)節(jié)點(diǎn),該節(jié)點(diǎn)擁有更多的數(shù)據(jù)以降低數(shù)據(jù)轉(zhuǎn)換的成本。在本研究中,我們也應(yīng)用此概念,以根據(jù)表格大小來改善效能。

以下給出了普通Sqoop方法和采用了相關(guān)性感知技術(shù)后的Sqoop(CA_Sqoop)在考慮了表布局后的性能對(duì)比。其中參數(shù):

表的大?。?~10GB;

表相關(guān)性:1~1000;

節(jié)點(diǎn)容量:2~50;

表數(shù)量:20~300;

節(jié)點(diǎn)數(shù):60~100。

圖3 引入20個(gè)表到小集群

圖3和圖4是將表導(dǎo)入集群時(shí)節(jié)點(diǎn)容量不同的結(jié)果??梢钥闯?,隨著節(jié)點(diǎn)容量的增加,無論是小集群還是大集群,Sqoop導(dǎo)入數(shù)據(jù)后,集群處理能力,即數(shù)據(jù)局部性,變化不大。這是由于Sqoop數(shù)據(jù)導(dǎo)入后隨機(jī)存儲(chǔ)的原因。圖3給出了使用小集群的數(shù)據(jù)局部性的改進(jìn),而圖4給出了使用大集群的結(jié)果??梢姡褂昧讼嚓P(guān)性感知技術(shù)后的Sqoop在提高節(jié)點(diǎn)容量的同時(shí),也克服了Sqoop的數(shù)據(jù)局部性問題。

圖4 引入100個(gè)表到大集群

3 結(jié)論

利用Sqoop,可以輕松地將關(guān)系數(shù)據(jù)庫的數(shù)據(jù)批量導(dǎo)入到Hadoop分布式集群中。從而實(shí)現(xiàn)數(shù)據(jù)的非結(jié)構(gòu)化。在數(shù)據(jù)批量導(dǎo)入過程中,Map作業(yè)數(shù)可以加快數(shù)據(jù)導(dǎo)入的速度,但對(duì)裝載的速度影響不大。在數(shù)據(jù)轉(zhuǎn)換過程中要充分考慮到源數(shù)據(jù)的關(guān)聯(lián)度,合理地設(shè)計(jì)NoSQL的列族。同時(shí),通過日志分析表間的相關(guān)性,安排數(shù)據(jù)在各節(jié)點(diǎn)間的布局,可以大大提升數(shù)據(jù)轉(zhuǎn)換的性能。

猜你喜歡
單元格集群考試
流水賬分類統(tǒng)計(jì)巧實(shí)現(xiàn)
玩轉(zhuǎn)方格
玩轉(zhuǎn)方格
海上小型無人機(jī)集群的反制裝備需求與應(yīng)對(duì)之策研究
一種無人機(jī)集群發(fā)射回收裝置的控制系統(tǒng)設(shè)計(jì)
淺談Excel中常見統(tǒng)計(jì)個(gè)數(shù)函數(shù)的用法
Python與Spark集群在收費(fèi)數(shù)據(jù)分析中的應(yīng)用
Japanese Artificial Intelligence Robotto Take Entrance Examinations
勤快又呆萌的集群機(jī)器人
你考試焦慮嗎?