近年來,隨著計算機技術的發展,各領域的數據增長越來越快。這些數據來自方方面面,從搜集天氣情況的感測器、接入社交媒體網站的指令、數碼圖片、在線的視頻資料,到網絡購物的交易記錄、手機的全球定位系統信號等。隨著數據規模的急劇膨脹,各行業累積的數據量越來越巨大,數據類型也越來越多、越來越復雜,已經超越了傳統數據管理系統、處理模式的能力范圍,傳統的串行數據庫系統已經難以適應這種飛速增長的應用需求。在這種需求的驅動下,云計算中的MapReduce技術、并行數據庫技術以及云計算與數據庫相結合的技術應運而生。
本文在大數據的背景下,對大數據處理技術進行了探討,將其分為三類:MapReduce技術、并行數據庫技術和云計算與數據庫相結合的技術。通過研究這些技術的架構、適用環境,本文提出了一種全新的云計算數據庫——數據立方。
1.云計算相關技術
1.1 大數據處理技術——MapReduce
MapReduce計算架構把運行在大規模集群上的并行計算過程簡單抽象為兩個函數:Map和Reduce,也就是分解與規約。簡單地說,MapReduce就是“任務的分解與結果的匯總”。程序將大數據分解為多個數據塊由Map函數處理,Reduce把分解后多任務處理產生的中間結果匯總起來,得到最終結果。適合MapReduce處理的任務特征為:待處理的大規模數據集可以切分為多個小的數據集,并且每一個小數據集都可以完全并行地進行處理。
圖1介紹了用MapReduce處理大數據集的過程。一個MapReduce操作可以分為兩個階段:Map階段和Reduce階段。
圖1 MapReduce處理大數據集的過程
在映射階段,MapReduce并行計算架構將用戶的輸入數據切分為肘個數據段,每個數據段對應1個Map任務。每一個Map函數的輸入是數據段中的鍵值對<Kl,V1>集合,Mask函數是用戶繼承MapReduce并行計算架構而編寫的,Map操作調用此函數,輸出一組中間結果,即鍵值對<K2,V2>集合。接下來,按照中間結果集合的K2將中間結果集進行排序,生成一個新的<K2,list(V2)>集合,使得對應同一個K2的所有值的數據都聚集在一起。然后,按照K2的范圍將這些元組分割為月個片斷,對應Reduce任務的數目。在規約階段,每一個Reduce操作的輸入是一個<K2,list(V2)>片斷,Reduce操作調用用戶定義的Reduce函數,生成用戶需要的鍵值對<K3,V3>進行輸出。
這種簡潔的并行計算模型在系統層面解決了可用性、擴展性、容錯性等問題,是非關系數據管理和分析技術的典型代表。MapReduce是面向廉價計算機組成的大規模集群設計的,其非共享結構、松耦合性和較強的容錯能力帶來了較強的擴展能力,同時,MapReduce在工業界被廣泛應用,Google、twitter、Facebook、Yahoo等廠商對其進行了深度的改進和擴展。此外,MapReduce的<key,value>存儲模型能夠存儲任意格式的數據,Map和Reduce函數可以進行各種復雜的數據處理,這也使得程序員的負擔加重,在對上層業務的開發效率上不如結構化查詢語言(SQL)簡單。
在相同的硬件條件下,對于有具體條件的查詢來說,并行數據庫閉的性能是遠遠超過MapReduce的,但是對于在大數據上的復雜統計業務來說,MapReduce在速度上會占有一定優勢,MapReduce是為非結構化大數據的復雜處理而設計的,這些業務具有一次性處理的特點,此外由于采取了全數據掃描的模式以及對中間結果逐步匯總的策略,使其在擁有良好擴展能力和容錯能力的同時也導致了較高的磁盤和網絡I/O的負載以及較高的數據解析代價。
1.2 并行數據庫技術
在20世紀80年代,數據庫流行的同時并行數據庫也開始起源,早期并行數據庫(如Gamma和Grace)的基礎架構被沿用至今,當前的并行數據庫主要有Oracle的Exdata、EMC的Greenplum、Temdata,這些數據庫都支持標準SQL。并行數據庫一般可以分為無共享架構(Shared-nothing)和磁盤共享存儲架構(shared-disk)兩種存儲架構,如圖2所示。這兩種架構有各自的優缺點,在Shared—nothing系統中,數據集被切分成為了多個子集,集群中每個節點分別存儲一個子集在本地磁盤上,一般來說,shared-nothing系統可以提供很高的并行I/O和并行計算能力,但是也有多節點事務處理、數據傳輸以及數據傾斜等問題。在Shared-disk系統中,數據被集中存儲,所有的數據庫節點都可以訪問存儲系統的任意一個磁盤,因此數據也沒有必要被切分,這也避免了數據傾斜的問題,這種系統主要的缺陷在于較低的I/O帶寬和擴展能力。
圖2 無共享架構(Shared-nothing)和磁盤共享存儲架構(Shared-disk)
1.3 云計算與數據庫相結合的技術
與數據庫相結合的云計算技術一般指的是MapReduce技術,當前主要有Temdata公司的Aster Data和耶魯大學提出的HadoopDB。
Aster Data將MapReduce與SQL引擎相結合,針對大數據處理和分析提出了SQL小印Reduce框架,用戶可以使用JAVA、C++等多種語言在AsterData的并行框架上編寫MapReduce函數,編寫的函數可以作為一個子查詢在SQL中使用,從而獲得SQL的易用性和MapReduce的開放性。同時Aster Data能夠對多結構化數據、原始數據進行處理和分析,并擁有豐富的統計軟件包可以講數據分析推向數據庫內進行,提升了數據分析性能。
在HadoopDB中,系統清晰地分成兩層,上層使用Hadoop進行任務的分解和調度,下層用RDBMS(PostgreSQL)進行數據的查詢和處理,在處理查詢時,執行的是SQLto mapReducetoSQL操作過程(SMS planner)。該工作的創新之處是:試圖利用Hadoop的任務調度機制提高系統的擴展性和容錯性,以解決大數據分析的橫向擴展問題;利用RDBMS實現數據存儲和查詢處理,以解決性能問題。在其性能實驗中,HadoopDB的性能仍然落后于關系數據庫系統。如何提升MapReduce的性能,已引起研究人員的高度重視,研究人員提出了MapReduce的各種優化技術,獲得了重要的性能改進。Yale大學Abadi領導的小組正在使用包括列存儲、持續裝載和分析等技術,以改進HadoopDB的性能。
圖3 所示是HadoopDB的一個構圖,在原來的Hadoop與hive的基礎上,增加了一些組件:其中SMSPlanner的作用是在hive解析SQL語句生成MapReduce任務樹之后,對MapReduce任務樹進行優化,指導Hadoop去并行數據庫中執行SQL。Catalog里面存儲了并行數據庫的一些信息。Data loader負責把原始數據加載到并行數據庫中,需要完成的工作是對原始數據的劃分。Databaseconnector用于向各個節點傳遞信息,包含了節點里面數據庫的鏈接信息和需要執行的SQL語句。ParalledDataBase用于代替HDFS在各個節點上存儲數據。
圖3 HadoopDB結構圖
2.云計算數據庫——數據立方
通過對MapReduce、并行數據庫和兩者的混合技術研究,南京云創存儲科技有限公司推出了實施云計算數據庫——數據立方,該系統通過引入索引模塊、并行執行架構以及讀取本地磁盤的執行方式,使查詢達到了實時完成、簡單易用、高可靠安全的效能,使艾字節級的數據能夠秒級處理,極大地提高了用戶執行查詢操作后的使用效率,不僅在查詢和檢索這部分數據的時候具有非常高的性能優勢,數據立方還可以支持數據倉庫存儲、數據深度挖掘和商業智能分析等、業務。
2.1 數據立方的體系架構
數據立方(DataCube)的結構分為用戶接口、索引、SQL解析器、作業生成器、元數據管理、并行計算架構、分布式文件系統等部分,如圖4所示。
圖4 數據立方架構
用戶接口主要有兩個:JDBC和Shell。JDBC主要執行數據的定義操作,即建立數據庫、建表、建分區,對數據庫、表和分區的刪改等,同時可執行數據查詢的SQL語句,暫不支持單條記錄的增刪改;數據立方提供友好的shell交互界面,Shell支持數據庫、表的增刪改以及數據查詢的SQL語句。數據在入庫的同時與數據對應的索引也在同時建立,索引是一顆B樹,數據插入到內存的同時,索引B樹也在生成,當達到設置上限時,數據和索引會刷新到分布式文件系統上成為文件。數據立方的元數據存儲在數據庫中。其中包括,數據庫的名字和屬性,數據庫中的表,表的名字,表的列和分區及其屬性,表的屬性,表的數據所在目錄等等。SQL解析器接收從JDBc和Shell傳來的SQL查詢語句,同時對SQL進行詞法分析、語法分析、編譯、優化。作業生成器根據SQL語法樹生成查詢作業,分析所要處理的數據表對應的索引文件的所在存儲子節點位置,并將作業發送給并行計算架構。并行計算架構接收到作業生成器生成的作業,根據索引文件的位置切分查詢作業形成子任務,然后將子任務發送給數據所在的存儲子節點,每個節點執行這些子任務查詢索引得到結果記錄所在的數據文件名與偏移量,并以廣播的方式發送查詢子任務到數據文件所在的節點,在執行完畢后將結果返回。數據立方可以使用HDFS和cStor,作為底層存儲系統,cStor是一個主從結構的分布式文件系統,不僅具有HDFS的高吞吐率、高讀寫性能等特性,還支持HDFS所不具備的對文件修改等功能,并且支持POXIS接口。
2.2 分布式并行計算架構(DPCA)
數據立方的分布式并行架構(DPCA)是典型的主從結構,如圖5所示。主Master與從Master分別部署在HDFS的主從NameNode物理節點上,而Slave部署在DataNode物理節點上,主從Master使用zookeeper同步,并共享系統日志,Master與Slave之間用心跳信息保持信息交換。
圖5 DPCA架構
相對于MapReduce架構,DPCA具有實時性、計算的數據本地性以及數據平衡性。MapReduce架構的作業(Job)提交過程較為復雜,客戶端將Job提交到JobTracker有較長的延遲,JobTracker將Job處理為MapReduceTask后,通過TaskTracker的心跳信息將Task任務返回給TaskTracker,此過程中也存在延遲。
MapReduce架構雖然也遵循數據本地性,但仍會有很大比例的數據處理不是本地的,相對于MapReduce架構,DPCA的Job提交是實時性的,在提交Job之前所需程序Jar包已經分發到所有計算節點,在Job提交之后,Master在初始化處理之后即將T鵲k直接分發到所有Slave節點上,如圖6所示,在Job提交后,Master根據數據文件所在位置分配Task,這樣在每個計算節點上要處理的HDFS上的數據塊就在本地,這樣避免了數據的移動,極大地減少了網絡10負載,縮短了計算時間,每個計算節點會根據Task中SQL解析器生成的執行計劃對Task執行的結果進行分發,分發的方式有3種:分發所有中間數據到所有計算節點、分發所有中間數據到部分節點、根據數據所在位置分發,如圖7所示。并行計算架構能夠周期性地對HDFS上的數據表進行維護,保持數據表在所有的DataNode節點上所存儲的數據量的平衡,減少因數據負載的不平衡而導致的計算負載的不平衡。
圖6 并行計算架構上作業執行過程
圖7 并行計算架構的3種分發方式
舉一個典型的小表與大表Join連接的實例,如圖8所示,Master解析Job中的執行計劃,判斷小表的位置后,將Task0發送給了Slave0,指令Slave0發送小表到所有節點,而其他節點接收到的子任務是等待接受小表的數據,接收到數據后將小表與大表連接并將數據返回給Master,當所有數據返回完成則這個Job完成。
圖8 小表與大表的Join實例
2.3 分布式索引
MapReduce是對每個查詢都是直接從分布式文件系統中讀入原始數據文件,I/O代價遠高于數據庫,相對于MapReduce架構以及在其之上的SQL解析器Hive,數據立方引入了一種高效的分布式索引機制,不同于并行數據庫的Shared-nothing和Shared—disk架構,數據立方的數據文件與索引文件都存放在分布式文件系統之上。
數據在入庫的同時B樹索引在內存中同步生成,B樹中的葉子節點存儲的是數據文件路徑與記錄在文件中的偏移量,如圖9所示,在B樹中的葉子節點達到設置上限后,索引將被序列化到分布式文件系統之上,在根據條件進行單表查詢的時,Job被提交到并行計算框架,Master節點首先分析該表的索引文件根據索引文件所在的節點將Task發送到相應的節點,每個節點在查詢本地的索引文件之后將符合條件的數據文件路徑+偏移量打包成Task根據數據文件位置進行再次分發,在數據文件中的記錄查詢出來之后將結果返回,如圖9所示。
圖9 B樹索引
3.實驗與評估
3.1 實驗環境
實驗環境搭建在兩個機架的12臺物理機組成的集群上。每臺物理機使用ubuntu9.04 server系統,JDK版本為1.6.0.18,使用的Hadoop版本為2.0.0,將HDFS作為分布式存儲環境。軟硬件配置如表1、表2所示。
表1、表2 硬件配置和軟件配置
當前與數據立方類似的產品有分布式數據庫和數據倉庫,如:開源的HIVE、HadoopDB等,因此我們在數據入庫、查詢、查詢的并發量以及線性擴展等多方面對數據立方、HIVE和HadoopDB做了對比實驗。
3.2 數據入庫實驗
數據立方能夠快速進行數據入庫同時實時建立索引,相對于基于傳統數據庫的HadoopDB來說具有天然的優勢,但由于HIvE在數據入庫的同時并沒有建立索引使其在查詢的過程中沒有優勢。實驗結果如圖10所示。
圖10 數據入庫實驗
3.3 單表查詢實驗
對于簡單的單表查詢來說,數據量較小時,HadoopDB與數據立方的查詢速度都是比較快的,但在大數據量下,數據立方的高效分布式查詢更有優勢,而HIVE的底層是基于MapReduce,所以速度較慢。實驗結果如下圖11所示。
圖11 單表查詢實驗
3.4 多表查詢實驗
在多表查詢方面,在小表與小表、大表與小表之間的關聯查詢,數據立方和HadoopDB都是較快的,但在大表與大表之間做關聯查詢時,數據立方相對于HadoopDB更快,而HIVE是最慢的。多表查詢實驗結果如圖12所示。
圖12 多表查詢實驗
3.5 并發查詢實驗
數據立方的每個節點支持200個并發查詢,同時每個查詢均是秒級響應,HadoopDB由于是SMS的中間層,由于MapReduce架構本身的心跳機制而導致了較大的延遲,所以是很難達到秒級響應的,HIVE的任務并發數取決于MapReduce的并發任務數,所以會更低。實驗結果如圖13所示。
圖13 并發查詢實驗
3.6 線性擴展實驗
數據立方、HadoopDB和HIVE均支持線性擴展,而數據立方的擴展效率更高,即對系統的軟硬件做擴展后,性能也能夠達到類似線性的增長。實驗結果如圖14所示。
圖14 線性擴展實驗
4.結束語
Hadoop是一種流行的MapReduce計算模型的開源實現,用于大規模數據集的并行化分析處理,并行數據庫是在單機數據庫基礎之上發展而來的數據庫集群,本文通過研究MapReduce技術、并行數據庫技術以及混合技術探討了一系列相關的大數據處理技術,更深一步探索了基于分布式文件系統的并行計算架構和分布式海量數據實時索引機制,以此為基礎并輔以其他技術形成了一個支持非結構化、結構化和半結構化數據高效存儲,支持離線數據分析和在線專題應用,支持結構化數據與非結構化、半結構化數據之間的復雜計算的實時云計算數據庫數據立方。最后,本文通過實驗驗證了數據立方相對于其他系統的優勢。
核心關注:拓步ERP系統平臺是覆蓋了眾多的業務領域、行業應用,蘊涵了豐富的ERP管理思想,集成了ERP軟件業務管理理念,功能涉及供應鏈、成本、制造、CRM、HR等眾多業務領域的管理,全面涵蓋了企業關注ERP管理系統的核心領域,是眾多中小企業信息化建設首選的ERP管理軟件信賴品牌。
轉載請注明出處:拓步ERP資訊網http://www.guhuozai8.cn/
本文標題:實時云計算數據庫——數據立方
本文網址:http://www.guhuozai8.cn/html/consultation/10839714063.html