葉 楓,張 鵬,夏潤亮,顧和生,陳 勇
(1.河海大學計算機與信息學院, 江蘇 南京 211100; 2.南京龍淵微電子科技有限公司,江蘇 南京 211106;3.江蘇省水利廳,江蘇 南京 210029; 4.黃河水利科學研究院,河南 鄭州 450003;5.南京市江北新區(qū)環(huán)境保護與水務(wù)局,江蘇 南京 210032)
IBM于2008年率先提出了“智慧地球”,期望通過普適的數(shù)字化、網(wǎng)絡(luò)化和智能化,提高效率、靈活性,做出更加明智的決策?!爸腔邸斌w現(xiàn)在3個方面:“更透徹的感知,更廣泛的互聯(lián)互通,更深入的智能化”[1]。所謂“更透徹的感知”是指利用任何可以隨時隨地感知、測量、捕獲和傳遞信息的設(shè)備、系統(tǒng)或流程;“更廣泛的互聯(lián)互通”是指通過各種形式的高速寬帶通信網(wǎng)絡(luò),將個人電子設(shè)備、組織機構(gòu)等信息系統(tǒng)中收集和儲存的分散信息及數(shù)據(jù)連接起來,進行交互及多方共享,從而更好地對環(huán)境和業(yè)務(wù)狀況進行實時監(jiān)控,從全局的角度分析并實時解決問題,使得工作和任務(wù)得以通過遠程的、多方協(xié)作方式完成;“更深入的智能化”指使用先進技術(shù)(如數(shù)據(jù)挖掘工具、科學模型)來完成復雜的數(shù)據(jù)分析、匯總和計算,整合和分析跨地域、跨行業(yè)和職能部門的海量數(shù)據(jù)和信息,并應(yīng)用到特定行業(yè)、場景以及解決方案中,以更好地支持決策和行動,如,“智慧醫(yī)療”“智慧城市”和“智慧交通”等。由于水利業(yè)務(wù)的復雜性、動態(tài)性,涉及因素(天氣、地形、人類活動等)的多樣性及關(guān)聯(lián)性,導致水利業(yè)務(wù)數(shù)據(jù)也呈現(xiàn)多樣性、動態(tài)性、大數(shù)據(jù)規(guī)?;忍攸c,這為水利領(lǐng)域智慧化的研究帶來諸多挑戰(zhàn),當前仍需要堅實的理論、恰當?shù)哪P?、有效的范例、深入的試驗和具體的實現(xiàn)。從信息科學和技術(shù)的角度看,主要有2個關(guān)鍵問題:①實現(xiàn)“智慧”,從根本上解決數(shù)據(jù)密集型科學發(fā)現(xiàn)的問題[2-4],這既有科研傳感器數(shù)據(jù)集的海量性、多樣性、豐富性、不確定性、實時性帶來的挑戰(zhàn),也有對水利領(lǐng)域數(shù)據(jù)內(nèi)在的時空特性和特定屬性理解和處理的困難;②實現(xiàn)“智慧化”的河流、流域,驗證所提出的“智慧河流”等的可行性、有效性,需要選型并構(gòu)建面向水利領(lǐng)域大數(shù)據(jù)的獲取、處理、分析的綜合平臺,以有效應(yīng)對大數(shù)據(jù)多樣化的處理場景。本文提出了基于新一代大數(shù)據(jù)處理引擎Flink的“智慧滁河”系統(tǒng),旨在為水利信息化邁向“智慧”提供可行的解決方案。
“智慧河流”“智慧流域”和“智慧水利”等,實質(zhì)是“智慧地球”理念在水利領(lǐng)域的延伸。當前,對于水利領(lǐng)域智慧化的研究,代表性的工作有蔣云鐘等[5-6]提出的“智慧流域”和王忠靜等[7]提出的水聯(lián)網(wǎng)和智慧水利的概念。蔣云鐘等[5-6]提出,智慧流域是指把新一代IT技術(shù)充分運用于流域綜合管理,把傳感器嵌入和裝備到流域各個角落的自然系統(tǒng)和人工系統(tǒng)中,通過普遍連接形成“流域物聯(lián)網(wǎng)”;而后通過超級計算機和云計算將“流域物聯(lián)網(wǎng)”整合起來,以多源耦合的氣象水文信息保障平臺、二元水循環(huán)及伴生過程數(shù)值模擬平臺等為支撐,將其與數(shù)字流域耦合起來,完成數(shù)字流域與物理流域的無縫集成,使人類能以更加精細和動態(tài)的方式對流域進行規(guī)劃、設(shè)計和管理,從而達到流域的“智慧”狀態(tài)。王忠靜等[7]認為,水聯(lián)網(wǎng)的總體架構(gòu)是集物理水網(wǎng)、虛擬水網(wǎng)和市場水網(wǎng)為一體的現(xiàn)代化水資源系統(tǒng)。在實現(xiàn)層面,需要物聯(lián)網(wǎng)、云平臺、服務(wù)體系來探索智慧化水利之路,已成為當前的研究共識,并已做了一些具體工作[8-9]。但是,從信息科學和技術(shù)的角度看,實現(xiàn)“智慧”的關(guān)鍵標準是從根本上是解決數(shù)據(jù)密集型科學發(fā)現(xiàn)的問題,目前缺乏具體完整的系統(tǒng)架構(gòu)方案或典型案例。由于水利業(yè)務(wù)的復雜性、動態(tài)性等特點,對大規(guī)模的動態(tài)、實時、多樣化水利業(yè)務(wù)數(shù)據(jù)的處理存在諸多挑戰(zhàn)。因此,應(yīng)把握“智慧”的特征,根據(jù)水利特定領(lǐng)域大數(shù)據(jù)驅(qū)動的主線,選擇合適的平臺和技術(shù)進行集成,構(gòu)建智慧化應(yīng)用系統(tǒng)。
實現(xiàn)“智慧”,從根本上說是解決數(shù)據(jù)密集型科學發(fā)現(xiàn)的問題,數(shù)據(jù)本身是核心,涉及數(shù)據(jù)的獲取、傳遞、存儲、處理和展現(xiàn)等流程。水利領(lǐng)域大數(shù)據(jù)最顯著的特點可以概況為規(guī)模大、主題多樣、數(shù)據(jù)本身的信息豐富、處理和利用難度大。根據(jù)馮鈞等[10]的研究,經(jīng)過長期的業(yè)務(wù)實踐,水利領(lǐng)域已經(jīng)積累了大量分布異構(gòu)獨立的業(yè)務(wù)數(shù)據(jù),如,實測信息就包括水文觀測信息(地表地下水量水質(zhì)狀態(tài)等信息)、水利設(shè)施在線運行狀態(tài)信息、用水戶用水排水信息等,截至2012年,單是水文數(shù)據(jù),全國已超100TB。隨著各類水文、水質(zhì)傳感器和攝像頭等的廣泛應(yīng)用,所獲取數(shù)據(jù)的規(guī)模和增長速度都是空前的。從主題角度,有水文、水質(zhì)[11]、水資源、水利設(shè)施(空間)、土壤侵蝕、灌溉、水能資源調(diào)查、農(nóng)村水電等專題,以及第一次水利普查工程對河流湖泊、水利工程、重點經(jīng)濟社會取用水戶及水利單位等對象進行普查和清查匯總形成的普查成果數(shù)據(jù)。這些主題不斷豐富著水利領(lǐng)域的大數(shù)據(jù)集。以水資源數(shù)據(jù)為例,水利信息往往具有以下特征[12]:存在異常數(shù)值,連續(xù)觀測的值往往是彼此密切相關(guān)的,依賴于其他變量等。水利領(lǐng)域數(shù)據(jù)的處理和利用難度很大,主要是因為數(shù)據(jù)獲取過程中對位置、環(huán)境、天氣等相關(guān)因素的數(shù)據(jù)系統(tǒng)標注缺失,丟失了數(shù)據(jù)之間存在的豐富時空關(guān)聯(lián)信息。水利領(lǐng)域的業(yè)務(wù)數(shù)據(jù)迥異于商業(yè)數(shù)據(jù),其數(shù)據(jù)類型豐富、規(guī)模大,屬性和關(guān)聯(lián)關(guān)系也更加復雜[13],因此,研究并選擇合適的大數(shù)據(jù)處理平臺和技術(shù)成為構(gòu)建智慧化系統(tǒng)的關(guān)鍵。
Apache Flink[14-16]是由歐洲的多名研究者和多家資助單位聯(lián)合研發(fā)的一款開源的并行化數(shù)據(jù)分析軟件,現(xiàn)已成為Apache Software Foundation的頂級項目。Flink本質(zhì)是一個流式計算引擎,在同一個運行時(Runtime),分別搭建了流式計算和批處理的編程接口和相配套的生態(tài)系統(tǒng),其體系結(jié)構(gòu)圖見圖1。
圖1 Apache Flink的體系架構(gòu)
Apache Flink具有的特性是:①既能支持高吞吐、低延遲、高性能的流處理操作,也可以用于批數(shù)據(jù)的處理;②支持有狀態(tài)計算的Exactly-once語義;③具備基于輕量級、分布式快照(Snapshot)實現(xiàn)的容錯機制;④支持高度靈活的窗口(Window)操作,包括Time、Count、Session以及Data-driven的窗口操作;⑤在JVM內(nèi)部實現(xiàn)了自身的內(nèi)存管理;⑥支持迭代計算;⑦支持機器學習(FlinkML)、圖分析(Gelly)、關(guān)系數(shù)據(jù)處理(Table)和復雜事件處理(CEP);⑧支持Flink on YARN、HDFS、Kafka、Apache HBase、Hadoop、RabbitMQ、S3以及XtreemFS等大數(shù)據(jù)相關(guān)軟件。
圖2 “智慧滁河”的體系結(jié)構(gòu)
相比于Spark、Storm等大數(shù)據(jù)平臺,Apache Flink被認為是第四代,也是最新一代的大數(shù)據(jù)處理引擎。文獻[17]通過2個試驗評估吞吐效率和節(jié)點失效下的彈性(Resilience),結(jié)果表明,F(xiàn)link比Spark Streaming快15倍。Chintapalli等[18]開發(fā)了一個流處理Benchmark,用于測評Flink、Storm和Spark Streaming。通過構(gòu)造數(shù)據(jù)管道機制,最大程度地模擬了真實世界的數(shù)據(jù)流場景。結(jié)果表明,F(xiàn)link、Storm性能近似,對于流數(shù)據(jù)的響應(yīng)近似線性;而Spark Streaming雖吞吐量較大,但延遲較高?;?個不同數(shù)據(jù)集和不同的算法,文獻[19]提出了一個用于比較Apache Flink和Apache Spark的Benchmark,結(jié)果表明Apache Flink在數(shù)據(jù)挖掘和圖處理方面比Apache Spark更優(yōu)??梢钥闯?,F(xiàn)link的優(yōu)勢在于其從上到下提供了一整套完整的、針對大數(shù)據(jù)的棧式解決方案,并為用戶提供了易于使用的數(shù)據(jù)分析系統(tǒng)。
“智慧滁河”系統(tǒng)的體系結(jié)構(gòu)分為5層:感知識別層、網(wǎng)絡(luò)構(gòu)建層、基礎(chǔ)設(shè)施層、平臺與服務(wù)層以及應(yīng)用層,見圖2。感知識別層由3部分組成,一是多源數(shù)據(jù)的感知、采集機制,如:RFID、視頻探頭、全球定位系統(tǒng)、遙感、各類傳感器(水位、水質(zhì)、雨量等);二是控制機制,用于交互下位機和控制器,并與網(wǎng)絡(luò)構(gòu)建層通信;三是能量管理、抗干擾、編解碼等機制。如,將所監(jiān)測的河道沿程的水位、流速、水質(zhì)以及視頻監(jiān)控攝像頭自動獲取監(jiān)測閘門的開度等傳給網(wǎng)絡(luò)構(gòu)建層,也會接受反饋的指令,對傳感器、下位機和控制器進行操作,進而調(diào)整傳感器,操控閘門、灌溉設(shè)備等。網(wǎng)絡(luò)構(gòu)建層是實現(xiàn)物-物互聯(lián)的重要基礎(chǔ),主要由各類網(wǎng)絡(luò)組成,包括各種通信網(wǎng)絡(luò)、互聯(lián)網(wǎng)形成的融合網(wǎng)絡(luò)。該層的作用是把感知識別層所采集的數(shù)據(jù)接入網(wǎng)絡(luò)。以傳感器數(shù)據(jù)為例,各種監(jiān)測數(shù)據(jù)通過無線傳感器網(wǎng)絡(luò)形成局部區(qū)域網(wǎng)絡(luò),將覆蓋區(qū)域的信息收集起來,然后通過網(wǎng)絡(luò)構(gòu)建層自動向位于基礎(chǔ)設(shè)施層的數(shù)據(jù)中心傳輸數(shù)據(jù)流。不難看出,網(wǎng)絡(luò)構(gòu)建層是“更廣泛的互聯(lián)互通”的實現(xiàn)基礎(chǔ)?;A(chǔ)設(shè)施層、平臺與服務(wù)層以及應(yīng)用服務(wù)層均基于以云計算[20]為代表的大規(guī)模分布式處理平臺之上?;A(chǔ)設(shè)施層與云計算模型的IaaS(基礎(chǔ)設(shè)施即服務(wù),Infrastructure as a Service)層是相對應(yīng)的,主要包括:用于管理、存儲水利領(lǐng)域大數(shù)據(jù)的存儲機制(關(guān)系數(shù)據(jù)庫,NoSQL[21-22]數(shù)據(jù)庫等)、虛擬機群、網(wǎng)絡(luò)資源,該層可由開源或商業(yè)的云計算解決方案實現(xiàn),如Apache CloudStack、OpenStack等。用戶可以按需整合資源以適于不同的業(yè)務(wù)處理場景。
平臺與服務(wù)層包括諸多相關(guān)的業(yè)務(wù)系統(tǒng)、模型庫和知識庫等,如各類數(shù)據(jù)存儲機制,知識庫包含灌區(qū)相關(guān)的專家知識,模型庫包括系統(tǒng)涉及的計算模型(如需水預報模型)。通過對各類業(yè)務(wù)系統(tǒng)、模型庫和知識庫進行集成,實現(xiàn)具體的業(yè)務(wù)服務(wù)、中間件或服務(wù)工作流,以供上層應(yīng)用軟件調(diào)用。Apache Flink為構(gòu)建平臺層提供最為直接的支持,它能為業(yè)務(wù)邏輯提供并行化的處理機制,也能訪問基礎(chǔ)設(shè)施層中的數(shù)據(jù)資源等。在正確部署Apache Flink的基礎(chǔ)上,基于Apache Flink提供的流數(shù)據(jù)Datastream API或Batch Processing API,編程先獲取執(zhí)行環(huán)境,然后通過各種連接器(connectors)獲取相應(yīng)的數(shù)據(jù)源,接下來利用各種轉(zhuǎn)換函數(shù)(Map、KeyBy、Reduce、Window等)對數(shù)據(jù)進行處理,最后將處理的數(shù)據(jù)保存。
處于整個體系結(jié)構(gòu)最上層的是應(yīng)用服務(wù)層。該層主要訪問界面或接口,承擔計算和分析結(jié)果展示的任務(wù)。它既可以通過各種應(yīng)用軟件調(diào)用平臺與中間件層的服務(wù),也可以調(diào)用來自第三方提供的各類服務(wù)(百度路徑導航服務(wù)、地震信息查詢服務(wù)、天氣預報服務(wù)等),將結(jié)果和交互界面展示給用戶。
選取2015年1月1日至2017年6月30日的滁河實時水位數(shù)據(jù)集,一共有18 910 865條數(shù)據(jù)記錄。運行環(huán)境是是由3臺同型號PC組成的集群,配置為:處理器為AMD Ryzen 7 1700X(八核),內(nèi)存是32G海盜船DDR4 3000Mhz,硬盤是三星sm961的128G固態(tài)硬盤,顯卡為華碩的GeForce GTX 1060。試驗一是查找特定水位值,如查找河道水位高度在“5.5”以上的記錄。通過邏輯訪問MySQL庫表的檢索方式,需要 8.41 s;通過邏輯訪問MongoDB的檢索方式,需要7.46 s;而通過Flink實現(xiàn)的邏輯訪問MongoDB,檢索完成時間只需要0.03 s左右。試驗二是查找最小值,如查找70余個監(jiān)測站點出現(xiàn)最低水位值的記錄。通過邏輯訪問MySQL庫表的檢索方式,需要16.2 s;通過邏輯訪問MongoDB的檢索方式,需要10.3 s;而通過Flink實現(xiàn)的邏輯訪問MySQL或MongoDB,檢索完成時間只需要0.03 s左右。試驗三是刪除數(shù)據(jù)操作。以500萬條記錄為例,效果更為明顯,只需要3.22 s,遠遠小于使用MySQL的邏輯所需的122 s。不難看出,通過Flink平臺提供的API實現(xiàn)機制,要比傳統(tǒng)的Java EE技術(shù)所開發(fā)的多層架構(gòu)有更優(yōu)的性能表現(xiàn),充分利用了對于集群的并發(fā)機制,讓大數(shù)據(jù)處理的方式簡單高效。
基于Flink的“智慧滁河”系統(tǒng)的計算能力遠超傳統(tǒng)的多層架構(gòu)系統(tǒng),讓大數(shù)據(jù)處理的方式變得簡單高效,也為水利信息化邁向“智慧”提供了可行解決方案。后續(xù)的研究將集中于研究Flink平臺上的機器學習算法與水文數(shù)據(jù)分析的結(jié)合,特別是針對傳感器流數(shù)據(jù)的實時分析工作,進一步完善“智慧滁河”系統(tǒng),為防汛防旱提供更加迅捷的決策支持,豐富水利信息化領(lǐng)域的數(shù)據(jù)智能化處理的完整案例。