周正宇,康華夏,劉文軍,陳晨
(1.蘇州工業(yè)職業(yè)技術學院軟件與服務外包學院,江蘇蘇州 215104;2.蘇州礪行信息科技有限公司,江蘇蘇州 215151)
隨著物聯(lián)網(wǎng)、云計算、大數(shù)據(jù)等信息技術與傳統(tǒng)產(chǎn)業(yè)的不斷融合,無論是企業(yè)內(nèi)部的經(jīng)營管理數(shù)據(jù)還是供應鏈數(shù)據(jù)都呈現(xiàn)爆炸式增長。通過對行業(yè)相關數(shù)據(jù)的深入分析,可以直觀掌握其業(yè)務運營狀況,為戰(zhàn)略決策、業(yè)務調(diào)整提供依據(jù);另一方面,供應鏈協(xié)同使得需求預測、產(chǎn)能分析、協(xié)同研發(fā)等成為可能,產(chǎn)業(yè)數(shù)據(jù)的融合顯著提高了企業(yè)應對風險的能力。大數(shù)據(jù)時代,數(shù)據(jù)作為企業(yè)的核心資產(chǎn),加以分析利用成為提升企業(yè)核心競爭力的關鍵[1-2]。
傳統(tǒng)的數(shù)據(jù)統(tǒng)計、分析挖掘已經(jīng)顯露短板,特別是隨著數(shù)據(jù)量不斷攀升,離線的數(shù)據(jù)分析效率低下的瓶頸日益凸顯。相較之下,基于B/S 架構(gòu)的數(shù)據(jù)分析可視化平臺在大數(shù)據(jù)分析技術的支持下更加適合挖掘數(shù)據(jù)潛在價值,提供可靠的輔助決策信息,能促進企業(yè)核心競爭能力的建立,確保企業(yè)的可持續(xù)發(fā)展[3-7]。
本文針對該問題,給出了一種適用于海量數(shù)據(jù)下,基于Spark和前端技術實現(xiàn)快速定制化數(shù)據(jù)分析的平臺設計和實現(xiàn)方案。利用數(shù)據(jù)倉庫、線上分析處理等技術對客戶數(shù)據(jù)進行系統(tǒng)的存儲和管理,通過各種數(shù)據(jù)統(tǒng)計分析工具對業(yè)務數(shù)據(jù)進行分析并進行可視化展示,從而實現(xiàn)企業(yè)對數(shù)據(jù)進行有效的管理和整合。
如今,企業(yè)業(yè)務的復雜度越來越高,所產(chǎn)生的數(shù)據(jù)量也越來越大,想要對這些數(shù)據(jù)進行快速而有效的處理是一個龐大的工程。傳統(tǒng)C/S 架構(gòu)的數(shù)據(jù)分析工具多使用單機CPU 進行運算,在業(yè)務數(shù)據(jù)量龐大的今天已經(jīng)難以滿足實際需要。使用分布式系統(tǒng)的數(shù)據(jù)分析可視化平臺對系統(tǒng)的運行效率有著巨大的提升,同時采用B/S架構(gòu)的交互技術帶來良好的用戶體驗。
傳統(tǒng)的數(shù)據(jù)分析工具需要用戶懂得SQL操作,通常需要用戶和技術人員反復討論,選擇特定的字段生成目標圖表。這一過程中往往有交流和理解上的困難,給用戶帶來不佳的操作體驗。本系統(tǒng)使用Vue.js的draggable組件,實現(xiàn)了對數(shù)據(jù)字段的直接拖拽生產(chǎn)分析結(jié)果的功能,并且用戶可以根據(jù)業(yè)務需求和邏輯自定義圖表來呈現(xiàn)精確的可視化效果,大大便捷了用戶的操作。
數(shù)據(jù)的價值在于通過模型分析后為行業(yè)管理者提供參考決策。一方面需要選擇合理的數(shù)據(jù)可視化的圖表,科學有效地展示給用戶;另一方面,需要確定與業(yè)務匹配的數(shù)據(jù)分析算法模型進行支撐。平臺自主選擇數(shù)據(jù)源,并且集成主流的分析模型供用戶選擇。由于用戶的業(yè)務不盡相同,需要的算法模型難以通用,因而要求平臺具有二次開發(fā)能力,支持橫向拓展算法模型。
平臺的架構(gòu)設計如圖1所示。從右到左分為存儲層、數(shù)據(jù)處理層和展示層。存儲層主要用Greenplum分布式數(shù)據(jù)庫存儲用戶所連接的數(shù)據(jù)庫數(shù)據(jù),可供服務器更快地進行數(shù)據(jù)處理,而不必等用戶操作時再去讀取用戶數(shù)據(jù)。這一模式大大提高了運行效率。數(shù)據(jù)處理層使用Spark 并行查詢讀取數(shù)據(jù)庫數(shù)據(jù),再充分利用Spark內(nèi)存計算的優(yōu)點,將數(shù)據(jù)通過基于內(nèi)存的分布式文件系統(tǒng)Alluxio緩存進內(nèi)存,通過內(nèi)存計算來快速處理數(shù)據(jù),返回處理結(jié)果。展示層采用Vue.js+Element.ui 技術實現(xiàn)前端可拖拽頁面的呈現(xiàn),使數(shù)據(jù)分析結(jié)果按照用戶的想法進行直觀展現(xiàn)。

