陳永海
(北海職業(yè)學院,廣西北海,536000)
隨著中國傳統(tǒng)技術產業(yè)發(fā)展結構的調整和新技術的應用,文化進行旅游服務產業(yè)突破了傳統(tǒng)的產業(yè)管理模式,逐漸演變?yōu)橐环N新的多向、多層次、多維度的產業(yè)。在數(shù)據多維分析的領域中,傳統(tǒng)的統(tǒng)計分析軟件,如:IBMSPSS,只針對樣本量較小、結構簡單的特定數(shù)據進行統(tǒng)計分析,不適用于對大批量、結構復雜的大數(shù)據進行深層次分析。在大數(shù)據的分析處理中,Apache Hive作為數(shù)據倉庫提供查詢計算接口;Apache Kylin在面對固化型多維分析場景時,即分析的需求和要統(tǒng)計的指標十分明確,其采用數(shù)據預計算技術來提高響應速度;針對探索式多維分析場景時,即分析需求尚不明確,分析員需要不斷嘗試分析過程,此時Spark SQL可以實時計算數(shù)據,并快速響應數(shù)據。雖然針對不同場景存在多種數(shù)據分析工具,但是當前基于多場景文化旅游的大數(shù)據分析平臺也面臨著以下的問題:具有各自的適用場景,不能同時滿足多種不同查詢計算需求;同時涵蓋分布式數(shù)據分析全生命周期的應用匱乏。
在大多數(shù)情況下,基于預計算的Apache Kylin的查詢效率要遠高于Spark SQL查詢,但是Kylin遇到具體記錄的查詢和cuboid不存在的情況,它的查詢效率會遠低于Spark SQL。在實際的業(yè)務場景中,存在以下問題:
(1)Spark SQL和Kylin都有各自適應的場景和優(yōu)缺點,單一的引擎不能同時滿足多種場景需求。
(2)多種查詢引擎并存,業(yè)務人員每次都需要判斷使用哪種查詢分析引擎,缺乏統(tǒng)一的路由策略進行自動判斷選擇。
(3)統(tǒng)一的查詢引擎需要混合多種引擎,但是它們擁有不同的執(zhí)行框架,解析過程也不完全相同。
針對以上的問題,本文設計了混合查詢引擎,實現(xiàn)自動路由選擇最佳的查詢引擎,提高查詢的效率。
在多維分析中,用戶輸入信息會被轉化為SQL語句,因此用戶輸入信息中需要包含SQL語句抽象語法樹的基本單元要素,在邏輯語法樹中的Aggregate、Filter、GroupBy、Table與用戶輸入形成相應的映射關系。同時在Kylin項目中也存在相應的概念,Kylin中可以使用多張數(shù)據表(Table)并選定計算維度(Dimension)和統(tǒng)計度量(Metric)構建不同的數(shù)據模型(Model),該模型只是邏輯模型,沒有進行真正執(zhí)行。在模型的基礎之上,我們再選取出部分維度和度量形成數(shù)據立方體(Cube),進行真正的統(tǒng)計計算。Kylin元數(shù)據中的Metric、Dimension、Cube和Model與SQL語句抽象語法樹基本要素以及用戶輸入存在對應關系,這為通過用戶輸入來統(tǒng)一判斷路由到Kylin、SparkSQL或HiveSQL提供了邏輯基礎。
Kylin中的數(shù)據立方體的元數(shù)據是由Metadata Manager模塊進行管理的,存儲在HBase之中,本文通過該模塊獲取元數(shù)據信息與用戶輸入進行匹配,匹配規(guī)則如下:
(1)用于計算的維度和度量全部包含于某個Kylin數(shù)據立方體的維度和度量之中,該查詢使用Kylin查詢。
(2)用于計算的維度和度量不全包含于任何一個Kylin數(shù)據立方體中,該查詢使用SparkSQL執(zhí)行具體的查詢計劃。
(3)如果進行的是明細查詢,根據數(shù)據存儲位置不同可能會使用SparkSQL或HiveSQL去執(zhí)行查詢計劃。
(4)Kylin查詢失敗,重新選擇到SparkSQL進行查詢。
多維查詢是用戶通過界面創(chuàng)建的,系統(tǒng)只能獲得用戶選擇的維度和度量等計算信息,所以系統(tǒng)需要提供自動生成SQL的功能。由于本系統(tǒng)會路由選擇多個查詢引擎去執(zhí)行SQL語句,不同引擎的對SQL語句語法、詞法解析驗證的細節(jié)不盡相同,因此我們設計實現(xiàn)一個統(tǒng)一的SQL生成策略生成不同的SQL以適配不同的執(zhí)行引擎。在基于文旅數(shù)據多維分析系統(tǒng)中,我們選取了SELECT語句來進行查詢計算,由于Spark SQL(Hive SQL)和Kylin SQL語法樹結構相同,因此按照常用的查詢需求和SQL語句語法樹結構我們將SELECT語句劃分成八個子句模塊。每個子句模塊可以根據用戶輸入和查詢100引擎類型生成相應的SQL語句片段,最后統(tǒng)一生成適配執(zhí)行引擎計算的SQL語句。
本文基于Kylin、Spark、Hive等開源大數(shù)據組件,研究并實現(xiàn)一種開源的基于多場景文化旅游的大數(shù)據多維分析系統(tǒng),按照功能將系統(tǒng)劃分為五個子模塊,包括數(shù)據預處理子模塊、Kylin建模子模塊、圖表構建子模塊、圖表管理子模塊、駕駛艙管理子模塊。系統(tǒng)模塊圖如圖1所示。

