梁 濤,許 琰,李燕超,楊改文
(河北工業大學人工智能與數據科學學院,天津300131)
為保證風電機組狀態監測大數據處理的實時性,本文將大數據處理技術引入數據處理過程,設計了風電機組狀態監測模型。該模型依托于風電場SCADA系統,其采樣頻率為10 s,模型數據來源為SCADA系統關系型數據庫和監測流數據,其數據采集方式為軟件接口方式。本文采用大數據處理技術,設計了基于Storm實時流處理技術和Spark批處理技術的風電機組狀態監測模型,闡述了該計算框架的整體架構以及內部邏輯,突出了其數據實時流處理和分布式計算兩大優勢[3]。
基于大數據處理技術中的分布式存儲和分布式運算,本文設計了基于實時流數據處理和內存批處理的風電機組狀態監測模型。模型架構主要由數據來源層、數據傳輸層、數據存儲層、編程模型層、數據分析層5個邏輯層組成。
各個邏輯層描述如下[4]:數據來源層,歷史數據來源為SCADA系統的關系型數據庫,實時數據來源為SCADA系統實時監測流數據;數據傳輸層通過數據交互組件完成數據存儲層與數據來源層的數據交互;數據存儲層的數據存儲主要采用HBase,Hive等分布式數據庫。編程模型層根據應用場景選擇Spark或Storm完成對監測數據的處理;數據分析層在使用數據挖掘算法進行數據處理的過程中,提取風電機組的故障特征、更新特征曲線。
由于本文選取的聚類算法需要進行大規模數據的迭代運算,運算過程中會產生大量的中間數據。Spark基于內存計算[5],迭代產生的中間數據存儲在內存當中,避免了中間數據在磁盤上多次的存取操作,能夠較大地提升聚類算法的運行效率。Storm不同于Spark的是,Storm更適用于流數據處理,彌補了批處理不能滿足的實時性要求。符合大型風電場集控中心對大量風電機組進行實時狀態監測的需求[6]。

圖2 狀態監測模型流程
2.1.1基于RDD-K-means++聚類算法的設計
為了避免K-means算法初始聚類中心選取隨機的缺點,本文采用K-means++算法對風功率曲線進行聚類分析,以得到風速功率曲線的實際參考曲線。借助于Spark平臺對迭代算法的高效執行,基于RDD的K-means++算法主要過程是:
(1)讀取存儲在HDFS上的文件塊(Block)到內存中,每個塊轉化為一個RDD,里面包含監測數據的特征量集合(Vector)。
(2)首先隨機選取一個聚類中心c1,對RDD進行映射(Map)操作,計算每個Vector(Point)相對于已有聚類中心的距離(distance),并輸出鍵值對(distance,(point,1)),生成新的RDD。
(3)在歸約(Reduce)操作中,對新的RDD進行混合,以概率選擇距離最大的樣本作為新的聚類中心。
(4)重復映射和歸約操作,直到選出k個聚類中心。
(5)RDD進行映射(Map)操作,計算每個Vector(Point)對應的聚類編號(Class),其對應鍵值對為(Class,(Point,1)),生成為新的RDD。
(6)接著在歸約(Reduce)操作中,對每個新的RDD進行混合,相同聚類的數據存放在一起,計算每個聚類中心與屬于該類樣本之間的距離,并累加每個類的距離均值以得到總體距離Dis,將其作為K-means算法的代價函數。
(7)并在RDD內部計算每個聚類中心點。重新計算它的聚類中心,即屬于該類的所有樣本的質心。
(8)最后判斷中心點與前一個中心點之間的距離,如果滿足要求,則結束,否者從第五步開始,直到滿足結束條件。最后將輸出結果寫到HDFS中。
2.1.2多元偏度、多元峰度
偏度(Skewness)、峰度(Kurtosis)是統計學中度量隨機變量密度曲線的統計量,主要用來描述數據的分布狀態。在本模型中,將功率特性的多元偏度和多元峰度應用到機組的性能狀態評估中,根據其偏離參考曲線的程度來判別風電機組運行性能。
Storm作為一種流處理技術,其提交運行的程序稱為拓撲(Topology)。拓撲結構由Spout和Bolt構成。風電機組狀態監測模型拓撲結構如圖1所示。

圖1 Storm拓撲結構
Spout接收狀態監測數據并形成元組,Bolt1接收數據并存儲到分布式存儲系統中,Bolt2對需要的監測數據進行篩選抽取,Bolt3計算風速功率曲線的峰度和偏度。Blot4與Bolt5計算風機實際功率曲線偏離參考曲線的程度。Bolt6根據偏離程度將風電機組分為正常、異常和故障三類并將結果存入分布式文件系統中。此拓撲結構提取監測流數據中的風速和功率,計算功率的特征參量多元峰度和多元偏度,根據其偏離參考曲線的程度,對風機狀態進行評估。
本文選取風速、功率等數據對風機進行狀態監測。選取多元峰度和多元偏度作為功率的特征參量。數據處理流程如圖2所示。
歷史數據批處理:
(1)通過風電場SCADA系統對各個風場風電機組數據進行采集,匯集到集控中心側的SCADA關系數據庫當中。
(2)使用Sqoop連接器將歷史數據從SCADA關系數據庫導入到Hadoop平臺的分布式文件系統(HDFS)中,供Spark進行數據處理。
(3)在Spark平臺上對HDFS中存放的歷史數據進行聚類處理。通過計算各個類中數據點與聚類中心的馬氏距離,根據其數值大小識別出異常數據點,并進行剔除,得到風電機組的風功率參考曲線。最后計算參考曲線的多元峰度和多元偏度值,作為實時狀態監測的參考點。最后將計算結果存放到HDFS中。

