本發(fā)明涉及一種支持處理單元在線切換的流數(shù)據(jù)處理方法,屬于計(jì)算機(jī)數(shù)據(jù)處理技術(shù)領(lǐng)域。
背景技術(shù):
近年來,隨著工業(yè)物聯(lián)網(wǎng)、氣象信息網(wǎng)等技術(shù)的發(fā)展,人們需要處理的流數(shù)據(jù)量呈現(xiàn)出爆炸式的增長(zhǎng),數(shù)據(jù)成為了當(dāng)今社會(huì)增長(zhǎng)最快的資源之一。如何存儲(chǔ)、處理、分析、應(yīng)用大數(shù)據(jù)成為政府、學(xué)術(shù)界、產(chǎn)業(yè)界界共同關(guān)注的重大問題。隨著數(shù)據(jù)量的不斷增加和對(duì)數(shù)據(jù)處理實(shí)時(shí)性要求的快速提升,流式計(jì)算適應(yīng)于數(shù)據(jù)實(shí)時(shí)性要求高、數(shù)據(jù)不斷流入的場(chǎng)景。面對(duì)大數(shù)據(jù)時(shí)效性要求日益突出的應(yīng)用場(chǎng)景,越來越多的大數(shù)據(jù)應(yīng)用趨向于使用流式計(jì)算模式。
傳統(tǒng)流式計(jì)算框架主要以數(shù)據(jù)庫(kù)為存儲(chǔ)方式,數(shù)據(jù)規(guī)模較小且數(shù)據(jù)形式單一,而大數(shù)據(jù)流式處理需要構(gòu)建高效率、高可靠、低延遲、長(zhǎng)期穩(wěn)定的流式數(shù)據(jù)處理系統(tǒng)。在諸如氣象、能源、工業(yè)等關(guān)鍵領(lǐng)域的流式計(jì)算使用場(chǎng)景中,往往對(duì)系統(tǒng)的可用性要求非常高,不允許處理系統(tǒng)在任何時(shí)間出現(xiàn)不能服務(wù)的情況;同時(shí),對(duì)數(shù)據(jù)所要進(jìn)行的處理又不是一成不變的。例如在氣象大數(shù)據(jù)處理過程中,往往面臨著新的觀測(cè)數(shù)據(jù)類型加入、數(shù)據(jù)解碼算法改變、數(shù)據(jù)計(jì)算和分析算法改變的問題,且這種改變是隨著氣象業(yè)務(wù)的升級(jí)而經(jīng)常發(fā)生的,是大數(shù)據(jù)的一種新常態(tài)。如何對(duì)流數(shù)據(jù)業(yè)務(wù)進(jìn)行抽象,并在此抽象基礎(chǔ)上實(shí)現(xiàn)對(duì)可變邏輯進(jìn)行動(dòng)態(tài)加載,成為現(xiàn)有流數(shù)據(jù)處理系統(tǒng)在領(lǐng)域應(yīng)用中面臨的一大挑戰(zhàn)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是提出一種支持處理單元在線切換的流數(shù)據(jù)處理方法,針對(duì)已有流數(shù)據(jù)處理系統(tǒng)中處理框架與處理單元過度耦合、業(yè)務(wù)改變要求動(dòng)態(tài)改變處理方案的問題,基于對(duì)流數(shù)據(jù)處理系統(tǒng)的流程抽象,首先分離出處理框架和處理單元,其次應(yīng)用jvm動(dòng)態(tài)加載的機(jī)制完成應(yīng)用算法的動(dòng)態(tài)加載,使系統(tǒng)具有動(dòng)態(tài)應(yīng)對(duì)業(yè)務(wù)改變的能力,并保持7×24在線服務(wù)的高可用性。
本發(fā)明方法提出的支持處理單元在線切換的流數(shù)據(jù)處理方法,包括以下步驟:
(1)建立一個(gè)流數(shù)據(jù)處理的拓?fù)淠P?,拓?fù)淠P蜑橐粋€(gè)包括多個(gè)起始節(jié)點(diǎn)和多個(gè)終止節(jié)點(diǎn)的有向無環(huán)圖,將拓?fù)淠P陀洖槎M<v,e>,其中v為節(jié)點(diǎn)集合,e為邊集合,節(jié)點(diǎn)集合v中的元素節(jié)點(diǎn)vi包括:節(jié)點(diǎn)名稱n、處理單元p和節(jié)點(diǎn)類型g,節(jié)點(diǎn)類型定義為源節(jié)點(diǎn)g1和處理節(jié)點(diǎn)g2;處理單元p包括:并發(fā)度s、處理邏輯l、輸入單元id和輸出單元od,輸入單元id和輸出單元od中分別含有流數(shù)據(jù)最大采集時(shí)間長(zhǎng)度tmax、流數(shù)據(jù)描述信息a、流數(shù)據(jù)類型m和流數(shù)據(jù)值d四個(gè)屬性;處理邏輯l包括鍵值集合kv,鍵值集合元素kvi由流數(shù)據(jù)類型m和數(shù)據(jù)方法f構(gòu)成,即kvi=<m,f>;邊集合e中的元素ei為由節(jié)點(diǎn)集合v中的任意兩個(gè)相鄰節(jié)點(diǎn)vx和vy構(gòu)成的元組,即ei=<vx,vy>,記vx節(jié)點(diǎn)為vy節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn),vy節(jié)點(diǎn)為vx節(jié)點(diǎn)的后繼節(jié)點(diǎn),前驅(qū)節(jié)點(diǎn)vx在完成邏輯處理后將流數(shù)據(jù)傳輸給后繼節(jié)點(diǎn)vy;
(2)對(duì)上述拓?fù)淠P偷墓?jié)點(diǎn)集合v中的節(jié)點(diǎn)類型進(jìn)行判斷,若節(jié)點(diǎn)vi的類型為g1,則節(jié)點(diǎn)vi根據(jù)輸入單元id的描述信息a中的數(shù)據(jù)來源信息進(jìn)行數(shù)據(jù)采集,若節(jié)點(diǎn)vi的類型為g2,則節(jié)點(diǎn)vi根據(jù)輸入單元id的描述信息a中的數(shù)據(jù)監(jiān)聽網(wǎng)絡(luò)端口信息,等待其他節(jié)點(diǎn)的數(shù)據(jù)到來后進(jìn)行數(shù)據(jù)采集;
(3)節(jié)點(diǎn)vi的處理單元p接收采集的數(shù)據(jù),根據(jù)節(jié)點(diǎn)vi的輸入單元id中的最大采集時(shí)間長(zhǎng)度tmax對(duì)當(dāng)前采集數(shù)據(jù)的時(shí)間長(zhǎng)度tcurrent進(jìn)行判斷,若tcurrent≥tmax,則停止采集數(shù)據(jù),進(jìn)入步驟(4),若tcurrent<tmax,則重復(fù)本步驟;
(4)節(jié)點(diǎn)vi的處理單元p的輸入單元id接收采集的數(shù)據(jù),采集數(shù)據(jù)進(jìn)入處理單元p中的處理邏輯l,處理邏輯l根據(jù)輸入單元id的流數(shù)據(jù)類型m,對(duì)處理邏輯l的鍵值集合kv進(jìn)行檢索,若鍵值集合kv中存在流數(shù)據(jù)類型m與輸入單元id的流數(shù)據(jù)類型m相等的kvi,則處理邏輯l根據(jù)處理單元p的并發(fā)度s,調(diào)用kvi中的數(shù)據(jù)方法f,使用s個(gè)線程處理數(shù)據(jù),進(jìn)入步驟(5),若鍵值集合kv中不存在流數(shù)據(jù)類型m與輸入單元id的流數(shù)據(jù)類型m相等的kvi,則返回上述步驟(3);
(5)經(jīng)上述步驟(4)處理后的數(shù)據(jù)流入輸出單元od,輸出單元od對(duì)邊集合e進(jìn)行檢索,若邊集合e中存在當(dāng)前節(jié)點(diǎn)vi的節(jié)點(diǎn)名稱n與前驅(qū)節(jié)點(diǎn)vx的節(jié)點(diǎn)名稱n相同的ei,則輸出單元od將流入的數(shù)據(jù)傳送給該ei中的后繼節(jié)點(diǎn)vy,并返回上述步驟(2),若邊集合e中不存在當(dāng)前節(jié)點(diǎn)vi的節(jié)點(diǎn)名稱n與前驅(qū)節(jié)點(diǎn)vx的節(jié)點(diǎn)名稱n相同的ei,則輸出單元od將流入的數(shù)據(jù)輸出,得到流數(shù)據(jù)處理結(jié)果,并返回上述步驟(2)。
本發(fā)明提出的支持處理單元在線切換的流數(shù)據(jù)處理方案,其優(yōu)點(diǎn)是:
1、本發(fā)明方法對(duì)流數(shù)據(jù)處理過程進(jìn)行抽象,將不需要根據(jù)業(yè)務(wù)改變的處理框架和需要根據(jù)業(yè)務(wù)在線切換的處理單元進(jìn)行分離,具有很強(qiáng)的通用性。
2、本發(fā)明可以應(yīng)用于任何需要業(yè)務(wù)實(shí)時(shí)改變的流數(shù)據(jù)處理場(chǎng)景,具有良好的擴(kuò)展性。
3、本發(fā)明具有不需要重新啟動(dòng)流數(shù)據(jù)處理系統(tǒng)、無需停止服務(wù),具有7×24高可用的特點(diǎn)。
附圖說明
圖1是本發(fā)明提出的流數(shù)據(jù)處理的拓?fù)淠P蛨D。
圖2是本發(fā)明提出的支持處理單元在線切換的流數(shù)據(jù)處理方法的流程框圖。
具體實(shí)施方式
本發(fā)明提出一種支持處理單元在線切換的流數(shù)據(jù)處理方法,其流程框圖如圖2所示,包括以下步驟:
(1)建立一個(gè)流數(shù)據(jù)處理的拓?fù)淠P?,拓?fù)淠P蜑橐粋€(gè)包括多個(gè)起始節(jié)點(diǎn)和多個(gè)終止節(jié)點(diǎn)的有向無環(huán)圖,將拓?fù)淠P陀洖槎M<v,e>,其中v為節(jié)點(diǎn)集合,e為邊集合,圖1所示為拓?fù)淠P偷暮?jiǎn)單示意,圖1所有節(jié)點(diǎn)組成節(jié)點(diǎn)集合v,所有的邊,即圖中的所有的箭頭組成邊集合e。拓?fù)淠P陀糜趯?duì)流數(shù)據(jù)處理流程進(jìn)行描述。拓?fù)淠P妥裱鲾?shù)據(jù)處理的業(yè)務(wù)過程,為按照一定前置約束條件進(jìn)行數(shù)據(jù)上下游流轉(zhuǎn)的流程。拓?fù)淠P褪橇鲾?shù)據(jù)處理流程的抽象載體。其中節(jié)點(diǎn)集合v中的元素節(jié)點(diǎn)vi包括:節(jié)點(diǎn)名稱n、處理單元p和節(jié)點(diǎn)類型g,節(jié)點(diǎn)類型定義為源節(jié)點(diǎn)g1和處理節(jié)點(diǎn)g2;處理單元p包括:并發(fā)度s、處理邏輯l、輸入單元id和輸出單元od,輸入單元id和輸出單元od中分別含有流數(shù)據(jù)最大采集時(shí)間長(zhǎng)度tmax、流數(shù)據(jù)描述信息a、流數(shù)據(jù)類型m和流數(shù)據(jù)值d四個(gè)屬性;處理邏輯l包括鍵值集合kv,鍵值集合元素kvi由流數(shù)據(jù)類型m和數(shù)據(jù)方法f構(gòu)成,即kvi=<m,f>;邊集合e中的元素ei為由節(jié)點(diǎn)集合v中的任意兩個(gè)相鄰節(jié)點(diǎn)vx和vy構(gòu)成的元組,即ei=<vx,vy>,記vx節(jié)點(diǎn)為vy節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn),vy節(jié)點(diǎn)為vx節(jié)點(diǎn)的后繼節(jié)點(diǎn),前驅(qū)節(jié)點(diǎn)vx在完成邏輯處理后將流數(shù)據(jù)傳輸給后繼節(jié)點(diǎn)vy;
(2)對(duì)上述拓?fù)淠P偷墓?jié)點(diǎn)集合v中的節(jié)點(diǎn)類型進(jìn)行判斷,若節(jié)點(diǎn)vi的類型為g1,則節(jié)點(diǎn)vi根據(jù)輸入單元id的描述信息a中的數(shù)據(jù)來源信息進(jìn)行數(shù)據(jù)采集,若節(jié)點(diǎn)vi的類型為g2,則節(jié)點(diǎn)vi根據(jù)輸入單元id的描述信息a中的數(shù)據(jù)監(jiān)聽網(wǎng)絡(luò)端口信息,等待其他節(jié)點(diǎn)的數(shù)據(jù)到來后進(jìn)行數(shù)據(jù)采集;
(3)節(jié)點(diǎn)vi的處理單元p接收采集的數(shù)據(jù),根據(jù)節(jié)點(diǎn)vi的輸入單元id中的最大采集時(shí)間長(zhǎng)度tmax對(duì)當(dāng)前采集數(shù)據(jù)的時(shí)間長(zhǎng)度tcurrent進(jìn)行判斷,若tcurrent≥tmax,則停止采集數(shù)據(jù),進(jìn)入步驟(4),若tcurrent<tmax,則重復(fù)本步驟;
(4)節(jié)點(diǎn)vi的處理單元p的輸入單元id接收采集的數(shù)據(jù),采集數(shù)據(jù)進(jìn)入處理單元p中的處理邏輯l,處理邏輯l根據(jù)輸入單元id的流數(shù)據(jù)類型m,對(duì)處理邏輯l的鍵值集合kv進(jìn)行檢索,若鍵值集合kv中存在流數(shù)據(jù)類型m與輸入單元id的流數(shù)據(jù)類型m相等的kvi,則處理邏輯l根據(jù)處理單元p的并發(fā)度s,調(diào)用kvi中的數(shù)據(jù)方法f,使用s個(gè)線程處理數(shù)據(jù),進(jìn)入步驟(5),若鍵值集合kv中不存在流數(shù)據(jù)類型m與輸入單元id的流數(shù)據(jù)類型m相等的kvi,則返回上述步驟(3);本步驟根據(jù)輸入單元id的流數(shù)據(jù)類型m調(diào)用不同的數(shù)據(jù)方法f,即實(shí)現(xiàn)了處理單元在線切換的邏輯,在具體的程序語言實(shí)現(xiàn)中,即采用jvm類加載器實(shí)現(xiàn)處理單元的加載與切換。
(5)經(jīng)上述步驟(4)處理后的數(shù)據(jù)流入輸出單元od,輸出單元od對(duì)邊集合e進(jìn)行檢索,若邊集合e中存在當(dāng)前節(jié)點(diǎn)vi的節(jié)點(diǎn)名稱n與前驅(qū)節(jié)點(diǎn)vx的節(jié)點(diǎn)名稱n相同的ei,則輸出單元od將流入的數(shù)據(jù)傳送給該ei中的后繼節(jié)點(diǎn)vy,并返回上述步驟(2),若邊集合e中不存在當(dāng)前節(jié)點(diǎn)vi的節(jié)點(diǎn)名稱n與前驅(qū)節(jié)點(diǎn)vx的節(jié)點(diǎn)名稱n相同的ei,則輸出單元od將流入的數(shù)據(jù)輸出,得到流數(shù)據(jù)處理結(jié)果,并返回上述步驟(2)。