圖1 大數(shù)據環(huán)境下的文旅多維數(shù)據分析系統(tǒng)模塊圖
由于數(shù)據來源比較廣泛,對于原始數(shù)據來說,還不能完全達到分析的要求,存在數(shù)據缺失,重復,錯誤等問題,在本模塊中提供豐富的數(shù)據清洗算子、數(shù)據集成算子以及統(tǒng)計分析算子完成數(shù)據處理的工作。
(1)數(shù)據清洗主要涉及到的操作包括去除重復值,忽略字段,填充空值,條件篩選,數(shù)據分段,記錄排序,類型轉換,新增序號列,字符替換,數(shù)值運算等;
(2)數(shù)據集成合并多源多表數(shù)據,包含的主要操作有多表關聯(lián),數(shù)據追加;
(3)統(tǒng)計分析,即初步統(tǒng)計數(shù)據特征,宏觀發(fā)現(xiàn)數(shù)據問題,如最大最小值計算,以便發(fā)現(xiàn)數(shù)據取值范圍,除此之外,該部分的原子操作還包括均值、方差、頻率統(tǒng)計、正態(tài)檢驗、相關系數(shù)矩陣等。
本系統(tǒng)集成了Kylin建模模塊,可以通過添加配置完成Kylin集群建模頁面的集成。在本模塊中可以新建多個項目,每個項目可以建立多個Model,每個Model都是對事實表和多張維度表構建起來的多維統(tǒng)計邏輯模型。在Model之上根據經常組合使用的維度和度量構建出數(shù)據立方體(Cube),進行執(zhí)行計算。Cube的計算邏輯過程如下:
(1)根據Cube定義的事實表以及維度表,利用Hive創(chuàng)建一張寬表;
(2)抽取事實表上維度的distinct值,將事實表上的維度以字典樹方式壓縮編碼成目錄,將維度表以字典樹的方式編碼;
(3)利用125MapReduce從第一步得到的寬表文件作為輸入,創(chuàng)建N-Dimension cuboid,然后每次根據前一步的結果串行生成N-1cuboid,N-2cuboid…0-cuboid;
(4)根據生成的Cuboid數(shù)據量計算HTable的Region分割策略,創(chuàng)建HTable,將HFile導入進來。
根據本模塊集成的Kylin配置頁面進行數(shù)據建模,首先在創(chuàng)建和生成數(shù)據Cube之前,需要從Hive中導入表結構,其次選擇事實表、維度表以及其中的維度和度量創(chuàng)建數(shù)據模型,最后在模型基礎之上選擇執(zhí)行計算的維度和度量并設置優(yōu)化等,等待Cube計算結果,完成Cube創(chuàng)建。在優(yōu)化設置中可以設置強制維度(Mandatory dimension)和衍生維度(Derived dimension)來加速Cube的構建流程。
本模塊主要完成多維分析圖表的構建,用戶通過拖拽維度和度量進行多維分析,是整個基于多場景文化旅游大數(shù)據多維分析系統(tǒng)的核心部分。構建圖表構建子模塊包含計算引擎路由、統(tǒng)一SQL生成、計算引擎執(zhí)行器以及圖表生成五個部分:
(1)計算引擎路由是根據用戶選擇的數(shù)據表、數(shù)據維度和數(shù)據度量來選擇最為合適的底層計算引擎。
(2)統(tǒng)一SQL生成是為了適配不同的執(zhí)行引擎設計,并實現(xiàn)一個統(tǒng)一的SQL生成策略,使得根據計算引擎路由模塊的結果生成不同的SQL以便執(zhí)行。
(3)計算引擎執(zhí)行器主要是提供統(tǒng)一的計算引擎查詢入口。在本文基于多場景文化旅游的分析中,涉及到的執(zhí)行引擎有Spark、Kylin以及Hive,在本模塊中向上下模塊屏蔽了執(zhí)行引擎的差別,提供一個統(tǒng)一的SQL執(zhí)行與任務提交的接口,同時不同的計算引擎的執(zhí)行結果會用相同的數(shù)據結構存儲(List)返回,以便下游模塊使用。
(4)圖表生成,主要提供將數(shù)據轉化成圖表的功能。根據多維分析的維度和度量,轉化成適合前端展示的一維類圖表、二維類圖表或者多維類圖表。
構建圖表管理子模塊主要實現(xiàn)對用戶構建出來的圖表進行維護管理,主要包含了圖表修改以 及圖表刪除,圖表修改包括了圖表配置更新以及圖表切換。圖表配置更新包括圖表樣式修改,圖表聯(lián)動設置,圖表實時設置等;由于本系統(tǒng)支持的圖表類型比較多,因此舍棄效率為N:N的一對一轉換方案,而是根據舊圖表內容及其類型提取其中的數(shù) 據統(tǒng)一格式的中間數(shù)據,然后按照新圖表類型生成新圖表數(shù)據,借助統(tǒng)一格式的中間數(shù)據實現(xiàn)N:1:N復雜度圖表轉換。
構建駕駛艙管理子模塊由多張圖表構成,通過自定義的拖拽方式可以自由組合圖表,包括指標卡,多維表格,地圖,標準圖表等多種樣式,不同圖表組合成的駕駛艙,有著近乎無數(shù)種排列組合,具有整體主題意義的駕駛艙可以令用戶從各個角度觀察數(shù)據的表現(xiàn)。主要包括了駕駛艙的新建、修改、刪除、以及實時駕駛艙和多圖聯(lián)動等功能。實時駕駛艙主要是實現(xiàn)當數(shù)據更新變化時,自動計算新的圖表數(shù)據并更新駕駛艙。本文中主要使用WebSocket完成前后端實時內容推送,根據WebSocket鏈接本模塊維護了一個實時駕駛艙列表,通過數(shù)據源監(jiān)控模塊監(jiān)控數(shù)據源的改變,當數(shù)據發(fā)生變化時,由駕駛艙對應的更新頻率配置觸發(fā)實時圖表的重新計算,其中涉及到的計算引擎執(zhí)行器模塊和圖表生成模塊已在上文圖表構建子模塊中設計實現(xiàn),計算完成后更新圖表,并通知駕駛艙頁面有數(shù)據更新成功,重新調用駕駛艙查詢接口,按照最新圖表重組駕駛艙呈現(xiàn)給用戶。
多圖聯(lián)動主要是實現(xiàn)當點擊一個圖表中某個數(shù)值時,其它聯(lián)動的圖表在該維度特定值的限定下重新計算圖表。由于本系統(tǒng)按照模塊化設計的準則,多圖聯(lián)動主要復用圖表構建子模塊功能,按照新的限定條件重啟構建流程,構建出來的新的圖表作為該駕駛艙的唯一副本,因此并不對其它駕駛艙和圖表展示產生任何影響。
本文提出了一種可以自動適配Kylin、Spark、Hive多種查詢引擎的方案,支持通過用戶在界面上選擇的分析維度與度量,自動路由到最優(yōu)執(zhí)行引擎去查詢。同時實現(xiàn)了基于多場景文化旅游的大數(shù)據多維分析系統(tǒng),提供全生命周期的一站式數(shù)據服務,數(shù)據從數(shù)據接入經歷數(shù)據清洗、數(shù)據建模、數(shù)據分析到可視化呈現(xiàn),閉環(huán)涵蓋數(shù)據業(yè)務全流程。對大數(shù)據分析的普及與應用具有非常重要的現(xiàn)實意義。