圖3 功率曲線各類之間的馬氏距離
實時狀態監測的實現:
(1)配置kafka消息中間件來獲取SCADA系統狀態監測流數據,并將其作為Storm拓撲結構中Spout的數據來源。
(2)在Storm的拓撲結構中,對所需數據進行篩選、構建其實際功率曲線,并計算其多元峰度和多元偏度。將其與對應風機的峰度偏度參考點進行對比,根據其偏離程度,將風機狀態分為正常、異常、故障。最后將計算結果存放到HDFS中。
(3)由Sqoop連接器將HDFS中的風機狀態數據導出到SCADA系統關系數據庫中,由SCADA系統讀取相應的文件,根據其狀態分類進行故障報警。
功率曲線反映的是風電機組在不同風速條件下產生功率的大小,本文選取了某風電場1.6MW風力發電機組自2017年2月1日至2017年3月1日采集的風速(v)、有功功率(P)運行數據。
本文使用K-means++聚類算法對風功率曲線進行聚類,將功率特性曲線分為15類。為了構建風機的參考曲線,需要去除異常樣本。在這里選用馬氏距離(Mahalanobis Distance)進行計算,不受量綱的影響。馬氏距離定義如下
(1)
式中,Dij表示第i個樣本和聚類中心j之間的馬氏距離;S表示樣本的協方差矩陣。
分別計算樣本數據點與該聚類中心之間的馬氏距離,如圖3所示描述了功率曲線各樣本點與聚類中心的馬氏距離,并用色圖矩陣顯示距離的大小,數值越大色圖矩陣為紅色,反之,數值越小色圖矩陣則為藍色。
根據圖3剔除異常樣本點,修正前后的P-v散點圖對比如圖4所示。其中,處理前如圖4a所示,剔除異常點后的標準曲線如圖4b所示。

圖4 修正后的功率曲線
為了對大型風電場各個風電機組進行狀態監測和狀態評估,對風場中不同廠家不同型號的風電機組構建其參考風功率曲線,并計算其參考曲線相應的峰度和偏度值。
為檢測狀態監測模型的性能,在實驗室中搭建了風電機組狀態監測試驗平臺,實驗環境由5臺浪潮臺式機組成,各個節點硬件配置:CPU型號Intel Core i5-3450,內存 8GB,網絡帶寬100 Mb/s。其中一個節點作為控制節點,其他四個節點作為工作節點。Hadoop使用的是2.7.3版本,Spark使用的是2.1.0版本,Scala使用的是2.11.8版本,Storm使用的是0.8.2版本,Zeromq使用的是2.1.7版本,Zookeeper使用的是3.4.5版本。
本次實驗所用的數據為某風力發電場風機服務器中33臺風力發電機的實時運行數據。為驗證監測模型的有效性,在收集到的數據中選取了一定數量的故障風機的數據。實驗結果如圖5所示。

圖5 風電機組運行狀態
當風機出現異常狀況時,實時功率曲線會偏離參考功率曲線,反映在峰度偏度上即為峰度偏度點偏離參考點,根據其偏離程度將風機狀態分為正常、異常和故障。圖5中,參考點附近的五角星參考點為正常狀態,三角形參考點為異常狀態、六角星為故障狀態。通過本文的監測方法,可以清晰直觀地對風機狀態進行監測。
數據吞吐量反映了單位時間內成功處理數據的數量。通過不斷增加數據量,對比數據集在Storm集群模式和單機模式下的運行時間,以此來驗證Storm集群的吞吐能力。為提高實驗結果的準確性,各個數據取10次實驗的平均值,測試結果如圖6所示。

圖6 單機運行與Storm集群運行時間對比
由圖6可以看出,當數據量較小時,單機運行時間較短。這是由于Storm集群模式采用分布式計算,數據在各個節點之間傳輸需要一定的時間。隨著數據量的增加,Storm集群處理數據所需的時間明顯縮短,集群的優勢逐漸顯現。由于Storm集群有著其拓展性,可以滿足大量實時流數據的處理需求。
隨機選取某風力發電場GE1.6MW風機2015年1月1日00∶00∶00到2017年6月30日23∶50∶00中的3組數據(分別為1×106、2×106、3×106條記錄數)。改變spark集群中節點內存大小,測試在不同數據量,工作節點分配不同內存的情況下集群處理數據所用的時間,進行5次實驗,記錄時間取平均值,結果統計如表1。
從表1可以看出。當數據量較小時,內存大小對數據處理時間影響較小。隨著數據量的增大,分配有較大內存的集群在處理時間上有著較為明顯的減少。因此當數據量較大時,可以通過適當增大spark工作節點的內存來提高數據處理效率。

表1 測試時間對比
針對海量風電機組狀態監測數據實時處理的需求,引入Spark和Storm,設計了風電機組狀態監測模型。基于Spark框架實現了K-means++聚類算法,提高數據處理效率。設計了Storm拓撲結構,保證了狀態監測的實時性。實驗結果表明,本文提出的模型有著較好的吞吐量和加速比,并且在數據處理的實時性方面有著很大的提升,彌補了單機性能不足的缺陷。