本發(fā)明涉及一種基于dag的面向多計(jì)算框架的數(shù)據(jù)處理方法及系統(tǒng),屬于計(jì)算機(jī)軟件技術(shù)領(lǐng)域。
背景技術(shù):
目前的數(shù)據(jù)處理系統(tǒng)大都是針對(duì)某一個(gè)特定的計(jì)算框架,或某兩個(gè)特定的計(jì)算框架開發(fā)的。主要針對(duì)計(jì)算框架所處的集群情況進(jìn)行模塊的開發(fā)和調(diào)優(yōu)。注重時(shí)間信息同步和日志獲取這兩個(gè)主要功能。數(shù)據(jù)處理系統(tǒng)還沒有明確引入dag(directedacyclicgraph,有向無環(huán)圖)概念,目前有向無環(huán)圖被廣泛應(yīng)用在仿真任務(wù)并行度分析和動(dòng)態(tài)重路由調(diào)度等方面。
目前的數(shù)據(jù)處理系統(tǒng)與計(jì)算框架綁定,不具有對(duì)于計(jì)算框架的擴(kuò)展性。同時(shí),針對(duì)計(jì)算框架開發(fā),使數(shù)據(jù)處理系統(tǒng)與底層計(jì)算框架綁定,耦合度高,向其他計(jì)算平臺(tái)移植的難度大。以spark為主的計(jì)算框架大都采用dag做其主要的邏輯計(jì)劃和物理計(jì)劃載體,通過dag特有的屬性完成計(jì)算。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于提供一種基于dag的面向多計(jì)算框架的數(shù)據(jù)處理方法及系統(tǒng)。通過實(shí)現(xiàn)指定的編程接口,使用戶的開發(fā)脫離計(jì)算框架,降低開發(fā)難度,同時(shí)實(shí)現(xiàn)計(jì)算框架的可插拔。本發(fā)明通過構(gòu)建算子之間的dag,根據(jù)規(guī)則切分,合并,生成子作業(yè)的dag,減少子作業(yè)數(shù)量,減少數(shù)據(jù)落地次數(shù),提高計(jì)算框架的計(jì)算效率。
本發(fā)明的技術(shù)方案為:
一種基于dag的面向多計(jì)算框架的數(shù)據(jù)處理方法,其步驟為:
1)用戶根據(jù)目標(biāo)計(jì)算場(chǎng)景選取算子,然后對(duì)選取的算子的輸入輸出進(jìn)行連接并配置相應(yīng)的參數(shù),得到該目標(biāo)計(jì)算場(chǎng)景;然后向管理器發(fā)送保存場(chǎng)景信息的請(qǐng)求;
2)管理器接收該請(qǐng)求,將場(chǎng)景信息保存到場(chǎng)景表中;管理器收到該目標(biāo)計(jì)算場(chǎng)景的執(zhí)行請(qǐng)求后,讀取該場(chǎng)景表生成包含該目標(biāo)計(jì)算場(chǎng)景信息的作業(yè)并發(fā)送給調(diào)度器;
3)調(diào)度器根據(jù)收到的作業(yè)生成對(duì)應(yīng)的算子dag并驗(yàn)證;對(duì)于算子dag驗(yàn)證通過的算子生成子作業(yè)dag;然后根據(jù)生成的子作業(yè)dag確定每一執(zhí)行階段并將其發(fā)送給執(zhí)行器;
4)執(zhí)行器對(duì)選定的計(jì)算框架進(jìn)行適配,然后將調(diào)度器下發(fā)的每一執(zhí)行階段的子作業(yè)解釋為該計(jì)算框架下的計(jì)算邏輯并觸發(fā)計(jì)算;然后將計(jì)算結(jié)果提交給調(diào)度器。
進(jìn)一步的,所述調(diào)度器通過判斷算子dag的數(shù)據(jù)結(jié)構(gòu)正確性和邏輯正確性驗(yàn)證算子dag;其中,數(shù)據(jù)結(jié)構(gòu)正確性即驗(yàn)證算子dag是否滿足有向無環(huán)圖要求,邏輯正確性即驗(yàn)證算子前后連接和位置的正確性。
進(jìn)一步的,所述調(diào)度器將同類算子合并在一起,生成子作業(yè)dag;所述調(diào)度器對(duì)非同類算子進(jìn)行切分,生成子作業(yè)dag;其中,每一個(gè)子作業(yè)dag中包含一個(gè)或多個(gè)算子。
進(jìn)一步的,所述執(zhí)行器根據(jù)生成的子作業(yè)dag確定每一執(zhí)行階段的方法為:所述執(zhí)行器對(duì)子作業(yè)dag按廣度優(yōu)先的方式進(jìn)行遍歷,將無父節(jié)點(diǎn)的節(jié)點(diǎn)歸并為同一個(gè)執(zhí)行階段,然后邏輯上刪除無父結(jié)點(diǎn)且已經(jīng)歸并為同一個(gè)執(zhí)行階段的節(jié)點(diǎn),對(duì)新暴露出來的無父結(jié)點(diǎn)且未歸并到任何執(zhí)行階段中的節(jié)點(diǎn)進(jìn)行歸并操作,直至子作業(yè)dag為空,從而確定每一執(zhí)行階段,每一個(gè)執(zhí)行階段中包含一個(gè)或多個(gè)子作業(yè)。
進(jìn)一步的,所述管理器還保存場(chǎng)景執(zhí)行后得到的執(zhí)行實(shí)例和針對(duì)需按時(shí)執(zhí)行的場(chǎng)景的定時(shí)執(zhí)行信息;每一所述執(zhí)行實(shí)例為一作業(yè);所述作業(yè)包括場(chǎng)景信息、場(chǎng)景參數(shù)、算子信息、算子參數(shù)。
一種基于dag的面向多計(jì)算框架的數(shù)據(jù)處理系統(tǒng),其特征在于,包括web頁面、管理器、調(diào)度器和執(zhí)行器;其中,
web頁面,用于為用戶提供可視化的圖形用戶界面,根據(jù)目標(biāo)計(jì)算場(chǎng)景選取算子,然后對(duì)選取的算子的輸入輸出進(jìn)行連接并配置相應(yīng)的參數(shù),得到該目標(biāo)計(jì)算場(chǎng)景;
管理器,用于保存算子信息、目標(biāo)計(jì)算場(chǎng)景信息、用戶信息和向調(diào)度器下發(fā)作業(yè);
調(diào)度器,用于根據(jù)收到的作業(yè)生成對(duì)應(yīng)的算子dag并驗(yàn)證;對(duì)于算子dag驗(yàn)證通過的算子生成子作業(yè)dag;然后根據(jù)生成的子作業(yè)dag確定每一執(zhí)行階段并將其發(fā)送給執(zhí)行器;
執(zhí)行器,用于對(duì)選定的計(jì)算框架進(jìn)行適配,以及將調(diào)度器下發(fā)的每一執(zhí)行階段的子作業(yè)解釋為該計(jì)算框架下的計(jì)算邏輯并觸發(fā)計(jì)算;然后將計(jì)算結(jié)果提交給調(diào)度器。
本發(fā)明提供的基于dag的面向多計(jì)算框架的數(shù)據(jù)處理系統(tǒng)主要包括:web頁面、管理器、調(diào)度器和執(zhí)行器。各部分以xml文件的形式交互,異步通信。
web頁面:為用戶提供可視化的圖形用戶界面。用戶通過對(duì)算子狀態(tài)為使用中的在算子列表中展示的算子的拖拽,根據(jù)目標(biāo)計(jì)算場(chǎng)景,選取算子,然后對(duì)選取的算子的輸入輸出進(jìn)行連接并配置相應(yīng)的參數(shù),得到該目標(biāo)計(jì)算場(chǎng)景。對(duì)于計(jì)算場(chǎng)景,用戶可以即時(shí)執(zhí)行該場(chǎng)景,也可以配置定時(shí)執(zhí)行的quartz參數(shù)。系統(tǒng)為用戶預(yù)制算子,同時(shí),也為用戶提供不同類型算子的編程接口,方便用戶的擴(kuò)充,和在頁面注冊(cè)。
管理器:為用戶保存算子信息,在web頁面得到的目標(biāo)場(chǎng)景信息,用戶信息,場(chǎng)景執(zhí)行后得到的執(zhí)行實(shí)例和針對(duì)需按時(shí)執(zhí)行的場(chǎng)景的定時(shí)執(zhí)行信息,為web頁面提供后臺(tái)支持。管理器除了為用戶提供對(duì)數(shù)據(jù)處理系統(tǒng)的管理功能外,還為用戶提供執(zhí)行場(chǎng)景的功能,向調(diào)度器下發(fā)作業(yè)xml。場(chǎng)景的一個(gè)執(zhí)行實(shí)例為一個(gè)作業(yè)。作業(yè)包括場(chǎng)景信息,場(chǎng)景參數(shù),算子信息,算子參數(shù),這些參數(shù)以xml的形式組織。
調(diào)度器:獲取管理器下發(fā)的作業(yè)xml,生成對(duì)應(yīng)的算子dag,判斷算子dag數(shù)據(jù)結(jié)構(gòu)和邏輯上的正確性。數(shù)據(jù)結(jié)構(gòu)正確性即驗(yàn)證算子dag是否滿足有向無環(huán)圖要求,邏輯正確性即驗(yàn)證算子前后連接和位置的正確性。若算子dag不能通過驗(yàn)證,調(diào)度器則向管理器報(bào)錯(cuò)。對(duì)于正確的算子dag,按照同類算子合并、非同類算子切分的規(guī)則對(duì)算子dag進(jìn)行切分,合并,生成子作業(yè)dag。每一個(gè)子作業(yè)dag中,都包含一個(gè)或多個(gè)算子。通過子作業(yè)dag,按廣度優(yōu)先遍歷的方式,將無父節(jié)點(diǎn)的節(jié)點(diǎn)歸并為同一個(gè)執(zhí)行階段,而后邏輯上刪除這些無父結(jié)點(diǎn)且已經(jīng)歸并為同一個(gè)執(zhí)行階段的節(jié)點(diǎn),對(duì)新暴露出來的無父結(jié)點(diǎn)且未歸并到任何執(zhí)行階段中的節(jié)點(diǎn)進(jìn)行上述歸并操作,直至子作業(yè)dag為空,從而確定了計(jì)算的每一個(gè)執(zhí)行階段。每一個(gè)執(zhí)行階段中都包含一個(gè)或多個(gè)子作業(yè),按序向執(zhí)行器下發(fā)。
執(zhí)行器:完成對(duì)不同計(jì)算框架的適配——執(zhí)行器根據(jù)用戶選定的計(jì)算框架,未指定則根據(jù)算子選型,判斷此作業(yè)的最佳計(jì)算框架,進(jìn)行適配,獲取調(diào)度器下發(fā)的子作業(yè)xml,完成計(jì)算的搭建——將作業(yè)解釋為對(duì)應(yīng)計(jì)算框架下的計(jì)算邏輯,并觸發(fā)計(jì)算。計(jì)算結(jié)束后,將計(jì)算結(jié)果提交調(diào)度器。
與現(xiàn)有技術(shù)相比,本發(fā)明具有如下優(yōu)勢(shì):
1、算子開發(fā)脫離計(jì)算框架,降低算子開發(fā)難度,實(shí)現(xiàn)了計(jì)算框架的可插拔;
2、通過切分,合并,生成子作業(yè)dag,減少數(shù)據(jù)落地次數(shù),提高了計(jì)算框架的計(jì)算效率。
附圖說明
圖1是本發(fā)明spark計(jì)算框架下提交即時(shí)執(zhí)行的作業(yè)的流程圖。
具體實(shí)施方式
下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明做進(jìn)一步詳細(xì)的說明,但不以任何方式限制本發(fā)明的范圍。
實(shí)例1基于dag的面向多計(jì)算框架的數(shù)據(jù)處理系統(tǒng)
本發(fā)明的流程如圖1所示,以用戶在spark計(jì)算框架下提交即時(shí)執(zhí)行的作業(yè)為例:
1)用戶登錄,選擇新建場(chǎng)景,配置必要信息,不配置quartz參數(shù),選擇spark計(jì)算框架,在界面上拖拽算子,連接輸入輸出端口,配置算子參數(shù),保存場(chǎng)景。頁面向管理器發(fā)送保存場(chǎng)景信息的請(qǐng)求,該請(qǐng)求包括場(chǎng)景信息,場(chǎng)景參數(shù)信息,算子信息,算子參數(shù)信息;
2)管理器接收頁面請(qǐng)求,將場(chǎng)景信息保存到場(chǎng)景表中;
3)用戶在頁面點(diǎn)擊運(yùn)行,頁面向管理器提交場(chǎng)景執(zhí)行請(qǐng)求;
4)管理器接收頁面場(chǎng)景執(zhí)行請(qǐng)求,讀場(chǎng)景表,向調(diào)度器提交包含該場(chǎng)景所有信息的作業(yè);
5)調(diào)度器接收作業(yè)任務(wù),生成算子dag,對(duì)生成的算子dag做驗(yàn)證;
6)調(diào)度器將驗(yàn)證通過的算子dag按規(guī)則進(jìn)行切分,合并,生成子作業(yè)dag,并生成執(zhí)行執(zhí)行階段stage;
7)調(diào)度器通過解析用戶配置的計(jì)算框架向spark計(jì)算框架的執(zhí)行器按stage提交子作業(yè);
8)執(zhí)行器接收作業(yè)執(zhí)行請(qǐng)求,按照與調(diào)度器相同的規(guī)則生成算子dag,觸發(fā)計(jì)算,并將計(jì)算結(jié)果提交調(diào)度器;
9)調(diào)度器接收計(jì)算結(jié)果,判斷stage是否執(zhí)行結(jié)束,若未結(jié)束則等待執(zhí)行器執(zhí)行,若結(jié)束啟動(dòng)下一個(gè)stage;
10)當(dāng)所有stage均已經(jīng)正確結(jié)束,調(diào)度器向管理器提交作業(yè)的執(zhí)行結(jié)果,并清理臨時(shí)數(shù)據(jù);
11)管理器接收?qǐng)?zhí)行結(jié)果,更新數(shù)據(jù)庫,向頁面提交;
12)頁面刷新執(zhí)行狀態(tài)。
實(shí)例2基于dag的面向多計(jì)算框架的數(shù)據(jù)處理系統(tǒng)
以用戶在spark計(jì)算框架下提交定時(shí)執(zhí)行的作業(yè)為例:
1)用戶登錄,選擇新建場(chǎng)景,配置必要信息,選擇配置quartz參數(shù),選擇spark計(jì)算框架,在界面上拖拽算子,連接輸入輸出端口,配置算子參數(shù),保存場(chǎng)景。頁面向管理器發(fā)送請(qǐng)求;
2)管理器接收頁面請(qǐng)求,將場(chǎng)景信息保存到場(chǎng)景表中;
3)管理器監(jiān)控定時(shí)執(zhí)行作業(yè),發(fā)現(xiàn)該作業(yè)需要執(zhí)行,讀場(chǎng)景表,向調(diào)度器提交包含該場(chǎng)景所有信息的作業(yè);
4)調(diào)度器接收任務(wù),生成算子dag,對(duì)生成的算子dag做驗(yàn)證;
5)調(diào)度器將驗(yàn)證通過的算子dag按規(guī)則進(jìn)行切分,合并,生成子作業(yè)dag,并生成執(zhí)行stage;
6)調(diào)度器通過解析用戶配置的計(jì)算框架向spark計(jì)算框架的執(zhí)行器按stage提交子作業(yè);
7)執(zhí)行器接收作業(yè)執(zhí)行請(qǐng)求,按照與調(diào)度器相同的規(guī)則生成算子dag,觸發(fā)計(jì)算,并將計(jì)算結(jié)果提交調(diào)度器;
8)調(diào)度器接收計(jì)算結(jié)果,判斷stage是否執(zhí)行結(jié)束,若未結(jié)束則等待執(zhí)行器執(zhí)行,若結(jié)束啟動(dòng)下一個(gè)stage;
9)當(dāng)所有stage均已經(jīng)正確結(jié)束,調(diào)度器向管理器提交作業(yè)的執(zhí)行結(jié)果,并清理臨時(shí)數(shù)據(jù);
10)管理器接收?qǐng)?zhí)行結(jié)果,更新數(shù)據(jù)庫,向頁面提交;
11)頁面刷新執(zhí)行狀態(tài)。
實(shí)例3基于dag的面向多計(jì)算框架的數(shù)據(jù)處理系統(tǒng)
以用戶在spark計(jì)算框架下提交即時(shí)執(zhí)行的錯(cuò)誤任務(wù)為例:
1)用戶登錄,選擇新建場(chǎng)景,配置必要信息,選擇不配置quartz參數(shù),選擇spark計(jì)算框架,在界面上拖拽算子,連接輸入輸出端口,配置算子參數(shù),保存場(chǎng)景。頁面向管理器發(fā)送請(qǐng)求;
2)管理器接收頁面請(qǐng)求,將場(chǎng)景信息保存到場(chǎng)景表中;
3)用戶在頁面點(diǎn)擊運(yùn)行,頁面向管理器提交請(qǐng)求;
4)管理器接收頁面請(qǐng)求,讀場(chǎng)景表,向調(diào)度器提交包含該場(chǎng)景全部信息的作業(yè);
5)調(diào)度器接收任務(wù),生成算子dag,對(duì)生成的算子dag做驗(yàn)證;
6)調(diào)度器將驗(yàn)證通過的算子dag按規(guī)則進(jìn)行切分,合并,生成子作業(yè)dag,并生成執(zhí)行stage;
7)調(diào)度器通過解析用戶配置的計(jì)算框架向spark計(jì)算框架的執(zhí)行器按stage提交子作業(yè);
8)執(zhí)行器接收作業(yè)執(zhí)行請(qǐng)求,按照與調(diào)度器相同的規(guī)則生成算子dag,觸發(fā)計(jì)算,并將計(jì)算結(jié)果提交調(diào)度器;
9)調(diào)度器接收計(jì)算結(jié)果,判斷stage是否正確執(zhí)行結(jié)束,發(fā)現(xiàn)執(zhí)行器報(bào)錯(cuò);
10)調(diào)度器取消之后的所有stage,向管理器提交執(zhí)行結(jié)果;
11)管理器接收?qǐng)?zhí)行結(jié)果,更新數(shù)據(jù)庫,向頁面提交;
12)頁面刷新執(zhí)行狀態(tài)。