圖1 系統(tǒng)架構(gòu)圖
本系統(tǒng)使用Greenplum-Spark Connector 連接器(GSC)以打通GreenPlum 數(shù)據(jù)庫和Spark。GSC 是由Drive 節(jié)點和Executor節(jié)點構(gòu)成,本質(zhì)上是一個Spark application,其工作機制如圖2所示。當系統(tǒng)使用GSC讀取GreenPlum數(shù)據(jù)時,其中Drive節(jié)點先通過JDBC 的請求方式訪問GreenPlum 的master 節(jié)點來獲取關于被讀取數(shù)據(jù)元數(shù)據(jù)的信息。GSC將根據(jù)這些元數(shù)據(jù),讓多個Executor 節(jié)點并行地讀取GreenPlum 數(shù)據(jù)庫中所需要的數(shù)據(jù),來提高讀取數(shù)據(jù)的效率,以提升用戶的體驗。

圖2 GSC工作機制圖
Spark 用戶通常使用Saprk RDD Cache 將數(shù)據(jù)以RDD 的結(jié)構(gòu)存儲在Spark Executor 中,以后每次對這個RDD 進行操作時就無需重新計算,直接從內(nèi)存或者磁盤中提取持久化的RDD數(shù)據(jù)。但是存儲RDD 所需的內(nèi)存可能會非常大,進而導致Spark Executor的計算內(nèi)存相對變小,甚至有可能因計算內(nèi)存不足導致Spark 作業(yè)崩潰,致使數(shù)據(jù)沒有被持久化到內(nèi)存中。本系統(tǒng)為解決這類問題將RDD 數(shù)據(jù)存儲在Alluxio 中,這樣Spark Executor 就不需要配置存儲數(shù)據(jù)需要的內(nèi)存,只需配置計算所需內(nèi)存。Alluxio 提供了RDD 數(shù)據(jù)所需的內(nèi)存,即使Saprk 作業(yè)崩潰,數(shù)據(jù)也會被Alluxio 持久化到內(nèi)存中。Spark 仍然可以從內(nèi)存讀取數(shù)據(jù),將數(shù)據(jù)提供給web 前端,極大地提高了系統(tǒng)的穩(wěn)定性和運行效率。該機制下的數(shù)據(jù)流轉(zhuǎn)如圖3所示。

圖3 數(shù)據(jù)流轉(zhuǎn)圖
系統(tǒng)的可視化是基于Vue.js+Element.ui技術實現(xiàn)的。其中可拖拽的功能實現(xiàn)主要引用了Vue 的相關draggable 組件。其中涉及的主要事件和執(zhí)行時機包括:
1)ondragstart:在拖動開始時執(zhí)行。
2)ondragover:被拖動的對象在進入另一容器范圍內(nèi)時執(zhí)行。
3)ondragenter:在被拖動的對象進入該容器范圍內(nèi)時執(zhí)行。
4)ondragleave:在被拖動的對象離開其容器范圍內(nèi)時執(zhí)行。
5)ondragend:拖動完成時執(zhí)行。
6)ondrag,ondrop:分別為拖動時執(zhí)行和釋放鼠標時執(zhí)行。系統(tǒng)根據(jù)這些事件實現(xiàn)了根據(jù)拖拽的字段生成對應維度和數(shù)值的圖表;實現(xiàn)了對圖表大小和位置的編輯等自由度高的功能。
平臺通過Spark中可拓展的機器學習庫Spark MLlib進行數(shù)據(jù)分析模型搭建,特別使用其包含的算法依賴實現(xiàn)了線性回歸、邏輯回歸等預測模型。Spark MLlib 的算法工具包括聚類、回歸、分類、協(xié)同過濾、降維等,同時可以進行底層優(yōu)化,其算法還可以進行擴充。系統(tǒng)通過Spark MLlib 可快速實現(xiàn)數(shù)據(jù)分析模型的橫向拓展。可供用戶更好地進行業(yè)務邏輯和算法模型匹配,提高分析結(jié)果的質(zhì)量,便于用戶更好地進行決策。
網(wǎng)站界面設計遵循簡約風格。如圖4所示,給出了一個航班分析應用示例。用戶在左上角選擇數(shù)據(jù)源,然后拖動興趣字段名放入中間的維度或者數(shù)值,即可自動生成折線圖。用戶可以根據(jù)具體需求,在右下角切換圖表類型,可以對字段進行排序和篩選。示例中,折線圖所顯示的是對航班的數(shù)據(jù)進行數(shù)據(jù)處理的結(jié)果。x軸為航班號,y軸為航班人次。可以看出各個航班的當日人次,反映出客流量的差異。所生成的圖表可以保存,并支持下載成圖片作為素材提供給用戶。平臺支持對字段進行統(tǒng)計操作,如求和、平均值、方差、標準差、聚類等多種計算方式和分析功能。同時也支持數(shù)據(jù)分析模型的拓展。

圖4 圖表生成圖
前端頁面中可以新建可視化圖表,并支持將保存過的圖表添加進來,通過對圖表進行拖動、拉伸,并按照用戶意愿自定義圖表大小和位置,最后組合為可視化大屏。如圖5 所示,通過拖拽方式構(gòu)建了一個航班數(shù)據(jù)可視化大屏。此外,用戶點擊分享能夠生成鏈接,把生成的鏈接發(fā)送給其他用戶進行共享。

圖5 報表生成圖
信息技術迅猛發(fā)展的今天,業(yè)務產(chǎn)生的數(shù)據(jù)量是非常龐大的,這些數(shù)據(jù)流轉(zhuǎn)快速、類型多樣、價值密度低。其中蘊含的商業(yè)價值很難被挖掘利用,這也成為現(xiàn)階段企業(yè)的難題。本文設計的大數(shù)據(jù)分析可視化平臺通過Spark內(nèi)存計算、GreenPlum分布式數(shù)據(jù)庫、可拖拽式的頁面呈現(xiàn)等技術,對該類型問題提供了一種有效的解決方案。特別地,本方案支持大數(shù)據(jù)算力,并且服務器可以進行橫向和縱向拓展,為問題的解決提供了一種有益的嘗試。