周正宇,康華夏,劉文軍,陳晨
(1.蘇州工業(yè)職業(yè)技術(shù)學(xué)院軟件與服務(wù)外包學(xué)院,江蘇蘇州 215104;2.蘇州礪行信息科技有限公司,江蘇蘇州 215151)
隨著物聯(lián)網(wǎng)、云計(jì)算、大數(shù)據(jù)等信息技術(shù)與傳統(tǒng)產(chǎn)業(yè)的不斷融合,無(wú)論是企業(yè)內(nèi)部的經(jīng)營(yíng)管理數(shù)據(jù)還是供應(yīng)鏈數(shù)據(jù)都呈現(xiàn)爆炸式增長(zhǎng)。通過(guò)對(duì)行業(yè)相關(guān)數(shù)據(jù)的深入分析,可以直觀掌握其業(yè)務(wù)運(yùn)營(yíng)狀況,為戰(zhàn)略決策、業(yè)務(wù)調(diào)整提供依據(jù);另一方面,供應(yīng)鏈協(xié)同使得需求預(yù)測(cè)、產(chǎn)能分析、協(xié)同研發(fā)等成為可能,產(chǎn)業(yè)數(shù)據(jù)的融合顯著提高了企業(yè)應(yīng)對(duì)風(fēng)險(xiǎn)的能力。大數(shù)據(jù)時(shí)代,數(shù)據(jù)作為企業(yè)的核心資產(chǎn),加以分析利用成為提升企業(yè)核心競(jìng)爭(zhēng)力的關(guān)鍵[1-2]。
傳統(tǒng)的數(shù)據(jù)統(tǒng)計(jì)、分析挖掘已經(jīng)顯露短板,特別是隨著數(shù)據(jù)量不斷攀升,離線的數(shù)據(jù)分析效率低下的瓶頸日益凸顯。相較之下,基于B/S 架構(gòu)的數(shù)據(jù)分析可視化平臺(tái)在大數(shù)據(jù)分析技術(shù)的支持下更加適合挖掘數(shù)據(jù)潛在價(jià)值,提供可靠的輔助決策信息,能促進(jìn)企業(yè)核心競(jìng)爭(zhēng)能力的建立,確保企業(yè)的可持續(xù)發(fā)展[3-7]。
本文針對(duì)該問(wèn)題,給出了一種適用于海量數(shù)據(jù)下,基于Spark和前端技術(shù)實(shí)現(xiàn)快速定制化數(shù)據(jù)分析的平臺(tái)設(shè)計(jì)和實(shí)現(xiàn)方案。利用數(shù)據(jù)倉(cāng)庫(kù)、線上分析處理等技術(shù)對(duì)客戶數(shù)據(jù)進(jìn)行系統(tǒng)的存儲(chǔ)和管理,通過(guò)各種數(shù)據(jù)統(tǒng)計(jì)分析工具對(duì)業(yè)務(wù)數(shù)據(jù)進(jìn)行分析并進(jìn)行可視化展示,從而實(shí)現(xiàn)企業(yè)對(duì)數(shù)據(jù)進(jìn)行有效的管理和整合。
如今,企業(yè)業(yè)務(wù)的復(fù)雜度越來(lái)越高,所產(chǎn)生的數(shù)據(jù)量也越來(lái)越大,想要對(duì)這些數(shù)據(jù)進(jìn)行快速而有效的處理是一個(gè)龐大的工程。傳統(tǒng)C/S 架構(gòu)的數(shù)據(jù)分析工具多使用單機(jī)CPU 進(jìn)行運(yùn)算,在業(yè)務(wù)數(shù)據(jù)量龐大的今天已經(jīng)難以滿足實(shí)際需要。使用分布式系統(tǒng)的數(shù)據(jù)分析可視化平臺(tái)對(duì)系統(tǒng)的運(yùn)行效率有著巨大的提升,同時(shí)采用B/S架構(gòu)的交互技術(shù)帶來(lái)良好的用戶體驗(yàn)。
傳統(tǒng)的數(shù)據(jù)分析工具需要用戶懂得SQL操作,通常需要用戶和技術(shù)人員反復(fù)討論,選擇特定的字段生成目標(biāo)圖表。這一過(guò)程中往往有交流和理解上的困難,給用戶帶來(lái)不佳的操作體驗(yàn)。本系統(tǒng)使用Vue.js的draggable組件,實(shí)現(xiàn)了對(duì)數(shù)據(jù)字段的直接拖拽生產(chǎn)分析結(jié)果的功能,并且用戶可以根據(jù)業(yè)務(wù)需求和邏輯自定義圖表來(lái)呈現(xiàn)精確的可視化效果,大大便捷了用戶的操作。
數(shù)據(jù)的價(jià)值在于通過(guò)模型分析后為行業(yè)管理者提供參考決策。一方面需要選擇合理的數(shù)據(jù)可視化的圖表,科學(xué)有效地展示給用戶;另一方面,需要確定與業(yè)務(wù)匹配的數(shù)據(jù)分析算法模型進(jìn)行支撐。平臺(tái)自主選擇數(shù)據(jù)源,并且集成主流的分析模型供用戶選擇。由于用戶的業(yè)務(wù)不盡相同,需要的算法模型難以通用,因而要求平臺(tái)具有二次開發(fā)能力,支持橫向拓展算法模型。
平臺(tái)的架構(gòu)設(shè)計(jì)如圖1所示。從右到左分為存儲(chǔ)層、數(shù)據(jù)處理層和展示層。存儲(chǔ)層主要用Greenplum分布式數(shù)據(jù)庫(kù)存儲(chǔ)用戶所連接的數(shù)據(jù)庫(kù)數(shù)據(jù),可供服務(wù)器更快地進(jìn)行數(shù)據(jù)處理,而不必等用戶操作時(shí)再去讀取用戶數(shù)據(jù)。這一模式大大提高了運(yùn)行效率。數(shù)據(jù)處理層使用Spark 并行查詢讀取數(shù)據(jù)庫(kù)數(shù)據(jù),再充分利用Spark內(nèi)存計(jì)算的優(yōu)點(diǎn),將數(shù)據(jù)通過(guò)基于內(nèi)存的分布式文件系統(tǒng)Alluxio緩存進(jìn)內(nèi)存,通過(guò)內(nèi)存計(jì)算來(lái)快速處理數(shù)據(jù),返回處理結(jié)果。展示層采用Vue.js+Element.ui 技術(shù)實(shí)現(xiàn)前端可拖拽頁(yè)面的呈現(xiàn),使數(shù)據(jù)分析結(jié)果按照用戶的想法進(jìn)行直觀展現(xiàn)。
圖1 系統(tǒng)架構(gòu)圖
本系統(tǒng)使用Greenplum-Spark Connector 連接器(GSC)以打通GreenPlum 數(shù)據(jù)庫(kù)和Spark。GSC 是由Drive 節(jié)點(diǎn)和Executor節(jié)點(diǎn)構(gòu)成,本質(zhì)上是一個(gè)Spark application,其工作機(jī)制如圖2所示。當(dāng)系統(tǒng)使用GSC讀取GreenPlum數(shù)據(jù)時(shí),其中Drive節(jié)點(diǎn)先通過(guò)JDBC 的請(qǐng)求方式訪問(wèn)GreenPlum 的master 節(jié)點(diǎn)來(lái)獲取關(guān)于被讀取數(shù)據(jù)元數(shù)據(jù)的信息。GSC將根據(jù)這些元數(shù)據(jù),讓多個(gè)Executor 節(jié)點(diǎn)并行地讀取GreenPlum 數(shù)據(jù)庫(kù)中所需要的數(shù)據(jù),來(lái)提高讀取數(shù)據(jù)的效率,以提升用戶的體驗(yàn)。
圖2 GSC工作機(jī)制圖
Spark 用戶通常使用Saprk RDD Cache 將數(shù)據(jù)以RDD 的結(jié)構(gòu)存儲(chǔ)在Spark Executor 中,以后每次對(duì)這個(gè)RDD 進(jìn)行操作時(shí)就無(wú)需重新計(jì)算,直接從內(nèi)存或者磁盤中提取持久化的RDD數(shù)據(jù)。但是存儲(chǔ)RDD 所需的內(nèi)存可能會(huì)非常大,進(jìn)而導(dǎo)致Spark Executor的計(jì)算內(nèi)存相對(duì)變小,甚至有可能因計(jì)算內(nèi)存不足導(dǎo)致Spark 作業(yè)崩潰,致使數(shù)據(jù)沒(méi)有被持久化到內(nèi)存中。本系統(tǒng)為解決這類問(wèn)題將RDD 數(shù)據(jù)存儲(chǔ)在Alluxio 中,這樣Spark Executor 就不需要配置存儲(chǔ)數(shù)據(jù)需要的內(nèi)存,只需配置計(jì)算所需內(nèi)存。Alluxio 提供了RDD 數(shù)據(jù)所需的內(nèi)存,即使Saprk 作業(yè)崩潰,數(shù)據(jù)也會(huì)被Alluxio 持久化到內(nèi)存中。Spark 仍然可以從內(nèi)存讀取數(shù)據(jù),將數(shù)據(jù)提供給web 前端,極大地提高了系統(tǒng)的穩(wěn)定性和運(yùn)行效率。該機(jī)制下的數(shù)據(jù)流轉(zhuǎn)如圖3所示。
圖3 數(shù)據(jù)流轉(zhuǎn)圖
系統(tǒng)的可視化是基于Vue.js+Element.ui技術(shù)實(shí)現(xiàn)的。其中可拖拽的功能實(shí)現(xiàn)主要引用了Vue 的相關(guān)draggable 組件。其中涉及的主要事件和執(zhí)行時(shí)機(jī)包括:
1)ondragstart:在拖動(dòng)開始時(shí)執(zhí)行。
2)ondragover:被拖動(dòng)的對(duì)象在進(jìn)入另一容器范圍內(nèi)時(shí)執(zhí)行。
3)ondragenter:在被拖動(dòng)的對(duì)象進(jìn)入該容器范圍內(nèi)時(shí)執(zhí)行。
4)ondragleave:在被拖動(dòng)的對(duì)象離開其容器范圍內(nèi)時(shí)執(zhí)行。
5)ondragend:拖動(dòng)完成時(shí)執(zhí)行。
6)ondrag,ondrop:分別為拖動(dòng)時(shí)執(zhí)行和釋放鼠標(biāo)時(shí)執(zhí)行。系統(tǒng)根據(jù)這些事件實(shí)現(xiàn)了根據(jù)拖拽的字段生成對(duì)應(yīng)維度和數(shù)值的圖表;實(shí)現(xiàn)了對(duì)圖表大小和位置的編輯等自由度高的功能。
平臺(tái)通過(guò)Spark中可拓展的機(jī)器學(xué)習(xí)庫(kù)Spark MLlib進(jìn)行數(shù)據(jù)分析模型搭建,特別使用其包含的算法依賴實(shí)現(xiàn)了線性回歸、邏輯回歸等預(yù)測(cè)模型。Spark MLlib 的算法工具包括聚類、回歸、分類、協(xié)同過(guò)濾、降維等,同時(shí)可以進(jìn)行底層優(yōu)化,其算法還可以進(jìn)行擴(kuò)充。系統(tǒng)通過(guò)Spark MLlib 可快速實(shí)現(xiàn)數(shù)據(jù)分析模型的橫向拓展。可供用戶更好地進(jìn)行業(yè)務(wù)邏輯和算法模型匹配,提高分析結(jié)果的質(zhì)量,便于用戶更好地進(jìn)行決策。
網(wǎng)站界面設(shè)計(jì)遵循簡(jiǎn)約風(fēng)格。如圖4所示,給出了一個(gè)航班分析應(yīng)用示例。用戶在左上角選擇數(shù)據(jù)源,然后拖動(dòng)興趣字段名放入中間的維度或者數(shù)值,即可自動(dòng)生成折線圖。用戶可以根據(jù)具體需求,在右下角切換圖表類型,可以對(duì)字段進(jìn)行排序和篩選。示例中,折線圖所顯示的是對(duì)航班的數(shù)據(jù)進(jìn)行數(shù)據(jù)處理的結(jié)果。x軸為航班號(hào),y軸為航班人次??梢钥闯龈鱾€(gè)航班的當(dāng)日人次,反映出客流量的差異。所生成的圖表可以保存,并支持下載成圖片作為素材提供給用戶。平臺(tái)支持對(duì)字段進(jìn)行統(tǒng)計(jì)操作,如求和、平均值、方差、標(biāo)準(zhǔn)差、聚類等多種計(jì)算方式和分析功能。同時(shí)也支持?jǐn)?shù)據(jù)分析模型的拓展。
圖4 圖表生成圖
前端頁(yè)面中可以新建可視化圖表,并支持將保存過(guò)的圖表添加進(jìn)來(lái),通過(guò)對(duì)圖表進(jìn)行拖動(dòng)、拉伸,并按照用戶意愿自定義圖表大小和位置,最后組合為可視化大屏。如圖5 所示,通過(guò)拖拽方式構(gòu)建了一個(gè)航班數(shù)據(jù)可視化大屏。此外,用戶點(diǎn)擊分享能夠生成鏈接,把生成的鏈接發(fā)送給其他用戶進(jìn)行共享。
圖5 報(bào)表生成圖
信息技術(shù)迅猛發(fā)展的今天,業(yè)務(wù)產(chǎn)生的數(shù)據(jù)量是非常龐大的,這些數(shù)據(jù)流轉(zhuǎn)快速、類型多樣、價(jià)值密度低。其中蘊(yùn)含的商業(yè)價(jià)值很難被挖掘利用,這也成為現(xiàn)階段企業(yè)的難題。本文設(shè)計(jì)的大數(shù)據(jù)分析可視化平臺(tái)通過(guò)Spark內(nèi)存計(jì)算、GreenPlum分布式數(shù)據(jù)庫(kù)、可拖拽式的頁(yè)面呈現(xiàn)等技術(shù),對(duì)該類型問(wèn)題提供了一種有效的解決方案。特別地,本方案支持大數(shù)據(jù)算力,并且服務(wù)器可以進(jìn)行橫向和縱向拓展,為問(wèn)題的解決提供了一種有益的嘗試。