Kubernetes云原生實(shí)戰(zhàn):分布式GeaFlow實(shí)現(xiàn)圖研發(fā),構(gòu)建第一個(gè)商業(yè)智能應(yīng)用

GeaFlow(品牌名TuGraph-Analytics) 已正式開(kāi)源,歡迎大家關(guān)注?。?!歡迎給我們 Star 哦!
GitHub?? https://github.com/TuGraph-family/tugraph-analytics
更多精彩內(nèi)容,關(guān)注我們的博客 https://tugraph-analytics.github.io/

引言
Kubernetes在云原生應(yīng)用中扮演著至關(guān)重要的角色,為商業(yè)智能(BI)強(qiáng)大賦能。 不同于傳統(tǒng)的BI,容器化部署在集群中可以獲得更高的可靠性、彈性和靈活性。
但在實(shí)際生產(chǎn)實(shí)踐中,這還遠(yuǎn)遠(yuǎn)不夠。 商業(yè)智能分析人員更希望搭建實(shí)時(shí)提問(wèn)快速響應(yīng)的研發(fā)平臺(tái),使得數(shù)據(jù)能夠回應(yīng)分析人員的想法,并產(chǎn)出更多支持商業(yè)決策的信息。 這需要類似于OLAP的在線分析處理(OLAP)技術(shù),幫助查詢、分析和理解大規(guī)模數(shù)據(jù),從而做出更明智的商業(yè)決策。
例如這樣一個(gè)接近實(shí)際的場(chǎng)景——
分析師想要找到具有'Comedian'類別下標(biāo)簽的博文和評(píng)論,TA的意圖可以被描述如下:
這里使用了開(kāi)源圖研發(fā)引擎GeaFlow支持的GQL語(yǔ)言描述,可以簡(jiǎn)單直觀地描述商業(yè)關(guān)系。 后文將介紹基于分布式GeaFlow實(shí)現(xiàn)圖研發(fā),都采用類似的描述。
一段時(shí)間的研究后,分析師開(kāi)始關(guān)注發(fā)布者的朋友都有哪些:
熟悉關(guān)系型數(shù)據(jù)庫(kù)和大數(shù)據(jù)處理平臺(tái)的朋友可能知道,這類模式分析涉及一系列的大型Join連接處理,在現(xiàn)有系統(tǒng)中計(jì)算時(shí)間往往超出預(yù)期。 在傳統(tǒng)的商業(yè)智能模式下,分析師可能需要等待數(shù)天的時(shí)間才能獲得他們需要的結(jié)果,以上3個(gè)小查詢的處理成本已經(jīng)大大超出它們產(chǎn)出的價(jià)值。
因此,我們需要一種能夠快速支持查詢和業(yè)務(wù)演進(jìn)的解決方案,并且能夠在一次構(gòu)建后持續(xù)不斷地提供商業(yè)智能信息產(chǎn)出。 在這種情況下,最好的選擇是使用云原生部署的圖研發(fā)平臺(tái)。
圖研發(fā)平臺(tái)可以提供高效的圖分析能力,使得分析師可以更快地探索數(shù)據(jù),并且可以輕松地構(gòu)建和優(yōu)化查詢。 使用圖研發(fā)平臺(tái),可以將復(fù)雜的數(shù)據(jù)模型轉(zhuǎn)化為可視化的圖形表示,使得即使是新手分析師也可以直觀地理解數(shù)據(jù)之間的關(guān)系。 此外,云原生技術(shù)保證平臺(tái)的可擴(kuò)展性和彈性,使得一行代碼可以瞬間放大幾十萬(wàn)倍,支撐起大規(guī)模數(shù)據(jù)的快速分析。
接下來(lái)我們帶著這個(gè)問(wèn)題出發(fā),以支持云原生的分布式圖研發(fā)平臺(tái)GeaFlow為例,快速搭建起你的第一個(gè)商業(yè)智能應(yīng)用。
部署環(huán)境
部署GeaFlow需要一個(gè)docker+K8S的云原生環(huán)境,因此需要提前安裝docker和K8S。 GeaFlow能夠?qū)I(yè)務(wù)數(shù)據(jù)轉(zhuǎn)化為圖,一旦將數(shù)據(jù)導(dǎo)入一張圖中,后續(xù)就可以持續(xù)支持各種分析需求。 業(yè)務(wù)數(shù)據(jù)支持各類來(lái)源,包括數(shù)據(jù)庫(kù)、Hive、Kafka等等。
GeaFlow會(huì)在鏡像中自動(dòng)拉起MySQL、Redis、RocksDB、InfluxDB等必須組件。
部署K8S
GeaFlow依賴K8S運(yùn)行圖研發(fā)作業(yè),安裝K8S后需要取得API地址。
K8S API Server默認(rèn)監(jiān)聽(tīng)6443端口,可以在K8S集群的任一節(jié)點(diǎn)上使用以下命令查看集群信息:
查看輸出結(jié)果中的“Kubernetes master”字段,該字段將列出Master節(jié)點(diǎn)的URL地址,該地址即為K8S API地址,例如:
'/etc/kubernetes/admin.conf' 是Kubernetes集群的管理員配置文件,其中包含了客戶端程序訪問(wèn)Kubernetes API Server的必要信息。
kubernetes.ca.data:該字段包含一個(gè)Base64編碼的PEM格式的CA證書(shū),用于驗(yàn)證Kubernetes API Server的身份。
kubernetes.cert.data:該字段包含一個(gè)Base64編碼的PEM格式的客戶端證書(shū),用于驗(yàn)證客戶端的身份。
kubernetes.cert.key:該字段包含一個(gè)Base64編碼的PEM格式的私鑰,用于解密客戶端證書(shū)。
這些字段的值通常被編碼為Base64格式并存儲(chǔ)在配置文件中,以保證安全性。
GeaFlow需要取得這三個(gè)參數(shù)以啟動(dòng)K8S客戶端,提交作業(yè)到集群。
部署DFS
為了存儲(chǔ)TB級(jí)別的超大規(guī)模圖,可能需要搭建DFS,小規(guī)模數(shù)據(jù)則不必要部署Hadoop,GeaFlow可以將圖數(shù)據(jù)保存在本地磁盤(pán)中。
部署Hadoop后,需要取得文件系統(tǒng)地址,GeaFlow需要連接Hadoop寫(xiě)入圖數(shù)據(jù)和系統(tǒng)運(yùn)行狀態(tài)數(shù)據(jù)。 打開(kāi)終端并登錄到Hadoop集群中的任何一個(gè)節(jié)點(diǎn),運(yùn)行以下命令:
這將顯示Hadoop集群的所有主節(jié)點(diǎn)的列表。如果集群只有一個(gè)主節(jié)點(diǎn),則只會(huì)顯示一個(gè)主節(jié)點(diǎn)的名稱。 連接到Hadoop集群的主節(jié)點(diǎn),運(yùn)行以下命令:
這將顯示fs.defaultFS的值,即Hadoop集群的默認(rèn)文件系統(tǒng)URI。
部署外部數(shù)據(jù)源
GeaFlow目前支持DFS、Kafka、Hive等數(shù)據(jù)源,未來(lái)將支持JDBC、Pulsar等數(shù)據(jù)源。
用戶可以實(shí)現(xiàn)自定義的數(shù)據(jù)源,參考[自定義Connector文檔](https://tugraph-analytics.readthedocs.io/en/latest/docs-cn/application-development/dsl/connector/udc/)。其中也包含現(xiàn)有數(shù)據(jù)源的使用方法。
如果需要更多數(shù)據(jù)源的支持,可以通過(guò)GitHub項(xiàng)目地址提出ISSUE,或者加入微信群聯(lián)系我們。
安裝GeaFlow
GeaFlow提供一個(gè)分布式圖計(jì)算引擎GeaFlow,同時(shí)提供一個(gè)完整的圖研發(fā)管控平臺(tái)Console。 用戶可在系統(tǒng)內(nèi)完成圖數(shù)據(jù)創(chuàng)建、研發(fā)、運(yùn)維等工作。 管控平臺(tái)Console可以基于Docker獨(dú)立啟動(dòng),配置好集群和存儲(chǔ)系統(tǒng)后,圖研發(fā)作業(yè)可以方便地提交到K8S集群運(yùn)行。
參考[GeaFlow安裝部署文檔](https://tugraph-analytics.readthedocs.io/en/latest/docs-cn/deploy/install_guide/)安裝GeaFlow。
在集群配置步驟中,配置K8S集群到GeaFlow,填入K8S服務(wù)地址與前文提到的證書(shū)信息。

安裝時(shí)會(huì)提示**當(dāng)前為單機(jī)部署模式**,這表示Console平臺(tái)使用默認(rèn)單機(jī)部署。 圖研發(fā)作業(yè)會(huì)被提交到配置的K8S集群,Console平臺(tái)提供作業(yè)編輯和運(yùn)維能力,不受影響。
在數(shù)據(jù)存儲(chǔ)配置步驟中,配置導(dǎo)入GeaFlow的圖數(shù)據(jù)存儲(chǔ)位置。

數(shù)據(jù)量較小可以配置為L(zhǎng)OCAL模式,無(wú)需修改。 若數(shù)據(jù)量比較大,配置為DFS地址,Root路徑為存儲(chǔ)數(shù)據(jù)在DFS中的根目錄。
最后點(diǎn)擊一鍵安裝完成GeaFlow安裝部署。
構(gòu)圖
一次構(gòu)圖
GeaFlow可以支持TB級(jí)別的超大規(guī)模圖,使得用戶構(gòu)圖完成后,輕松應(yīng)對(duì)業(yè)務(wù)演進(jìn)。 超大規(guī)模數(shù)據(jù)的存儲(chǔ)需要DFS的支持,數(shù)據(jù)來(lái)源可以是數(shù)據(jù)庫(kù)、Hive、Kafka等等任何外部系統(tǒng),通過(guò)對(duì)應(yīng)的Connector讀寫(xiě)數(shù)據(jù)。
舉例來(lái)說(shuō),我們創(chuàng)建實(shí)現(xiàn)商業(yè)智能應(yīng)用的第一張圖,命名為bi。 創(chuàng)建圖后, 將外部數(shù)據(jù)源的業(yè)務(wù)數(shù)據(jù)導(dǎo)入圖中,使用對(duì)應(yīng)的Connector完成數(shù)據(jù)導(dǎo)入。

圖的Schema定義如下,圖名稱為bi:
追加
即使在構(gòu)圖完成后,也可以向圖中追加新的數(shù)據(jù)。 追加數(shù)據(jù)時(shí),還可以流式觸發(fā)增量查詢,不斷更新查詢結(jié)果。

向圖bi中單獨(dú)追加Person和knows點(diǎn)邊數(shù)據(jù)的GQL:
圖研發(fā)實(shí)現(xiàn)商業(yè)智能
數(shù)據(jù)調(diào)查
分析商業(yè)數(shù)據(jù)的第一步是明確問(wèn)題,并通過(guò)數(shù)據(jù)調(diào)查開(kāi)始針對(duì)性地進(jìn)行數(shù)據(jù)分析,避免浪費(fèi)時(shí)間和資源在無(wú)用的分析上。 我們已經(jīng)利用GeaFlow將數(shù)據(jù)導(dǎo)入圖bi中,可以通過(guò)運(yùn)行圖查詢作業(yè)快速地得出結(jié)論和洞察。
以如下查詢?yōu)槔?,它幫助我們了解用戶關(guān)注的tag都有哪些,結(jié)果被寫(xiě)入本地或DFS的interest_tag文件夾中。
其核心查詢是 **MATCH (person:Person)-[:hasInterest]->(tag:Tag)**。 這里**()**表示查詢圖中的點(diǎn),**[]**表示查詢圖中的邊。 完整的含義是"用戶感興趣的標(biāo)簽",GeaFlow采用類似ISO-GQL的模式表達(dá),可以方便自然地描述關(guān)系。
通過(guò)管控平臺(tái)Console,分析人員可以提交一系列研究作業(yè)。 這些圖查詢作業(yè)會(huì)通過(guò)GeaFlow引擎自動(dòng)提交到K8S集群中分布式地運(yùn)行,大大太高了數(shù)據(jù)分析的能力和效率。

運(yùn)行的圖查詢均可在Console界面查看,方便回溯和管理。
圖研發(fā)
通過(guò)了基礎(chǔ)的數(shù)據(jù)調(diào)查,分析師開(kāi)始關(guān)注用戶在標(biāo)簽上展現(xiàn)的中心性。 我們可以自定義一種中心性關(guān)系:
用戶相對(duì)標(biāo)簽的中心性包括兩部分,第一部分等于用戶發(fā)送該標(biāo)簽消息數(shù),第二部分為用戶對(duì)該TAG感興趣則+100
計(jì)算圖中所有用戶對(duì)TAG的中心性可以被表示為如下的查詢:
其中person.score由person.messageScore和IF(person.hasInterest > 0, 100, 0)兩部分組成,返回的列表經(jīng)分?jǐn)?shù)降序排列,取前100條記錄。
更近一步地,分析人員可以定義這種中心性分?jǐn)?shù)的一度傳播,使其成為中介中心性分?jǐn)?shù)的近似值。 我們?cè)O(shè)計(jì)的查詢關(guān)系如下圖,用戶對(duì)某個(gè)TAG的中介中心性分?jǐn)?shù)近似為與其具有knows關(guān)系用戶的中心性分?jǐn)?shù)之和。

