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

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

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

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

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

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