梁 濤,許 琰,李燕超,楊改文
(河北工業(yè)大學(xué)人工智能與數(shù)據(jù)科學(xué)學(xué)院,天津300131)
為保證風(fēng)電機(jī)組狀態(tài)監(jiān)測(cè)大數(shù)據(jù)處理的實(shí)時(shí)性,本文將大數(shù)據(jù)處理技術(shù)引入數(shù)據(jù)處理過(guò)程,設(shè)計(jì)了風(fēng)電機(jī)組狀態(tài)監(jiān)測(cè)模型。該模型依托于風(fēng)電場(chǎng)SCADA系統(tǒng),其采樣頻率為10 s,模型數(shù)據(jù)來(lái)源為SCADA系統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)和監(jiān)測(cè)流數(shù)據(jù),其數(shù)據(jù)采集方式為軟件接口方式。本文采用大數(shù)據(jù)處理技術(shù),設(shè)計(jì)了基于Storm實(shí)時(shí)流處理技術(shù)和Spark批處理技術(shù)的風(fēng)電機(jī)組狀態(tài)監(jiān)測(cè)模型,闡述了該計(jì)算框架的整體架構(gòu)以及內(nèi)部邏輯,突出了其數(shù)據(jù)實(shí)時(shí)流處理和分布式計(jì)算兩大優(yōu)勢(shì)[3]。
基于大數(shù)據(jù)處理技術(shù)中的分布式存儲(chǔ)和分布式運(yùn)算,本文設(shè)計(jì)了基于實(shí)時(shí)流數(shù)據(jù)處理和內(nèi)存批處理的風(fēng)電機(jī)組狀態(tài)監(jiān)測(cè)模型。模型架構(gòu)主要由數(shù)據(jù)來(lái)源層、數(shù)據(jù)傳輸層、數(shù)據(jù)存儲(chǔ)層、編程模型層、數(shù)據(jù)分析層5個(gè)邏輯層組成。
各個(gè)邏輯層描述如下[4]:數(shù)據(jù)來(lái)源層,歷史數(shù)據(jù)來(lái)源為SCADA系統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù),實(shí)時(shí)數(shù)據(jù)來(lái)源為SCADA系統(tǒng)實(shí)時(shí)監(jiān)測(cè)流數(shù)據(jù);數(shù)據(jù)傳輸層通過(guò)數(shù)據(jù)交互組件完成數(shù)據(jù)存儲(chǔ)層與數(shù)據(jù)來(lái)源層的數(shù)據(jù)交互;數(shù)據(jù)存儲(chǔ)層的數(shù)據(jù)存儲(chǔ)主要采用HBase,Hive等分布式數(shù)據(jù)庫(kù)。編程模型層根據(jù)應(yīng)用場(chǎng)景選擇Spark或Storm完成對(duì)監(jiān)測(cè)數(shù)據(jù)的處理;數(shù)據(jù)分析層在使用數(shù)據(jù)挖掘算法進(jìn)行數(shù)據(jù)處理的過(guò)程中,提取風(fēng)電機(jī)組的故障特征、更新特征曲線。
由于本文選取的聚類算法需要進(jìn)行大規(guī)模數(shù)據(jù)的迭代運(yùn)算,運(yùn)算過(guò)程中會(huì)產(chǎn)生大量的中間數(shù)據(jù)。Spark基于內(nèi)存計(jì)算[5],迭代產(chǎn)生的中間數(shù)據(jù)存儲(chǔ)在內(nèi)存當(dāng)中,避免了中間數(shù)據(jù)在磁盤上多次的存取操作,能夠較大地提升聚類算法的運(yùn)行效率。Storm不同于Spark的是,Storm更適用于流數(shù)據(jù)處理,彌補(bǔ)了批處理不能滿足的實(shí)時(shí)性要求。符合大型風(fēng)電場(chǎng)集控中心對(duì)大量風(fēng)電機(jī)組進(jìn)行實(shí)時(shí)狀態(tài)監(jiān)測(cè)的需求[6]。
圖2 狀態(tài)監(jiān)測(cè)模型流程
2.1.1基于RDD-K-means++聚類算法的設(shè)計(jì)
為了避免K-means算法初始聚類中心選取隨機(jī)的缺點(diǎn),本文采用K-means++算法對(duì)風(fēng)功率曲線進(jìn)行聚類分析,以得到風(fēng)速功率曲線的實(shí)際參考曲線。借助于Spark平臺(tái)對(duì)迭代算法的高效執(zhí)行,基于RDD的K-means++算法主要過(guò)程是:
(1)讀取存儲(chǔ)在HDFS上的文件塊(Block)到內(nèi)存中,每個(gè)塊轉(zhuǎn)化為一個(gè)RDD,里面包含監(jiān)測(cè)數(shù)據(jù)的特征量集合(Vector)。
(2)首先隨機(jī)選取一個(gè)聚類中心c1,對(duì)RDD進(jìn)行映射(Map)操作,計(jì)算每個(gè)Vector(Point)相對(duì)于已有聚類中心的距離(distance),并輸出鍵值對(duì)(distance,(point,1)),生成新的RDD。
(3)在歸約(Reduce)操作中,對(duì)新的RDD進(jìn)行混合,以概率選擇距離最大的樣本作為新的聚類中心。
(4)重復(fù)映射和歸約操作,直到選出k個(gè)聚類中心。
(5)RDD進(jìn)行映射(Map)操作,計(jì)算每個(gè)Vector(Point)對(duì)應(yīng)的聚類編號(hào)(Class),其對(duì)應(yīng)鍵值對(duì)為(Class,(Point,1)),生成為新的RDD。
(6)接著在歸約(Reduce)操作中,對(duì)每個(gè)新的RDD進(jìn)行混合,相同聚類的數(shù)據(jù)存放在一起,計(jì)算每個(gè)聚類中心與屬于該類樣本之間的距離,并累加每個(gè)類的距離均值以得到總體距離Dis,將其作為K-means算法的代價(jià)函數(shù)。
(7)并在RDD內(nèi)部計(jì)算每個(gè)聚類中心點(diǎn)。重新計(jì)算它的聚類中心,即屬于該類的所有樣本的質(zhì)心。
(8)最后判斷中心點(diǎn)與前一個(gè)中心點(diǎn)之間的距離,如果滿足要求,則結(jié)束,否者從第五步開始,直到滿足結(jié)束條件。最后將輸出結(jié)果寫到HDFS中。
2.1.2多元偏度、多元峰度
偏度(Skewness)、峰度(Kurtosis)是統(tǒng)計(jì)學(xué)中度量隨機(jī)變量密度曲線的統(tǒng)計(jì)量,主要用來(lái)描述數(shù)據(jù)的分布狀態(tài)。在本模型中,將功率特性的多元偏度和多元峰度應(yīng)用到機(jī)組的性能狀態(tài)評(píng)估中,根據(jù)其偏離參考曲線的程度來(lái)判別風(fēng)電機(jī)組運(yùn)行性能。
Storm作為一種流處理技術(shù),其提交運(yùn)行的程序稱為拓?fù)?Topology)。拓?fù)浣Y(jié)構(gòu)由Spout和Bolt構(gòu)成。風(fēng)電機(jī)組狀態(tài)監(jiān)測(cè)模型拓?fù)浣Y(jié)構(gòu)如圖1所示。
圖1 Storm拓?fù)浣Y(jié)構(gòu)
Spout接收狀態(tài)監(jiān)測(cè)數(shù)據(jù)并形成元組,Bolt1接收數(shù)據(jù)并存儲(chǔ)到分布式存儲(chǔ)系統(tǒng)中,Bolt2對(duì)需要的監(jiān)測(cè)數(shù)據(jù)進(jìn)行篩選抽取,Bolt3計(jì)算風(fēng)速功率曲線的峰度和偏度。Blot4與Bolt5計(jì)算風(fēng)機(jī)實(shí)際功率曲線偏離參考曲線的程度。Bolt6根據(jù)偏離程度將風(fēng)電機(jī)組分為正常、異常和故障三類并將結(jié)果存入分布式文件系統(tǒng)中。此拓?fù)浣Y(jié)構(gòu)提取監(jiān)測(cè)流數(shù)據(jù)中的風(fēng)速和功率,計(jì)算功率的特征參量多元峰度和多元偏度,根據(jù)其偏離參考曲線的程度,對(duì)風(fēng)機(jī)狀態(tài)進(jìn)行評(píng)估。
本文選取風(fēng)速、功率等數(shù)據(jù)對(duì)風(fēng)機(jī)進(jìn)行狀態(tài)監(jiān)測(cè)。選取多元峰度和多元偏度作為功率的特征參量。數(shù)據(jù)處理流程如圖2所示。
歷史數(shù)據(jù)批處理:
(1)通過(guò)風(fēng)電場(chǎng)SCADA系統(tǒng)對(duì)各個(gè)風(fēng)場(chǎng)風(fēng)電機(jī)組數(shù)據(jù)進(jìn)行采集,匯集到集控中心側(cè)的SCADA關(guān)系數(shù)據(jù)庫(kù)當(dāng)中。
(2)使用Sqoop連接器將歷史數(shù)據(jù)從SCADA關(guān)系數(shù)據(jù)庫(kù)導(dǎo)入到Hadoop平臺(tái)的分布式文件系統(tǒng)(HDFS)中,供Spark進(jìn)行數(shù)據(jù)處理。
(3)在Spark平臺(tái)上對(duì)HDFS中存放的歷史數(shù)據(jù)進(jìn)行聚類處理。通過(guò)計(jì)算各個(gè)類中數(shù)據(jù)點(diǎn)與聚類中心的馬氏距離,根據(jù)其數(shù)值大小識(shí)別出異常數(shù)據(jù)點(diǎn),并進(jìn)行剔除,得到風(fēng)電機(jī)組的風(fēng)功率參考曲線。最后計(jì)算參考曲線的多元峰度和多元偏度值,作為實(shí)時(shí)狀態(tài)監(jiān)測(cè)的參考點(diǎn)。最后將計(jì)算結(jié)果存放到HDFS中。
圖3 功率曲線各類之間的馬氏距離
實(shí)時(shí)狀態(tài)監(jiān)測(cè)的實(shí)現(xiàn):
(1)配置kafka消息中間件來(lái)獲取SCADA系統(tǒng)狀態(tài)監(jiān)測(cè)流數(shù)據(jù),并將其作為Storm拓?fù)浣Y(jié)構(gòu)中Spout的數(shù)據(jù)來(lái)源。
(2)在Storm的拓?fù)浣Y(jié)構(gòu)中,對(duì)所需數(shù)據(jù)進(jìn)行篩選、構(gòu)建其實(shí)際功率曲線,并計(jì)算其多元峰度和多元偏度。將其與對(duì)應(yīng)風(fēng)機(jī)的峰度偏度參考點(diǎn)進(jìn)行對(duì)比,根據(jù)其偏離程度,將風(fēng)機(jī)狀態(tài)分為正常、異常、故障。最后將計(jì)算結(jié)果存放到HDFS中。
(3)由Sqoop連接器將HDFS中的風(fēng)機(jī)狀態(tài)數(shù)據(jù)導(dǎo)出到SCADA系統(tǒng)關(guān)系數(shù)據(jù)庫(kù)中,由SCADA系統(tǒng)讀取相應(yīng)的文件,根據(jù)其狀態(tài)分類進(jìn)行故障報(bào)警。
功率曲線反映的是風(fēng)電機(jī)組在不同風(fēng)速條件下產(chǎn)生功率的大小,本文選取了某風(fēng)電場(chǎng)1.6MW風(fēng)力發(fā)電機(jī)組自2017年2月1日至2017年3月1日采集的風(fēng)速(v)、有功功率(P)運(yùn)行數(shù)據(jù)。
本文使用K-means++聚類算法對(duì)風(fēng)功率曲線進(jìn)行聚類,將功率特性曲線分為15類。為了構(gòu)建風(fēng)機(jī)的參考曲線,需要去除異常樣本。在這里選用馬氏距離(Mahalanobis Distance)進(jìn)行計(jì)算,不受量綱的影響。馬氏距離定義如下
(1)
式中,Dij表示第i個(gè)樣本和聚類中心j之間的馬氏距離;S表示樣本的協(xié)方差矩陣。
分別計(jì)算樣本數(shù)據(jù)點(diǎn)與該聚類中心之間的馬氏距離,如圖3所示描述了功率曲線各樣本點(diǎn)與聚類中心的馬氏距離,并用色圖矩陣顯示距離的大小,數(shù)值越大色圖矩陣為紅色,反之,數(shù)值越小色圖矩陣則為藍(lán)色。
根據(jù)圖3剔除異常樣本點(diǎn),修正前后的P-v散點(diǎn)圖對(duì)比如圖4所示。其中,處理前如圖4a所示,剔除異常點(diǎn)后的標(biāo)準(zhǔn)曲線如圖4b所示。
圖4 修正后的功率曲線
為了對(duì)大型風(fēng)電場(chǎng)各個(gè)風(fēng)電機(jī)組進(jìn)行狀態(tài)監(jiān)測(cè)和狀態(tài)評(píng)估,對(duì)風(fēng)場(chǎng)中不同廠家不同型號(hào)的風(fēng)電機(jī)組構(gòu)建其參考風(fēng)功率曲線,并計(jì)算其參考曲線相應(yīng)的峰度和偏度值。
為檢測(cè)狀態(tài)監(jiān)測(cè)模型的性能,在實(shí)驗(yàn)室中搭建了風(fēng)電機(jī)組狀態(tài)監(jiān)測(cè)試驗(yàn)平臺(tái),實(shí)驗(yàn)環(huán)境由5臺(tái)浪潮臺(tái)式機(jī)組成,各個(gè)節(jié)點(diǎn)硬件配置:CPU型號(hào)Intel Core i5-3450,內(nèi)存 8GB,網(wǎng)絡(luò)帶寬100 Mb/s。其中一個(gè)節(jié)點(diǎn)作為控制節(jié)點(diǎn),其他四個(gè)節(jié)點(diǎn)作為工作節(jié)點(diǎn)。Hadoop使用的是2.7.3版本,Spark使用的是2.1.0版本,Scala使用的是2.11.8版本,Storm使用的是0.8.2版本,Zeromq使用的是2.1.7版本,Zookeeper使用的是3.4.5版本。
本次實(shí)驗(yàn)所用的數(shù)據(jù)為某風(fēng)力發(fā)電場(chǎng)風(fēng)機(jī)服務(wù)器中33臺(tái)風(fēng)力發(fā)電機(jī)的實(shí)時(shí)運(yùn)行數(shù)據(jù)。為驗(yàn)證監(jiān)測(cè)模型的有效性,在收集到的數(shù)據(jù)中選取了一定數(shù)量的故障風(fēng)機(jī)的數(shù)據(jù)。實(shí)驗(yàn)結(jié)果如圖5所示。
圖5 風(fēng)電機(jī)組運(yùn)行狀態(tài)
當(dāng)風(fēng)機(jī)出現(xiàn)異常狀況時(shí),實(shí)時(shí)功率曲線會(huì)偏離參考功率曲線,反映在峰度偏度上即為峰度偏度點(diǎn)偏離參考點(diǎn),根據(jù)其偏離程度將風(fēng)機(jī)狀態(tài)分為正常、異常和故障。圖5中,參考點(diǎn)附近的五角星參考點(diǎn)為正常狀態(tài),三角形參考點(diǎn)為異常狀態(tài)、六角星為故障狀態(tài)。通過(guò)本文的監(jiān)測(cè)方法,可以清晰直觀地對(duì)風(fēng)機(jī)狀態(tài)進(jìn)行監(jiān)測(cè)。
數(shù)據(jù)吞吐量反映了單位時(shí)間內(nèi)成功處理數(shù)據(jù)的數(shù)量。通過(guò)不斷增加數(shù)據(jù)量,對(duì)比數(shù)據(jù)集在Storm集群模式和單機(jī)模式下的運(yùn)行時(shí)間,以此來(lái)驗(yàn)證Storm集群的吞吐能力。為提高實(shí)驗(yàn)結(jié)果的準(zhǔn)確性,各個(gè)數(shù)據(jù)取10次實(shí)驗(yàn)的平均值,測(cè)試結(jié)果如圖6所示。
圖6 單機(jī)運(yùn)行與Storm集群運(yùn)行時(shí)間對(duì)比
由圖6可以看出,當(dāng)數(shù)據(jù)量較小時(shí),單機(jī)運(yùn)行時(shí)間較短。這是由于Storm集群模式采用分布式計(jì)算,數(shù)據(jù)在各個(gè)節(jié)點(diǎn)之間傳輸需要一定的時(shí)間。隨著數(shù)據(jù)量的增加,Storm集群處理數(shù)據(jù)所需的時(shí)間明顯縮短,集群的優(yōu)勢(shì)逐漸顯現(xiàn)。由于Storm集群有著其拓展性,可以滿足大量實(shí)時(shí)流數(shù)據(jù)的處理需求。
隨機(jī)選取某風(fēng)力發(fā)電場(chǎng)GE1.6MW風(fēng)機(jī)2015年1月1日00∶00∶00到2017年6月30日23∶50∶00中的3組數(shù)據(jù)(分別為1×106、2×106、3×106條記錄數(shù))。改變spark集群中節(jié)點(diǎn)內(nèi)存大小,測(cè)試在不同數(shù)據(jù)量,工作節(jié)點(diǎn)分配不同內(nèi)存的情況下集群處理數(shù)據(jù)所用的時(shí)間,進(jìn)行5次實(shí)驗(yàn),記錄時(shí)間取平均值,結(jié)果統(tǒng)計(jì)如表1。
從表1可以看出。當(dāng)數(shù)據(jù)量較小時(shí),內(nèi)存大小對(duì)數(shù)據(jù)處理時(shí)間影響較小。隨著數(shù)據(jù)量的增大,分配有較大內(nèi)存的集群在處理時(shí)間上有著較為明顯的減少。因此當(dāng)數(shù)據(jù)量較大時(shí),可以通過(guò)適當(dāng)增大spark工作節(jié)點(diǎn)的內(nèi)存來(lái)提高數(shù)據(jù)處理效率。
表1 測(cè)試時(shí)間對(duì)比
針對(duì)海量風(fēng)電機(jī)組狀態(tài)監(jiān)測(cè)數(shù)據(jù)實(shí)時(shí)處理的需求,引入Spark和Storm,設(shè)計(jì)了風(fēng)電機(jī)組狀態(tài)監(jiān)測(cè)模型?;赟park框架實(shí)現(xiàn)了K-means++聚類算法,提高數(shù)據(jù)處理效率。設(shè)計(jì)了Storm拓?fù)浣Y(jié)構(gòu),保證了狀態(tài)監(jiān)測(cè)的實(shí)時(shí)性。實(shí)驗(yàn)結(jié)果表明,本文提出的模型有著較好的吞吐量和加速比,并且在數(shù)據(jù)處理的實(shí)時(shí)性方面有著很大的提升,彌補(bǔ)了單機(jī)性能不足的缺陷。