這個(gè)查詢計(jì)算了一段時(shí)間內(nèi),**1020002**這個(gè)標(biāo)簽相關(guān)的用戶一度中介中心性分?jǐn)?shù),把個(gè)人的中心性分?jǐn)?shù)與中介中心性分?jǐn)?shù)相加,降序排列后輸出前100條記錄。
至此,我們模擬進(jìn)行了一次圖研發(fā)過(guò)程,得到了一種可以利用的標(biāo)簽中心性計(jì)算方法。 整個(gè)過(guò)程都在GeaFlow的管控平臺(tái)Console中完成,分析人員無(wú)需關(guān)注云上的作業(yè)運(yùn)行細(xì)節(jié)。
構(gòu)建應(yīng)用
如果我們希望長(zhǎng)期利用圖研發(fā)得到的計(jì)算方法,則可以將其構(gòu)建為長(zhǎng)期運(yùn)行的圖計(jì)算應(yīng)用。
通過(guò)接入數(shù)據(jù)源進(jìn)行流式圖查詢,GeaFlow將在圖每次更新或外部數(shù)據(jù)觸發(fā)時(shí),執(zhí)行一次中介中心性分?jǐn)?shù)計(jì)算。 更新的結(jié)果將被輸出到外部系統(tǒng),方便分發(fā)給下游。
搭建方法可以參考誰(shuí)在進(jìn)行循環(huán)交易?TuGraph+Kafka的流圖解決方案這篇博文,這里不再贅述。
總結(jié)
本文介紹了GeaFlow如何在云原生的K8S環(huán)境中安裝部署,并模擬了一次商業(yè)智能研究過(guò)程。 全程采用GeaFlow自有的管控平臺(tái)Console提交作業(yè),展現(xiàn)了系統(tǒng)強(qiáng)大的表達(dá)和計(jì)算能力。

GeaFlow(品牌名TuGraph-Analytics) 已正式開(kāi)源,歡迎大家關(guān)注?。?!
歡迎給我們 Star 哦!
Welcome to give us a Star!
GitHub?? https://github.com/TuGraph-family/tugraph-analytics
更多精彩內(nèi)容,關(guān)注我們的博客 https://tugraph-analytics.github.io/?