標籤:
用一種分散式處理方法 挖掘分布式系統偵測到的事件聯絡
點擊下載示範文檔
abstract:現在,對監控、分析和控制大規模分布式系統的需求越來越高漲。監控下的事件往往呈現出相關聯的關係,這對資源分派、工作調度還有故障預測有很大協助。為了發現在偵測到的事件中的聯絡,很多已有的方法是把被檢測事件放到資料庫中並對其進行資料採礦。但是我們認為這些方法並不適合大規模分布式系統,因為監控事件的資料量增長得非常快以至於很難用一台電腦的力量來進行事件之間聯絡的發現。在本文中,我們提出了一種分布式的方法有效地檢測事件、過濾無關事件,然後發現他們之間的聯絡。我們提議用基於MapReduce的演算法即MapReduce-Apriori,資料採礦事件關聯規則,這利用了系統中多個專用節點的計算資源。實驗結果表明我們分布式的事件關聯挖掘演算法相比於集中式的挖掘方法得到了近乎理想的速度提升。
1.introduction
大規模分布式系統:機群系統(clusterSystem)、雲端運算系統(cloud computing System)
建立一個有效可靠的分布式環境的關鍵是監測並控制節點、服務和應用。監測這樣一個大型系統需要以一個固定頻率不斷收集效能屬性值(比如cpu佔用,記憶體佔用)。隨著系統的規模擴大,監測產生的間接費用會成為限制性因素。
在監測期間偵測到的事件可以協助管理員快速定位和解決瓶頸、失敗和其他問題。比如,Fisichella等人的論文(在社交網路中檢測衛生健康時間來預測傳染病)中提出一個三階段的過程來檢測無監督下的公用衛生事件。在特定時間下,我們可以認為一個屬性值被觀測到超過一個給定的閾值時,故障的時間可以認為是特例。但是,當系統的複雜度持續增長,失敗會變為常態而不是例外【44】。傳統的方法比如檢查點經常被證明為計數器有效【16】。所以故障管理方面的研究已經轉移到故障預測和相關主動管理技術上了。【25,30】
大家一致都認為事件不是獨立的而是相互關聯的。過去關於故障分析的研究顯示了很重要的故障分布模式。尤其,事件在長時間跨度上有很強的聯絡。前面的研究成果已經顯示了事件聯絡對資源分派、工作調度和故障預測的重要性。【43,16,17】
事件聯絡模式描述了不同時間之間的共現現象,這可以通過資料採礦方法被發現。但是,經典的資料採礦演算法,比如Apriori在挖掘頻繁模式時具有指數搜尋空間。因為資料採礦既是計算密集型又是資料密集型,當資料級增大,提高資料採礦的效能是一個很嚴峻的挑戰。除此之外,基於Apriori的方法不能發現在被檢測事件間的短暫聯絡。之前一些工作【5,,36】致力於在感應器網路中挖掘事件間的短暫聯絡。但是,在這些方法中,所有的資料都被儲存在集中的資料庫中。當系統的規模擴大時,彙總事件到一個集中資料庫會不夠有效。
集中資料採礦方法在一些情況下不夠實用。第一,在一些監測會持續很多年的領域,被監測到的事件量會太大以至於不能被整合。第二,在一些關鍵領域,事件聯絡挖掘很難在一個可接受的時間裡僅使用一台電腦的能力完成。相比之下,分布式的資料採礦尤其適用於那些處理大量資料的應用(比如交易資料、科學類比、電信資料等),而這種大量資料不能被一個傳統的模式在一個可接受時間內分析出來。我們還認為事件不會貫穿整個監測過程,因此事件聯絡的短暫性必須被處理。
在本文中,我們聚焦於發現短暫的事件聯絡,為了加速挖掘事件聯絡的過程,我們建議事件應該被聚集到一系列資料庫中而不是一個集中的資料集,這樣事件關聯挖掘可以並行完成。除此之外,為了減少聚集開銷,事件應該被在本地過濾(在每個節點中)。最後,一個以MapReduce為基礎的的事件關聯挖掘是實施在一系列資料庫上的,以此來並行發現事件關聯。事件關聯被視作事件關聯規則,事件關聯規則彰顯了基於相同活動間隔之間的暫時性關聯。事件關聯規則促進預測系統故障的發生並且提高了系統的服務品質(QoS,quality ofservice)。比如,我們期待去收到一個來自某節點某個時間點的事件,但是實際上這並沒有發生。這時,我們可以推斷那個節點上可能產生了故障。
本文的主要工作總結如下:
1.我們提升了事件關聯挖掘方法通過把被偵測到的事件的暫時性考慮在內。
2.我們提出一種方法來有效地在本地過濾無關事件來減少需要聚集事件的數量。
3.我們提出一種基於MapReduce的演算法來並行挖掘來自一系列貢獻節點的事件的關聯規則。
本文的剩下部分被組織如下:
section2描述了模型和概念。
section3給了一個例子來論述我們的方法。
section4介紹了具體演算法。
section5給出了實驗。
section6複習了相關的工作。
section7總結了論文並討論了將來的發展
2.Models and concepts
在這個部分,我們首先介紹了監測和時間檢測架構,然後給出了挖掘監測聯絡規則的模型。
2.1Monitoring framework
分布式系統的結構可以被看做一個異構監測樹,節點被分為超節點(SN,super node)、管理節點(AN,admin node)、工作節點(WN,working node),超節點是整個監測樹的根節點,監測樹對整個系統進行控制。管理節點是中間節點,分別管理一系列工作節點。每一個工作節點是一個分葉節點。檢測事件的任務是分布式的,任務涉及在每一個工作節點的監測單元。一個單元(agent)是一個應用層級的監測程式,這個程式相比於系統中的其他應用獨立運行並且通過message-passing【4】與外界進行通訊。對於每一個工作節點,他有一個本機存放區用來在檢測過程中儲存被偵測到的事件。所有的節點分享一個GlobalDistributeFileSystem(GDFS),GDFS被建立在節點的本機存放區之上。每一個節點可以從GDFS上下載檔案到自己的本機存放區,也可以上傳檔案到GDFS。
一個監測請求包括長期啟動並執行活動,用來觀察、分析和控制大規模分布式系統和他們服務的應用。每一個監測單元周期性地收集確切屬性的值並把它們與已給的閾值進行比較。通常,我們定義一個監測請求如下:
Definition2.1:
、、、
監測請求由超節點發起,然後通過管理節點被傳播到所有工作節點。最後,它啟用了監測來啟動監測。監測的目標是檢查一系列系統效能屬性(CPU佔有率、記憶體佔有率、網路頻寬和在應用程式層面的任何自訂屬性)是否超過相應的閾值。如果一個閾值在某一個時間點某一個地點被超過,那麼一個事件被監測到。我們只對一個事件是否被檢測到感興趣,而對相應的屬性值不感興趣。我們給出事件定義如下:
、、、
2.2 Eventcorrelation mining framework
基於在一個傳統資料庫的關聯規則定義,我們在我們的領域定義item、事務、交易資料庫。
每一個item有自己的生命週期,生命週期明確表示了他的期間,我們也定義了item的生命時間。
3. Motivational examples
在這個部分中,我們用一個做證明的例子來說明在我們的方案中我們怎麼能夠挖掘頻繁模式
、、、、
挖掘結果:((n1, e1) ? (n2, e3), 10 min, 100%).
意思是:如果事件e1在節點n1上被檢測到,十分鐘內在n2上檢測到e3的可能性為100%。
給定一個事務的資料庫和最小信賴度、最小支援度,資料採礦的問題就是產生所有關聯規則(信賴度、支援度都大於或等於給定最小值),這可以被分為兩部分:
1.找到頻繁模式(頻繁項集);
2.總結關聯規則;
第一階段基於一種迭代的方法來發現頻繁項集,這個階段佔據資料採礦開銷的統治地位。所以,成功挖掘的關鍵就在於怎樣有效地減少第一部分的開銷。
在下一段我們提出一種分布式的方法來有效地減少開銷並加速挖掘進程。
4. The algorithms
在本節中,我們首先介紹本地事件檢測演算法,然後我們提出MapReduce-Apriori演算法,這是一個基於MapReduce的關聯規則挖掘演算法,在被偵測到的事件上有效地過濾掉某些事件(在他們被傳送之前),然後並行檢測他們的關聯。
4.1本地事件檢測
在每個時間點,每一個工作節點上的監測單元檢查各個屬性是否超過閾值,如果是的,就儲存r=(t,(n,e)),即說明事件e被節點n在時間點t檢測到。可見Algorithm1.
4.2MapReduce-Apriori
MapReduce是一個編程模型,是處理大規模資料集的相關實現。使用者指定一個映射方法來處理一個鍵值對從而產生一組鍵值對,把一組中間值(有相同的中間key)結合在一起。當組件故障成為一種常態而不是特例,MapReduce提供了一種編程的方便和容錯。
MapReduce包括四個階段:本地事件過濾、合并事件成事務,全域頻繁項集挖掘,全域關聯規則總結。
以下是4個階段的描述:
1.本地事件過濾:過濾那些支援度計數小於最小支援度的元組(即1-項集,(n,e))或者包括了這些元組的元組。
2.合并事件為事務:一個MapReduce方法來合并那些在同一時間發生的所有事件到一個事務。
3.全域頻繁項集挖掘:一個多遍迭代的Mapreduce方法來發現頻繁項集。
4.全域關聯規則總結:一個Mapreduce方法來總結事件關聯規則。
MapReduce-Apriori從幾個輸入參數啟動,包括最小支援度、最小信賴度。
此時,每一個節點儲存了被偵測到的事件在他的私人儲存裡(local storage),GDFS中還沒有任何東西可以被分享。
4.2.1Local fitering
在這個階段,我們目標在於當上傳記錄到GDFS上時減少交流開銷。這背後的想法是過濾掉所有支援度計數小於最小支援度的元組。因為如果一個元組在本地不是頻繁的,那麼它在全域範圍內也必定不是頻繁的。一旦監測階段結束,一個在每個工作節點上的掃描便啟動,掃描本機存放區的每一條記錄來計算每一個元組的生命週期(lifetime)和支援度計數。如果一個時間的支援度計數不小於最小支援度,所有的記錄都被儲存下來,一旦過濾階段結束,所有留下來的記錄全部被上傳到GDFS。記錄是被儲存在不同節點。
下面Algorithm2描述了細節:
比如,我們考慮在table2中的事件,給定最小支援度為3,所有支援度大於等於3的時間都將被儲存。所以,在本地事件過濾階段結束之後,只有4條記錄被留下,大大減少了需要被傳遞的記錄量。沒有記錄留下的節點不用傳輸資料。
4.2.2. Merging records into transaction
在GDFS中的事件需要在發現他們的關聯之前通過時間點分組。這個過程可以並存執行。這裡一個Mapreduce的過程是為了合并記錄到事務。每一個mapper以鍵值對的形式輸入記錄(key=recordID,value=record),record=(t,(n,e)),然後mapper把記錄分解為鍵值對(key=t(t為某個時間點),value=(n,e))所有的mapper都結束之後,對每一個唯一的key t,MapReduce收集他相關的items,然後把鍵值對(key=t,value=items)傳給reducer,這裡items是同一個時間點的所有item。reducer收到了同一個時間點的所有鍵值對,集合所有相同時間點的item到一個事務T,並賦予一個唯一的TID,輸出鍵值對(key=TID,value=T)。
4.2.3. Globalfrequent itemset mining
因為事務是在GDFS上分布的,所以Mapreduce模型剛好適用於我們的方案來並行全域頻繁項集挖掘,這裡介紹幾條迭代的mapReduce過程。在k次MapReduce過程後,頻繁項集被總結完成,這會一直迴圈直到頻繁項集不再增長。
頻繁項集挖掘包括兩步:
1.從頻繁(k-1)項集Fk-1總結候補k-項集Ck;
2.總結頻繁k-項集Fk(消除Ck中的支援度計數肖玉最小支援度的項集);
第一步成為候選集,需要兩小步:第一,在串連過程
對於兩個k-項集{I1, I2, …, Ik-1, Ik},{I1′, I2′, …, Ik-1′, Ik′},能夠串連產生一個k+1-項集,若且唯若Ii=Ii′,其中i? {1, 2, …, k-1}且Ik1 Ik′,串連結果為( k+1項集):{I1, I2, …, Ik-1, Ik, Ik′}
如{A, C, D}與{A, C, E}串連產生{A, C, D,E};而{A, C, D}與{A, B, D}不能串連。
第二,在修剪步驟,刪除掉所有存在k-1項集不屬於頻繁項集的k-項集。
引理4.1:
一個頻繁k-項集與一個頻繁j-項集的lifetime=(ik並jk)=[t1,t2],如果(t2-t1)/檢測時間間隔<最小支援度,那麼ik並ij並不是一個頻繁項集。
證明:略
Algorithm是擴大候選集的演算法
在第二步的總結頻繁k-項集中,多次Mapreduce過程,每一個從候選k-項集中總結頻繁k-項集(通過支援度計數)每一個mapper下載所有候選k-項集,然後它收到一個鍵值對(key=TID,value=T),然後對每一個候選k-項集中的項,map方法決定T是否包含這個項集,如果包含,輸出一個鍵值對(key=該項,value=1)。reducer總結所有相同key(即候選項)的鍵值對,重新該候選項的計算生命週期,並判斷總支援度計數是否不小於最小支援度。如果是,他輸出一個鍵值對(key=該候選項,value=sup(i,lifetime(i)),Algorithm5給出具體演算法:
4.2.4. Globalassociation rule generation
為了總結關聯規則,需要找到頻繁項集的所有子集。比如一個頻繁項集D,我們必須找到對於每個合適的子集D1,有(D1 ? (D?D1), [t1, t2], conf ),如果conf不小於最小信賴度,則這是一個關聯規則。Ale和Rossi[3]提出了一個問題,考慮一個頻繁項集i,要找出他的所有子集需要一個指數的計算過程。
為了避免這個,Ale和Rossi假設項集在他的生命週期裡均勻分布,所以任何子集出現的機率是相同的,我們認為這在我們的情況中是無效的,因為時間在他的生命週期裡不是均勻分布的。
為瞭解決這個問題,我們為項集提出了一種增強生命時間的格式,它記錄了項發生的所有時間點而不是最小時間點跟最大時間點。在這種格式的基礎上,我們可以直接計算sup(D1,lifetime(D))而不用掃描資料庫。
為了使這個階段並行化成一個mapReduce過程,每一個Mapper讀入一個頻繁項集F和他的支援度計數sup(F , l(F )),輸出鍵值對(key=F,value=F1),F1是F的非空子集,每一個reducer計算(F1 ? (F ?
F1), l(F ))的信賴度,Algorithm6中給出具體演算法,關聯規則按照信賴度排序,可以直接找出信賴度最前的k個規則。
總結,我們提出的演算法的好處如下:
1.不需要把所有資料集中到同一個資料庫。而是把時間收集到不同的節點。
2.挖掘時間極度減少,尤其在某些關鍵領域。
3.時間在本地被過濾,所以需要上傳的時間量大大減少。
4.MapReduce是最適合處理今天這種分布式系統產生的大量資料的。
5.我們設計了擴大候選集演算法來有效地減少產生的候選項。
5. Experimental results
我們在Apache hadoop上實現了提出的演算法,Apache Hadoop是一個GoogleMapreduce 架構的開源實現。Apache-Hadoop是一個java架構,支援資料集中分布式應用,Hadoop讓應用可以處理上千個節點和pb級的資料。除此之外,hadoop Distributed File System(HDFS)對GDFS來說是一個適合的實現。
我們首先建立一個分布式系統,然後類比監測環境來產生合成時間。然後我們應用MapReduce-Ariori演算法在合成事件上來發現事件聯絡。為了展示Mapreduce的有效性,我們還實現了經典的Apriori演算法然後把它應用在一個集中地資料庫上。我們比較了兩種方法挖掘關聯規則的執行時間。
5.1. Synthetic eventgeneration
模擬器通過輸入的幾個參數產生事件,可以在table6中看到:
收到這些參數,模擬器會在每個節點上產生屬性集合A的值,然後判斷值是否超過他的相關閾值。每一個資料集都是獨立的,屬性值符合標準分布(0,,1),合成事件程式運行在PC上。
我們的類比包括以下幾種方案:
? Given N = 50, A =10, ξmin = 0.7, ξmax = 1.0, with the
increaseof T , collect detected events that are distributed in different nodes within T .
? Given T = 10 000,A = 10, ξmin = 0.7, ξmax = 1.0, with
the increase of N,collect detected events that are distributed
in different nodeswithin T .
? Given T = 10 000,N = 50, ξmin = 0.7, ξmax = 1.0, with
the increase of A,collect detected events that are distributed
in different nodeswithin T .
一旦事件產生結束,模擬器立刻開始本地過濾時間。通過table8可以看出,我們很有效過濾了很多不頻繁的事件。
5.2. Relativeperformance
在這個部分,我們實現了兩種演算法來挖掘關聯。Apriori運行在一台PC上,MapReduce-Apriori運行在兩個節點的Hadoop機群(兩台電腦)。我們計算了兩種演算法的執行時間包括頻繁項集挖掘事件和關聯規則產生時間。
2、4、6、7中可以看到兩種演算法的效能表現不一樣,破折號線代表Apriori的表現、、、在我們的實驗中,Mapreduce的理想表現已經減少了Apriori時間的一般,獲得了兩倍的速度提升。
5.2.1. Varying monitoring time slots(T不同)
6 datasets:N50A10T5k,N50A10T10k,N50A10T20k, N50A10T40k, N50A10T70k, andN50A10T100k
Fig.2可以看出兩種演算法在T改變時執行時間的變化,T的增大會導致事務的增多。因為TID與一個特定時間點相關聯,所以我們後面直接用TID代替代替監測時間點。當事務數相對較小時,兩種方法的區別不是很明顯。隨著事務增加,MApReduce-Apriori開始展示了他的優越性。並且,
MapReduve-Apriori的表現非常接近理想MapReduce-Apriori。
接下來,我們研究了頻繁項集挖掘,發現對於每個資料集,只有1-項集和2-項集被挖掘了。因為最小信賴度為0.07,並沒有3個事件的關聯可以有如此高的支援度。
Fig.3描述了被挖掘出的頻繁項集數量,黑色是1-項集,紅色是2-項集。從圖表中我們可以看到在T=20時沒有挖掘到2-項集,而6000個2-項集在T=100時被挖掘出來。這可能解釋了為什麼Fig.2中N50A10T20k的執行時間增長如此快。
5.2.2. Varying the number of nodes in a synthetic system
4 datasets,N50A10T10k,N100A10T10k,N150A10T10k, and N200A10T10k
分布式系統節點數N變化時兩種演算法的變化,節點的增長會導致不同元組(item)數量的增長。N50A10T10k已經測試過了,Fig.4展示了當節點增長時,兩種演算法的不同表現。我們可以看出,MapReduce遠遠優於apriori,並且接近理想。頻繁項集挖掘的數量在Fig.5中可以看出,N100A10T10k的2-項集大於1-項集,但是N150A10T10k的2-項集很小。不幸的是N200A10T10k中沒有挖掘到2-項集,
5.2.3. Varyingattributes in the system
4 datasets,N50A10T10k,N50A15T10k,N50A20T10k and N50A25T10k,
當屬性值增長時,會導致不同元組(item)數量的增長。Fig.6比較了兩種演算法的執行時間,兩種演算法的執行時間都隨著屬性種類增長而增長了。Mapreduce-Apriori優於Apriori,減少了一半的執行時間。
5.2.4. Varying min_sup_rate in a specific dataset
我們把最小支援度從0.06開始,每次提高0.01,計算時間數量還有本地過濾演算法過濾的元組(item)。接下來,我們應用兩種演算法在過濾後的時間上,並記錄執行時間。
table9描述了過濾結果,當最小支援度上升,過濾效果提升。
Fig.7比較了兩種演算法在不同最小支援度的執行時間。最小支援度上升,執行時間下降,除此之外,mapReduce-Apriori完全由於Apriori,而且逐漸逼近理想情況。
6. Related work
7.Conclutionsand future work
在這篇文章中,我們提出了一個在分布式系統挖掘事件關聯規則的擴充模型,考慮了檢測事件的短暫性。另外,我們提出了一種基於Mapreduce的演算法來有效地過濾不相關事件並且發現他們的短暫聯絡。我們的實驗結果體現了我們的演算法優於基於Apriori的集中挖掘方法,而且速度大大提升。
我們的工作會在兩個方向被擴充,第一,為了提高挖掘方法的生產能力,我們應該考慮擴充我們的架構來使頻繁項集挖掘階段和關聯規則挖掘部分可以使用流水線。第二,我們計劃部署我們的架構到一個實際的分布式環境下來進一步驗證提出的演算法的有效性。
軟體優才夏令營A decentralized approach for mining event correlations in distributed system monitoring譯文(原創)