一種流圖優(yōu)化方法及其裝置制造方法
【專利摘要】本發(fā)明實施例提供了一種流圖優(yōu)化方法和裝置,涉及流處理領(lǐng)域。通過接受用戶提供的流應(yīng)用流圖,解析該流圖,構(gòu)造算子節(jié)點與數(shù)據(jù)流邊描述的流圖,按最大原子劃分規(guī)則對流圖進行拆解,以得到至少一個子流圖,根據(jù)合并算法對所述至少一個子流圖,進行鄰接算子合并,以得到優(yōu)化流圖。通過對用戶提供的流圖進行拆解和合并,實現(xiàn)流圖計算邏輯的均衡以及減少冗余流量傳輸,提高了流系統(tǒng)資源的利用率與流應(yīng)用的執(zhí)行性能。
【專利說明】一種流圖優(yōu)化方法及其裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明實施例涉及流處理領(lǐng)域,更具體地,涉及一種流圖優(yōu)化方法及其裝置。
【背景技術(shù)】
[0002]流計算(Stream Computing),即實時流處理,是指將待處理數(shù)據(jù)看成數(shù)據(jù)流的形式來處理。數(shù)據(jù)流是在時間分布和數(shù)量上無限的一系列數(shù)據(jù)記錄的集合體;數(shù)據(jù)元組是數(shù)據(jù)流的最小組成單元。流計算最重要的特性是能夠?qū)崿F(xiàn)計算結(jié)果的實時響應(yīng)。數(shù)據(jù)的價值隨著時間的流逝而降低,數(shù)據(jù)出現(xiàn)后必須盡快地對其進行處理,最好數(shù)據(jù)出現(xiàn)時便立刻對其進行處理,產(chǎn)生一個數(shù)據(jù)進行一次處理,而不是緩存起來成一批處理,這就是流計算的意義所在。
[0003]流計算模型圖,簡稱流圖(Streaming Graph),可用圖1來表示。如圖1所示,圖中算子opl-op7表示算子(operator),圖中邊sl-s7表示數(shù)據(jù)流(stream)。其中,算子是承載業(yè)務(wù)邏輯的數(shù)據(jù)處理單元,為流計算平臺分布式調(diào)度執(zhí)行的最小單元,而數(shù)據(jù)流則是算子間交互的數(shù)據(jù)。
[0004]用戶編寫流圖,將編寫好的流圖提交到流計算平臺上,流計算平臺解析流圖,然后調(diào)度到不同的物理機器上分布式執(zhí)行,實現(xiàn)不同的業(yè)務(wù)場景。當前業(yè)界主流的流計算平臺為IBM InfoSphere Streams,用戶在InfoSphere Streams的集成開發(fā)環(huán)境下,通過拖拽編輯,將算子和數(shù)據(jù)流邊連線組成流圖,然后提交部署。流圖編寫的好壞直接影響應(yīng)用部署后的執(zhí)行性能。而基于流計算平臺開發(fā)應(yīng)用的用戶大多為市場人員,或是缺乏流式應(yīng)用開發(fā)經(jīng)驗的工程人員,導致開發(fā)出來的流圖存在計算邏輯不均衡和冗余流量傳輸,導致系統(tǒng)資源不能充分利用,流應(yīng)用執(zhí)行性能差。
【發(fā)明內(nèi)容】
[0005]本發(fā)明實施例提供一種流圖優(yōu)化方法及裝置,通過對流圖進行優(yōu)化再部署,提高了流處理平臺資源的利用率與流應(yīng)用的執(zhí)行性能。
[0006]本發(fā)明實施例第一方面,提供了一種用于流計算系統(tǒng)的流圖優(yōu)化方法,所述流計算系統(tǒng)包括多個工作節(jié)點和主控節(jié)點,所述方法由主控節(jié)點執(zhí)行,所述方法包括:
[0007]接收用戶流圖;
[0008]解析所述用戶流圖,構(gòu)造算子節(jié)點與數(shù)據(jù)流邊描述的流圖;
[0009]按照流圖類型的最大原子劃分規(guī)則對流圖進行拆解,以得到至少一個子流圖,其中所述至少一個子流圖中的任一子流圖包含盡可能多的算子,且所述任一子流圖只屬于所述流圖類型中的一種。
[0010]根據(jù)所述至少一個子流圖中各個子流圖的處理邏輯復雜度,對所述至少一個子流圖進行鄰接算子合并,以得到優(yōu)化流圖,使得經(jīng)鄰接算子合并后各個子流圖的處理邏輯復雜度達到均衡。
[0011]結(jié)合第一方面所述的流圖優(yōu)化方法,在第一方面第一種可能的實現(xiàn)方式中,所述流圖類型包括:脈沖式流圖、分聯(lián)式流圖和迭代式流圖;
[0012]所述脈沖式流圖,包括數(shù)據(jù)流按流圖算子排列順序依次流過;其中,脈沖式流圖包含脈沖式算子,所述脈沖式算子包含窗口緩存,且數(shù)據(jù)輸出具有批處理特征;
[0013]所述分聯(lián)式流圖,包括數(shù)據(jù)流在入口算子處分流,在出口算子處匯聚;其中,分聯(lián)式流圖包含分聯(lián)式算子,所述分聯(lián)式算子為所述分聯(lián)式流圖的入口算子或出口算子;
[0014]所述迭代式流圖,包括后繼算子的輸出數(shù)據(jù)流返回至前面算子作為輸入流,進行迭代處理;其中,迭代式流圖包含迭代式算子,所述迭代式算子為所述迭代式流圖的入口算子或出口算子。
[0015]結(jié)合第一方面或第一方面第一種可能的實現(xiàn)方式,在第一方面第二種可能實現(xiàn)方式中,所述按照流圖類型的最大原子劃分規(guī)則對流圖進行拆解,以得到至少一個子流圖,包括:
[0016]遍歷流圖中算子,找出多種類型算子;其中,多種類型的算子包括迭代式算子、分聯(lián)式算子和脈沖式算子;
[0017]從所述多種類型算子中按優(yōu)先級從高到低的順序選取用作邊界算子的算子;其中,優(yōu)先級從高到低的順序依次為迭代算子、分聯(lián)算子、脈沖算子;
[0018]根據(jù)所述選取的邊界算子采用所述流圖類型的最大原子劃分規(guī)則對所述流圖中算子進行劃分,以得到至少一個子流圖;其中,所述最大原子劃分規(guī)則,包括:分裂出的子流圖包含盡可能多的算子,且任一子流圖只屬于迭代式流圖、分聯(lián)式流圖和脈沖式流圖中的一種。
[0019]結(jié)合第一方面或第一方面第一種可能實現(xiàn)方式或第一方面第二種可能實現(xiàn)方式,在第一方面第三種可能實現(xiàn)方式中,所述根據(jù)所述至少一個子流圖中各個子流圖的處理邏輯復雜度,對所述至少一個子流圖進行鄰接算子合并,以得到優(yōu)化流圖,使得經(jīng)鄰接算子合并后所述各個子流圖的處理邏輯復雜度達到均衡,具體包括:
[0020]根據(jù)集群系統(tǒng)資源和算子邏輯復雜度確定合并范圍;
[0021]根據(jù)合并算法在所述確定的合并范圍內(nèi)對所述至少一個子流圖進行鄰接算子合并,以得到優(yōu)化流圖,使得經(jīng)鄰接算子合并后各個子流圖的處理邏輯復雜度達到均衡。
[0022]結(jié)合第一方面第三種可能實現(xiàn)方式,在第一方面第四種可能實現(xiàn)方式中,所述根據(jù)合并算法在所述確定的合并范圍內(nèi)對所述至少一個子流圖進行鄰接算子合并,以得到優(yōu)化流圖,具體包括:
[0023]若待合并的鄰接算子為系統(tǒng)算子,根據(jù)合并優(yōu)先級列表對所述至少一個子流圖進行鄰接算子合并,以得到優(yōu)化流圖;
[0024]若待合并的鄰接算子為用戶自定義算子,計算所述用戶自定義算子的合并前算子相對復雜度及合并后算子相對復雜度,對所述至少一個子流圖進行鄰接算子合并,以得到優(yōu)化流圖,使得合并后算子相對復雜度小于或等于合并前算子相對復雜度的N倍,其中N大于或等于I。
[0025]結(jié)合結(jié)合第一方面或第一方面第一種可能實現(xiàn)方式或第一方面第二種可能實現(xiàn)方式或第一方面第三種可能實現(xiàn)方式或第一方面第四種可能實現(xiàn)方式,在第一方面第五種可能實現(xiàn)方式中,所述方法還包括:
[0026]將優(yōu)化后的流圖部署到工作節(jié)點中執(zhí)行。
[0027]本發(fā)明實施例第二方面提供了一種用于流計算系統(tǒng)的流圖優(yōu)化裝置,所述流計算系統(tǒng)包括多個工作節(jié)點和主控節(jié)點,所述主控節(jié)點包括:
[0028]接收模塊,用于接收流圖;
[0029]解析模塊,用于解析所述流圖,構(gòu)造流圖算子與數(shù)據(jù)流邊描述結(jié)構(gòu);
[0030]拆解模塊,用于按照流圖類型的最大原子劃分規(guī)則對流圖進行拆解,以得到至少一個子流圖;
[0031]合并模塊,用于根據(jù)所述至少一個子流圖中各個子流圖的處理邏輯復雜度,對所述至少
[0032]一個子流圖進行鄰接算子合并,以得到優(yōu)化流圖,使得經(jīng)鄰接算子合并后所述各個子流
[0033]圖的處理邏輯復雜度達到均衡。
[0034]結(jié)合第二方面,在第二方面第一種實現(xiàn)方式中,所述流圖類型包括:脈沖式流圖、分聯(lián)式流圖和迭代式流圖;
[0035]所述脈沖式流圖,包括數(shù)據(jù)流按流圖算子排列順序依次流過;其中,脈沖式流圖包含脈沖式算子,所述脈沖式算子包含窗口緩存,且數(shù)據(jù)輸出具有批處理特征;
[0036]所述分聯(lián)式流圖,包括數(shù)據(jù)流在入口算子處分流,在出口算子處匯聚;其中,分聯(lián)式流圖包含分聯(lián)式算子,所述分聯(lián)式算子為所述分聯(lián)式流圖的入口算子或出口算子;
[0037]所述迭代式流圖,包括后繼算子的輸出數(shù)據(jù)流返回至前面算子作為輸入流,進行迭代處理;其中,迭代式流圖包含迭代式算子,所述迭代式算子為所述迭代式流圖的入口算子或出口算子。
[0038]結(jié)合第二方面或第二方面第一種實現(xiàn)方式中,在第二方面第二種實現(xiàn)方式中,所述拆解模塊包括:查詢單元、選擇單元和拆解單元;
[0039]所述查詢單元,用于遍歷流圖中算子,找出多種類型算子;其中,多種類型的算子包括迭代式算子、分聯(lián)式算子和脈沖式算子;
[0040]所述選擇單元,用于從所述多種類型算子中按優(yōu)先級從高到低的順序選取用作邊界算子的算子;其中,優(yōu)先級從高到低的順序依次為迭代算子、分聯(lián)算子、脈沖算子;
[0041]所述拆解單元,用于根據(jù)所述選取的邊界算子采用所述流圖類型的最大原子劃分規(guī)則對所述流圖中算子進行劃分,以得到至少一個子流圖;其中,所述最大原子劃分規(guī)則,包括:分裂出的子流圖包含盡可能多的算子,且任一子流圖只屬于迭代式流圖、分聯(lián)式流圖和脈沖式流圖中的一種。
[0042]結(jié)合第二方面或第二方面第一種可能實現(xiàn)方式或第二方面第二種可能實現(xiàn)方式,在第二方面第三種可能實現(xiàn)方式中,所述合并模塊,具體用于根據(jù)集群系統(tǒng)資源和算子邏輯復雜度確定合并范圍根據(jù)合并算法在所述確定的合并范圍內(nèi)對所述至少一個子流圖進行鄰接算子合并,以得到優(yōu)化流圖,使得經(jīng)鄰接算子合并后各個子流圖的處理邏輯復雜度達到均衡。。
[0043]結(jié)合第二方面第三種可能實現(xiàn)方式,在第二方面第四種可能實現(xiàn)方式中,在所述根據(jù)合并算法在所述確定的合并范圍內(nèi)對所述至少一個子流圖進行鄰接算子合并,以得到優(yōu)化流圖,使得經(jīng)鄰接算子合并后各個子流圖的處理邏輯復雜度達到均衡,所述合并模塊具體用于,
[0044]若待合并的鄰接算子為系統(tǒng)算子,根據(jù)合并優(yōu)先級列表對所述至少一個子流圖進行鄰接算子合并,以得到優(yōu)化流圖;
[0045]若待合并的鄰接算子為用戶自定義算子,計算所述用戶自定義算子的合并前算子相對復雜度及合并后算子相對復雜度,對所述至少一個子流圖進行鄰接算子合并,以得到優(yōu)化流圖,使得合并后算子相對復雜度小于或等于合并前算子相對復雜度的N倍,其中N大于或等于I。
[0046]結(jié)合第二方面或第二方面第一種可能實現(xiàn)方式或第二方面第二種可能實現(xiàn)方式或第二方面第三種可能實現(xiàn)方式或第二方面第四種可能實現(xiàn)方式,在或第二方面第五種可能實現(xiàn)方式中,所述裝置還包括部署模塊,所述部署模塊用于將優(yōu)化后的流圖下發(fā)部署到工作節(jié)點中執(zhí)行。
[0047]根據(jù)本發(fā)明實施例提供的流圖優(yōu)化方法和裝置,通過接受用戶提供的流應(yīng)用流圖,解析該流圖,構(gòu)造流圖算子與數(shù)據(jù)流描述結(jié)構(gòu),按照流圖類型的最大原子劃分規(guī)則對流圖進行拆解,以得到至少一個子流圖,根據(jù)所述至少一個子流圖中各個子流圖的處理邏輯復雜度,對所述至少一個子流圖進行鄰接算子合并,以得到優(yōu)化流圖,使得經(jīng)鄰接算子合并后各個子流圖的處理邏輯復雜度達到均衡。通過對用戶提供的流圖進行拆解和合并,實現(xiàn)流圖計算邏輯的均衡以及減少了冗余流量傳輸,提高了流系統(tǒng)資源的利用率與流應(yīng)用的執(zhí)行性能。
【專利附圖】
【附圖說明】
[0048]為了更清楚地說明本發(fā)明實施例的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0049]圖1是流計算模型不意圖;
[0050]圖2A為本發(fā)明提供的流計算系統(tǒng)架構(gòu)示意圖;
[0051]圖2B是本發(fā)明實施例中一種流處理平臺架構(gòu)示意圖;
[0052]圖3是本發(fā)明實施例中一種流圖優(yōu)化方法流程圖;
[0053]圖4是本發(fā)明實施例中一種流圖類型示意圖;
[0054]圖5是本發(fā)明實施例中一種流圖拆解示意圖;
[0055]圖6是本發(fā)明實施例中另一種流圖優(yōu)化方法流程圖;
[0056]圖7是本發(fā)明實施例中一種流圖優(yōu)化裝置示意圖;
[0057]圖8是本發(fā)明實施例中一種拆解模塊示意圖;
[0058]圖9是本發(fā)明實施例中另一種流圖優(yōu)化裝置示意圖;
[0059]圖10為本發(fā)明實施例中流圖優(yōu)化裝置的實體結(jié)構(gòu)示意圖。
【具體實施方式】
[0060]下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0061]應(yīng)當理解,下面描述的實施方式是本發(fā)明優(yōu)選的實施方式,此處所描述的優(yōu)選實施例僅用于說明和解釋本發(fā)明,并不用于限定本發(fā)明,并且在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互組合。
[0062]本發(fā)明實施例提供的技術(shù)方案可典型地應(yīng)用于流計算系統(tǒng)中,圖2A描述了流計算系統(tǒng)的基本結(jié)構(gòu),包括一個主控節(jié)點(Master)和多個工作節(jié)點(worker),主控節(jié)點主要負責調(diào)度和管理各個工作節(jié)點,而工作節(jié)點是承載實際的數(shù)據(jù)處理操作的邏輯實體,
[0063]流計算是基于流式數(shù)據(jù)處理模型進行的,在流計算系統(tǒng)中,業(yè)務(wù)處理邏輯通常需要轉(zhuǎn)化為無回路有向圖(Directed Acyclic Graph,DAG),如圖4或5所示,其中算子(Operator)是業(yè)務(wù)邏輯載體,是可被流計算系統(tǒng)調(diào)度執(zhí)行的最小單元;stream代表各Operator間的數(shù)據(jù)傳輸。需要說明的是,流計算系統(tǒng)只是本發(fā)明技術(shù)方案的一個典型應(yīng)用場景,并不對本發(fā)明的應(yīng)用場景構(gòu)成限制,其它涉及流應(yīng)用優(yōu)化的應(yīng)用場景,本發(fā)明實施例的技術(shù)方案均適用。
[0064]圖2B是本發(fā)明實施例一種流處理平臺架構(gòu)示意圖。
[0065]如圖2B所示,一個流處理平臺可包括底層的資源管理模塊、任務(wù)調(diào)度模塊、狀態(tài)/資源監(jiān)控模塊、數(shù)據(jù)傳輸和存儲模塊,以及上層可運行的各種算子處理單元,套件開發(fā)的用戶界面和可選用的算子庫等。當然,流處理平臺的架構(gòu)并不僅限于圖2所示的架構(gòu),還可以在圖2的基礎(chǔ)上添加或刪減部分子系統(tǒng)或模塊。用戶在流系統(tǒng)上開發(fā)應(yīng)用場景時,通過用戶界面完成應(yīng)用定制再將應(yīng)用部署在流處理平臺上實現(xiàn)應(yīng)用的流式處理。
[0066]為了解決由缺乏流式應(yīng)用開發(fā)經(jīng)驗的用戶編寫的流圖存在計算邏輯不均衡和冗余流量傳輸?shù)膯栴},本發(fā)明實施例提出了一種流圖優(yōu)化方法及其裝置。
[0067]圖3是本發(fā)明實施例一種流圖優(yōu)化方法流程圖。S301,用戶編寫流式應(yīng)用,開發(fā)流式應(yīng)用流圖,提交應(yīng)用流圖到流計算平臺。
[0068]S302,流計算平臺解析應(yīng)用流圖,構(gòu)造流圖數(shù)據(jù)描述結(jié)構(gòu)。
[0069]具體的,流計算平臺解析接收到的用戶流圖,構(gòu)造流圖數(shù)據(jù)描述結(jié)構(gòu),描述流圖算子與數(shù)據(jù)流邊的關(guān)系。
[0070]S303,拆解流圖,對流圖進行最大原子劃分以得到子流圖。
[0071]具體的,如圖4所示,流圖類型包括:脈沖式流圖、分聯(lián)式流圖和迭代式流圖。
[0072]脈沖式流圖,如圖4(a),數(shù)據(jù)流按流圖算子排列順序依次流過,是流應(yīng)用最基本的處理類型;脈沖式流圖中包含脈沖式算子,算子Operatorl為脈沖式算子,含有窗口緩存,且數(shù)據(jù)輸出具有批處理特征。
[0073]分聯(lián)式流圖,如圖4(b),數(shù)據(jù)流在入口算子處分流,在出口算子處匯聚,分流方式包括多種方式,如復制、分發(fā)等;分聯(lián)式流圖中包含分聯(lián)式算子,如算子0perator2、0perator3 ;算子0perator2為分聯(lián)式流圖的入口算子,算子0perator2的出流量增加,算子0perator3為分聯(lián)式流圖的出口算子,算子0perator3的出流量減少,算子0perator2、0perator3可作為分聯(lián)式流圖的邊界算子。
[0074]迭代式流圖,如圖4(c),后繼算子的輸出數(shù)據(jù)流返回至前面算子作為輸入流,進行迭代處理;迭代式流圖中包含迭代式算子,如算子0perator4、0perator5 ;算子0perator4為迭代式流圖的入口算子,算子Operatorf為迭代式流圖的出口算子,迭代式計算的中間結(jié)果在子流圖內(nèi)部反復傳遞,數(shù)據(jù)傳輸量大,將大量的數(shù)據(jù)流量集中在子流圖內(nèi)部,算子0perator4、Operator5可作為迭代式流圖的邊界算子。
[0075]拆解流圖,對流圖進行最大原子劃分得到子流圖,具體實現(xiàn)為:
[0076]如圖5所示,遍歷流圖中算子,找出所有多種類型算子,作為備選的分裂邊界集入口 O
[0077]從上述多種類型算子中按優(yōu)先級從高到低的順序選取邊界算子;其中,優(yōu)先級從高到低的順序依次為迭代算子、分聯(lián)算子、脈沖算子;對于多類型算子,如圖5中算子Operatorl,既是脈沖算子,又是分聯(lián)算子,則作為高優(yōu)先級的分聯(lián)算子。
[0078]根據(jù)選取的邊界算子,采用所述流圖類型的最大原子劃分規(guī)則對所述流圖中算子進行劃分,得到至少一個子流圖;其中,最大原子劃分規(guī)則,是指分裂出的子流圖包含盡可能多的算子,但是遵守類型單一的約束,不存在流圖類型的二義性,即分裂出的子流圖只屬于迭代式流圖、分聯(lián)式流圖和脈沖式流圖中的一種。
[0079]S304,子流圖之間進行有限的鄰接算子合并。
[0080]子流圖之間進行有限的鄰接算子合并,具體實現(xiàn)為:根據(jù)各個子流圖的處理邏輯復雜度,對所述至少一個子流圖進行鄰接算子合并,以得到優(yōu)化流圖,使得經(jīng)鄰接算子合并后所述各個子流圖的處理邏輯復雜度達到均衡。
[0081]具體的,根據(jù)集群系統(tǒng)資源和算子邏輯復雜度確定合并范圍;根據(jù)合并算法在所述確定的合并范圍內(nèi)對所述至少一個子流圖進行鄰接算子合并,以得到優(yōu)化流圖,使得經(jīng)鄰接算子合并后各個子流圖的處理邏輯復雜度達到均衡。
[0082]具體的,鄰接算子合并基于流圖拆解結(jié)果進行,需要計算兩個要素:集群可用CPU核數(shù)與算子邏輯復雜度。
[0083]占用率低于M為可用核,結(jié)合用戶配置,確定算子合并范圍;其中,O彡M彡1,可根據(jù)集群系統(tǒng)資源以及算子邏輯復雜度設(shè)置,例如可以為50% ;
[0084]若待合并的鄰接算子為系統(tǒng)算子,根據(jù)合并優(yōu)先級列表對所述至少一個子流圖進行鄰接算子合并;其中,對于系統(tǒng)算子,存在固定的合并優(yōu)先級列表;
[0085]若待合并的鄰接算子,計算所述用戶自定義算子的合并前算子相對復雜度及合并后算子相對復雜度,對所述至少一個子流圖進行鄰接算子合并,以得到優(yōu)化流圖,使得合并后算子相對復雜度小于或等于合并前算子相對復雜度的N倍,其中N大于或等于1,可根據(jù)集群系統(tǒng)資源以及算子邏輯復雜度設(shè)置,例如可以為120%。
[0086]例如,集群中有3個工作算子,可用CPU核數(shù)分別為:3、2、3,所以總可用CPU核數(shù)為8,算子合并上限值為8,即合并后至少要保留8個實際算子;下限值為0,即不進行任何合并,尤其當系統(tǒng)資源足夠充裕時,合并算子完全無必要,用戶可根據(jù)實際情況調(diào)整上下限的合并值,以控制合并范圍。
[0087]算子分為系統(tǒng)算子和用戶自定義算子。系統(tǒng)算子為平臺提供給用戶直接使用的庫算子,算子邏輯復雜度固定,所以存在固定的合并優(yōu)先級列表;用戶自定義算子為用戶繼承平臺提供的開發(fā)接口自己實現(xiàn)的處理操作,這類算子復雜度需要經(jīng)過計算后確定,計算復雜度方法包括但不限于常見的各種代碼復雜度計算方法,如可用算子執(zhí)行時間表征算子復雜度。
[0088]算子合并可以通過多種方式實現(xiàn),包括但不限于:進程通信、線程通信、函數(shù)調(diào)用等,合并后的算子復雜度不能超鄰接算子的復雜度過高,否則會造成計算負載的不均衡,例如合并后算子復雜度不超過合并前算子復雜度的120%。
[0089]算子合并為實現(xiàn)如下目標:
[0090]將算子間的數(shù)據(jù)傳輸轉(zhuǎn)換成更高性能的消息交互,例如:跨網(wǎng)絡(luò)通信變成進程間通信,進程間通信變成線程間消息傳遞,線程消息傳遞變成普通函數(shù)調(diào)用,從而減小數(shù)據(jù)傳輸時延導致的算子懸停與計算資源浪費的問題;
[0091]對于極高復雜度的算子,如Join、Agg、CEP等系統(tǒng)算子,以及復雜度很高的用戶自定義算子,合并難度大,計算復雜,且優(yōu)化效果很難保證,所以除非用戶設(shè)定算子最小優(yōu)化值,否則不優(yōu)先對此類算子進行合并處理。
[0092]S305,將優(yōu)化后流圖部署到工作節(jié)點執(zhí)行。
[0093]圖6是本發(fā)明實施例另一流圖優(yōu)化方法流程圖。
[0094]S601,接收用戶流圖。
[0095]具體的,用戶編寫流圖,流計算平臺接收用戶提交的流圖。
[0096]S602,解析用戶流圖,構(gòu)造算子節(jié)點與數(shù)據(jù)流邊描述的流圖。
[0097]具體的,流計算平臺解析接收到的流圖,構(gòu)造流圖數(shù)據(jù)描述結(jié)構(gòu),描述流圖算子與數(shù)據(jù)流的關(guān)系。
[0098]S603,按照流圖類型的最大原子劃分規(guī)則對流圖進行拆解,以得到至少一個子流圖,其中所述至少一個子流圖中的任一子流圖包含盡可能多的算子,且所述任一子流圖只屬于所述流圖類型中的一種。
[0099]具體的,拆解過程可參照S303中拆解方法。
[0100]S604,根據(jù)所述至少一個子流圖中各個子流圖的處理邏輯復雜度,對所述至少一個子流圖進行鄰接算子合并,以得到優(yōu)化流圖,使得經(jīng)鄰接算子合并后各個子流圖的處理邏輯復雜度達到均衡。
[0101]具體的,算子合并過程可參照S304中的算子合并方法。
[0102]圖7是本發(fā)明實施例一種流圖優(yōu)化裝置示意圖。
[0103]如圖7所示,流圖優(yōu)化裝置100包括:接收模塊101、解析模塊102、拆解模塊103和合并模塊104;其中,
[0104]接收模塊101,用于接收流圖。
[0105]具體的,用戶編寫流圖,接收模塊101接收用戶提交的流圖。
[0106]解析模塊102,用于解析所述流圖,構(gòu)造流圖算子與數(shù)據(jù)流邊描述結(jié)構(gòu)。
[0107]具體的,流計算平臺解析模塊102解析接收到的流圖,構(gòu)造流圖數(shù)據(jù)描述結(jié)構(gòu),描述流圖算子與數(shù)據(jù)流的關(guān)系。
[0108]拆解模塊103,用于按照流圖類型的最大原子劃分規(guī)則對流圖進行拆解,以得到至少一個子流圖。
[0109]具體的,如圖4所示,流圖類型包括:脈沖式流圖、分聯(lián)式流圖和迭代式流圖。
[0110]脈沖式流圖,如圖4(a),數(shù)據(jù)流按流圖算子排列順序依次流過進行相應(yīng)處理,是流應(yīng)用最基本的處理類型;脈沖式流圖中包含脈沖式算子,算子Operatorl為脈沖式算子,含有窗口緩存,且數(shù)據(jù)輸出具有批處理特征。
[0111]分聯(lián)式流圖,如圖4 (b),數(shù)據(jù)流在入口算子處分流,在出口算子處匯聚,分流方式包括多種方式,如復制、分發(fā)等;分聯(lián)式流圖中包含分聯(lián)式算子,算子Operator2為分聯(lián)式流圖的入口算子,算子Operator2的出流量增加,算子Operator3為分聯(lián)式流圖的出口算子,算子Operator3的出流量減少,算子0perator2、0perator3可作為分聯(lián)式流圖的邊界算子。
[0112]迭代式流圖,如圖4(c),后繼算子的輸出數(shù)據(jù)流返回至前面算子作為輸入流,進行迭代處理;迭代式流圖中包含迭代式算子,算子OperatoM為迭代式流圖的入口算子,算子0perator5為迭代式流圖的出口算子,迭代式計算的中間結(jié)果在子流圖內(nèi)部反復傳遞,數(shù)據(jù)傳輸量大,將大量的數(shù)據(jù)流量集中在子流圖內(nèi)部,算子0perator4、0perator5可作為迭代式流圖的邊界算子。
[0113]具體的,如圖8所示,拆解模塊103包括查詢單元1031、選擇單元1032和拆解單元1033。
[0114]查詢單元1031,用于遍歷流圖中算子,找出所有上述多種類型算子,作為備選的分裂邊界集合。
[0115]選擇單元1032,用于從上述多種類型算子中按優(yōu)先級從高到低的順序選取邊界算子;其中,優(yōu)先級從高到低的順序依次為迭代算子、分聯(lián)算子、脈沖算子;對于多類型算子,如圖5中算子opl,既是脈沖算子,又是分聯(lián)算子,則作為高優(yōu)先級的分聯(lián)算子。
[0116]拆解單元1033,用于根據(jù)選取的邊界算子采用所述流圖類型的最大原子劃分規(guī)則對所述流圖中算子進行劃分,以得到至少一個子流圖;其中,最大原子劃分規(guī)則,是指分裂出的子流圖包含盡可能多的算子,但是遵守類型單一的約束,不存在流圖類型的二義性,即分裂出的子流圖只屬于迭代式流圖、分聯(lián)式流圖和脈沖式流圖中的一種。
[0117]合并模塊104,用于根據(jù)所述至少一個子流圖中各個子流圖的處理邏輯復雜度,對所述至少一個子流圖進行鄰接算子合并,以得到優(yōu)化流圖,使得經(jīng)鄰接算子合并后所述各個子流圖的處理邏輯復雜度達到均衡。具體實現(xiàn):
[0118]根據(jù)集群系統(tǒng)資源和算子邏輯復雜度確定合并范圍,根據(jù)合并算法在所述確定的合并范圍內(nèi)對所述至少一個子流圖進行鄰接算子合并,以得到優(yōu)化流圖,使得經(jīng)鄰接算子合并后各個子流圖的處理邏輯復雜度達到均衡。
[0119]根據(jù)合并算法對所述至少一個子流圖進行鄰接算子合并,得到優(yōu)化流圖。
[0120]具體的,合并模塊104根據(jù)集群系統(tǒng)資源和算子邏輯復雜度確定合并范圍,進行鄰接算子合并。
[0121]更具體的,鄰接算子合并基于流圖拆解結(jié)果進行,需要計算兩個要素:集群可用CPU核數(shù)與算子邏輯復雜度。
[0122]占用率低于M為可用核,結(jié)合用戶配置,確定算子合并范圍;其中,O < M < I,可根據(jù)集群系統(tǒng)資源以及算子邏輯復雜度設(shè)置,例如可以為50% ;
[0123]若待合并的鄰接算子為系統(tǒng)算子,根據(jù)合并優(yōu)先級列表對所述至少一個子流圖進行鄰接算子合并,以得到優(yōu)化流圖;
[0124]若待合并的鄰接算子為用戶自定義算子,計算所述用戶自定義算子的合并前算子相對復雜度及合并后算子相對復雜度,對所述至少一個子流圖進行鄰接算子合并,以得到優(yōu)化流圖,使得合并后算子相對復雜度小于或等于合并前算子相對復雜度的N倍,其中N大于或等于I。
[0125]例如,集群中有3個工作算子,可用CPU核數(shù)分別為:3、2、3,所以總可用CPU核數(shù)為8,算子合并上限值為8,即合并后至少要保留8個實際算子;下限值為0,即不進行任何合并,尤其當系統(tǒng)資源足夠充裕時,合并算子完全無必要,用戶可根據(jù)實際情況調(diào)整上下限的合并值,以控制合并范圍。
[0126]算子分為系統(tǒng)算子和用戶自定義算子。系統(tǒng)算子為平臺提供給用戶直接使用的庫算子,算子邏輯復雜度固定,所以存在固定的合并優(yōu)先級列表;用戶自定義算子為用戶繼承平臺提供的開發(fā)接口自己實現(xiàn)的處理操作,這類算子復雜度需要經(jīng)過計算后確定,計算復雜度方法包括但不限于常見的各種代碼復雜度計算方法。
[0127]算子合并可以通過多種方式實現(xiàn),包括但不限于:進程通信、線程通信、函數(shù)調(diào)用等,合并后的算子不能超鄰接算子的復雜度過高,否則會造成計算負載的不均衡。
[0128]算子合并為實現(xiàn)如下目標:
[0129]將算子間的數(shù)據(jù)傳輸轉(zhuǎn)換成更高性能的消息交互,例如:跨網(wǎng)絡(luò)通信變成進程間通信,進程間通信變成線程間消息傳遞,線程消息傳遞變成普通函數(shù)調(diào)用,從而消除數(shù)據(jù)傳輸時延導致的算子懸停與計算資源浪費的問題;
[0130]對于極高復雜度的算子,如Join、Agg、CEP等系統(tǒng)算子,以及復雜度很高的用戶自定義算子,合并難度大,計算復雜,且優(yōu)化效果很難保證,所以除非用戶設(shè)定算子最小優(yōu)化值,否則不優(yōu)先對此類算子進行合并處理。
[0131]可選的,如圖9所示,流圖優(yōu)化裝置100還包括部署模塊105,用于將優(yōu)化后流圖部署到工作節(jié)點執(zhí)行。
[0132]如圖10所示,為本發(fā)明提供的流圖優(yōu)化裝置的實體裝置圖,流圖優(yōu)化裝置包括至少一個處理器1001,通信總線1002,存儲器1003以及至少一個通信接口 1004。
[0133]其中,通信總線1002用于實現(xiàn)上述組件之間的連接并通信,通信接口 1004用于與外部設(shè)備連接并通信。
[0134]其中,存儲器1003用于存儲需要執(zhí)行的程序代碼,當處理器1001執(zhí)行存儲器1003中的程序代碼時,實現(xiàn)如下功能:
[0135]接收用戶流圖;
[0136]解析所述用戶流圖,構(gòu)造算子節(jié)點與數(shù)據(jù)流邊描述的流圖;
[0137]按照流圖類型的最大原子劃分規(guī)則對流圖進行拆解,以得到至少一個子流圖,其中所述
[0138]至少一個子流圖中的任一子流圖包含盡可能多的算子,且所述任一子流圖只屬于所述流
[0139]圖類型中的一種。
[0140]根據(jù)所述至少一個子流圖中各個子流圖的處理邏輯復雜度,對所述至少一個子流圖進行鄰接算子合并,以得到優(yōu)化流圖,使得經(jīng)鄰接算子合并后各個子流圖的處理邏輯復雜度達到均衡
[0141]在本發(fā)明實施例中,提供了一種流圖優(yōu)化方法和裝置,通過接受用戶提供的流應(yīng)用流圖,解析用戶流圖,構(gòu)造流圖算子節(jié)點與數(shù)據(jù)流邊描述結(jié)構(gòu),對流圖進行拆解,實現(xiàn)流圖類型的最大原子劃分,以得到至少一個子流圖,根據(jù)合并算法對至少一個子流圖進行鄰接算子合并,得到優(yōu)化流圖。通過對用戶提供的流圖進行拆解和合并,實現(xiàn)流圖計算邏輯的均衡以及減少了冗余流量傳輸,提高了流系統(tǒng)資源的利用率與流應(yīng)用的執(zhí)行性能。
[0142]本發(fā)明是參照根據(jù)本發(fā)明實施例的方法、裝置的流程圖和/或方框圖來描述的。應(yīng)理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中的功能的裝置。
[0143]這些計算機程序指令也可存儲在能引導計算機或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中的功能。
[0144]這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計算機或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中的功能的步驟。
[0145]盡管已描述了本發(fā)明的優(yōu)選實施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對這些實施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實施例以及落入本發(fā)明范圍的所有變更和修改。
[0146]顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明實施例進行各種改動和變型而不脫離本發(fā)明實施例的精神和范圍。這樣,倘若本發(fā)明實施例的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。
【權(quán)利要求】
1.一種用于流計算系統(tǒng)的流圖優(yōu)化方法,其特征在于,所述流計算系統(tǒng)包括多個工作節(jié)點和主控節(jié)點,所述方法由主控節(jié)點執(zhí)行,所述方法包括: 接收用戶流圖; 解析所述用戶流圖,構(gòu)造算子節(jié)點與數(shù)據(jù)流邊描述的流圖; 按照流圖類型的最大原子劃分規(guī)則對流圖進行拆解,以得到至少一個子流圖,其中所述至少一個子流圖中的任一子流圖包含盡可能多的算子,且所述任一子流圖只屬于所述流圖類型中的一種。 根據(jù)所述至少一個子流圖中各個子流圖的處理邏輯復雜度,對所述至少一個子流圖進行鄰接算子合并,以得到優(yōu)化流圖,使得經(jīng)鄰接算子合并后各個子流圖的處理邏輯復雜度達到均衡。
2.根據(jù)權(quán)利要求1所述的流圖優(yōu)化方法,其特征在于,所述流圖類型包括:脈沖式流圖、分聯(lián)式流圖和迭代式流圖; 所述脈沖式流圖,包括數(shù)據(jù)流按流圖算子排列順序依次流過;其中,脈沖式流圖包含脈沖式算子,所述脈沖式算子包含窗口緩存,且數(shù)據(jù)輸出具有批處理特征; 所述分聯(lián)式流圖,包括數(shù)據(jù)流在入口算子處分流,在出口算子處匯聚;其中,分聯(lián)式流圖包含分聯(lián)式算子,所述分聯(lián)式算子為所述分聯(lián)式流圖的入口算子或出口算子; 所述迭代式流圖,包括后繼算子的輸出數(shù)據(jù)流返回至前面算子作為輸入流,進行迭代處理;其中,迭代式流圖包含迭代式算子,所述迭代式算子為所述迭代式流圖的入口算子或出口算子。
3.根據(jù)權(quán)利要求1或2所述的流圖優(yōu)化方法,其特征在于,所述按照流圖類型的最大原子劃分規(guī)則對流圖進行拆解,以得到至少一個子流圖,包括: 遍歷流圖中算子,找出多種類型算子;其中,多種類型的算子包括迭代式算子、分聯(lián)式算子和脈沖式算子; 從所述多種類型算子中按優(yōu)先級從高到低的順序選取用作邊界算子的算子,其中,優(yōu)先級從高到低的順序依次為迭代算子、分聯(lián)算子、脈沖算子; 根據(jù)所述選取的邊界算子采用所述流圖類型的最大原子劃分規(guī)則對所述流圖中算子進行劃分,以得到至少一個子流圖;其中,所述最大原子劃分規(guī)則,包括:分裂出的子流圖包含盡可能多的算子,且任一子流圖只屬于迭代式流圖、分聯(lián)式流圖和脈沖式流圖中的一種。
4.根據(jù)權(quán)利要求1至3中任一項所述的流圖優(yōu)化方法,其特征在于,所述根據(jù)所述至少一個子流圖中各個子流圖的處理邏輯復雜度,對所述至少一個子流圖進行鄰接算子合并,以得到優(yōu)化流圖,使得經(jīng)鄰接算子合并后所述各個子流圖的處理邏輯復雜度達到均衡,具體包括: 根據(jù)集群系統(tǒng)資源和算子邏輯復雜度確定合并范圍; 根據(jù)合并算法在所述確定的合并范圍內(nèi)對所述至少一個子流圖進行鄰接算子合并,以得到優(yōu)化流圖,使得經(jīng)鄰接算子合并后各個子流圖的處理邏輯復雜度達到均衡。
5.根據(jù)權(quán)利要求4所述的流圖優(yōu)化方法,其特征在于,所述根據(jù)合并算法在所述確定的合并范圍內(nèi)對所述至少一個子流圖進行鄰接算子合并,以得到優(yōu)化流圖,具體包括: 若待合并的鄰接算子為系統(tǒng)算子,根據(jù)合并優(yōu)先級列表對所述至少一個子流圖進行鄰接算子合并,以得到優(yōu)化流圖; 若待合并的鄰接算子為用戶自定義算子,計算所述用戶自定義算子的合并前算子相對復雜度及合并后算子相對復雜度,對所述至少一個子流圖進行鄰接算子合并,以得到優(yōu)化流圖,使得合并后算子相對復雜度小于或等于合并前算子相對復雜度的~倍,其中~大于或等于1。
6.根據(jù)權(quán)利要求1至5中任一項所述的流圖優(yōu)化方法,其特征在于,所述方法還包括: 將優(yōu)化后的流圖部署到工作節(jié)點中執(zhí)行。
7.—種用于流計算系統(tǒng)的流圖優(yōu)化裝置,其特征在于,所述流計算系統(tǒng)包括多個工作節(jié)點和主控節(jié)點,所述主控節(jié)點包括: 接收模塊,用于接收流圖; 解析模塊,用于解析所述流圖,構(gòu)造流圖算子與數(shù)據(jù)流邊描述結(jié)構(gòu); 拆解模塊,用于按照流圖類型的最大原子劃分規(guī)則對流圖進行拆解,以得到至少一個子流圖; 合并模塊,用于根據(jù)所述至少一個子流圖中各個子流圖的處理邏輯復雜度,對所述至少 一個子流圖進行鄰接算子合并,以得到優(yōu)化流圖,使得經(jīng)鄰接算子合并后所述各個子流 圖的處理邏輯復雜度達到均衡。
8.根據(jù)權(quán)利要求7所述的流圖優(yōu)化裝置,其特征在于,所述流圖類型包括:脈沖式流圖、分聯(lián)式流圖和迭代式流圖; 所述脈沖式流圖,包括數(shù)據(jù)流按流圖算子排列順序依次流過;其中,脈沖式流圖包含脈沖式算子,所述脈沖式算子包含窗口緩存,且數(shù)據(jù)輸出具有批處理特征; 所述分聯(lián)式流圖,包括數(shù)據(jù)流在入口算子處分流,在出口算子處匯聚;其中,分聯(lián)式流圖包含分聯(lián)式算子,所述分聯(lián)式算子為所述分聯(lián)式流圖的入口算子或出口算子; 所述迭代式流圖,包括后繼算子的輸出數(shù)據(jù)流返回至前面算子作為輸入流,進行迭代處理;其中,迭代式流圖包含迭代式算子,所述迭代式算子為所述迭代式流圖的入口算子或出口算子。
9.根據(jù)權(quán)利要求7或8所述的流圖優(yōu)化裝置,其特征在于,所述拆解模塊包括:查詢單元、選擇單元和拆解單元; 所述查詢單元,用于遍歷流圖中算子,找出多種類型算子;其中,多種類型的算子包括迭代式算子、分聯(lián)式算子和脈沖式算子; 所述選擇單元,用于從所述多種類型算子中按優(yōu)先級從高到低的順序選取用作邊界算子的算子;其中,優(yōu)先級從高到低的順序依次為迭代算子、分聯(lián)算子、脈沖算子; 所述拆解單元,用于根據(jù)所述選取的邊界算子采用所述流圖類型的最大原子劃分規(guī)則對所述流圖中算子進行劃分,以得到至少一個子流圖;其中,所述最大原子劃分規(guī)則,包括:分裂出的子流圖包含盡可能多的算子,且任一子流圖只屬于迭代式流圖、分聯(lián)式流圖和脈沖式流圖中的一種。
10.根據(jù)權(quán)利要求7至9中任一項所述的流圖優(yōu)化裝置,其特征在于, 所述合并模塊,具體用于根據(jù)集群系統(tǒng)資源和算子邏輯復雜度確定合并范圍,根據(jù)合并算法在所述確定的合并范圍內(nèi)對所述至少一個子流圖進行鄰接算子合并,以得到優(yōu)化流圖,使得經(jīng)鄰接算子合并后各個子流圖的處理邏輯復雜度達到均衡。
11.根據(jù)權(quán)利要求10所述的流圖優(yōu)化裝置,其特征在于,在所述根據(jù)合并算法在所述確定的合并范圍內(nèi)對所述至少一個子流圖進行鄰接算子合并,以得到優(yōu)化流圖,使得經(jīng)鄰接算子合并后各個子流圖的處理邏輯復雜度達到均衡,所述合并模塊具體用于, 若待合并的鄰接算子為系統(tǒng)算子,根據(jù)合并優(yōu)先級列表對所述至少一個子流圖進行鄰接算子合并,以得到優(yōu)化流圖; 若待合并的鄰接算子為用戶自定義算子,計算所述用戶自定義算子的合并前算子相對復雜度及合并后算子相對復雜度,對所述至少一個子流圖進行鄰接算子合并,以得到優(yōu)化流圖,使得合并后算子相對復雜度小于或等于合并前算子相對復雜度的~倍,其中~大于或等于1。
12.根據(jù)權(quán)利要求7至11任一項所述的流圖優(yōu)化裝置,其特征在于,所述裝置還包括部署模塊,所述部署模塊用于將優(yōu)化后的流圖部署到工作節(jié)點中執(zhí)行。
【文檔編號】G06F17/30GK104504143SQ201510003823
【公開日】2015年4月8日 申請日期:2015年1月4日 優(yōu)先權(quán)日:2015年1月4日
【發(fā)明者】張松山, 夏命榛 申請人:華為技術(shù)有限公司