一種分布式數(shù)據(jù)批處理系統(tǒng)和方法
【專利摘要】本發(fā)明公開了一種分布式數(shù)據(jù)批處理系統(tǒng)和方法,該系統(tǒng)和方法中,主節(jié)點中的任務(wù)掃描模塊能夠計算每個任務(wù)的耗重,并且主節(jié)點中的任務(wù)調(diào)度分發(fā)模塊能夠根據(jù)單批次任務(wù)列表中的任務(wù)耗重、服務(wù)節(jié)點列表中的隊列長度描述和耗重速率,計算得到分配到各個服務(wù)節(jié)點上的任務(wù)之間的特定任務(wù)耗重分配比例,該特定任務(wù)耗重分配比例能夠使各個服務(wù)節(jié)點的資源得到充分利用并且使各個服務(wù)節(jié)點處理完分配到自身任務(wù)所消耗的時間基本一致。因此,按照該特定任務(wù)耗重分配比例將任務(wù)分配給各個服務(wù)節(jié)點,能夠使得各個服務(wù)節(jié)點在處理這些任務(wù)時,其各自資源均得到充分利用,不會造成資源的浪費,并且各個服務(wù)節(jié)點能夠基本上同一時間點處理完分配到自身的任務(wù)。
【專利說明】
一種分布式數(shù)據(jù)批處理系統(tǒng)和方法
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域,尤其涉及一種分布式數(shù)據(jù)批處理系統(tǒng)和方法。
【背景技術(shù)】
[0002]隨著公司業(yè)務(wù)擴張和新應(yīng)用系統(tǒng)的建設(shè),企業(yè)信息系統(tǒng)的數(shù)據(jù)日益集中,且數(shù)據(jù)量迅猛增長,對于數(shù)據(jù)的批量加工,統(tǒng)計分析需求也層出不窮。另一方面,為保證銀行等企業(yè)的正常營業(yè),限定了批量的時間窗口。即為了保證正常營業(yè),數(shù)據(jù)只能在規(guī)定的時間段內(nèi)進行處理。這種現(xiàn)象稱之為數(shù)據(jù)的潮汐特征。
[0003]為了應(yīng)對上述兩個方面的問題,亟需一種處理速率較快的數(shù)據(jù)處理系統(tǒng)。
[0004]現(xiàn)有技術(shù)中,為了加快數(shù)據(jù)處理系統(tǒng)的處理速率,可以提高服務(wù)器的配置,通過提升服務(wù)器的性能來加快批量處理速度。但是,當數(shù)據(jù)具有潮汐特征時,這種通過提升服務(wù)器的性能來加快批量處理速度的方式會造成服務(wù)器資源浪費,而且當存在更高級別的數(shù)據(jù)量并發(fā)要求時,僅僅通過提升配置有可能無法達到要求。
[0005]此外,為了加快數(shù)據(jù)處理系統(tǒng)的處理速率,還可以通過增加服務(wù)器的數(shù)量來解決,即通過多臺服務(wù)器同時處理大批量數(shù)據(jù),以提高數(shù)據(jù)處理速率。
[0006]現(xiàn)有技術(shù)中,當采用多臺服務(wù)器同時處理大批量數(shù)據(jù)時,通常要按照一定的維度如地域?qū)⑴繑?shù)據(jù)拆分為多個任務(wù)集,每臺服務(wù)器處理固定的任務(wù)集,例如,國內(nèi)有華東、華南、華北三個區(qū)域,然后就有三臺服務(wù)器分別處理各自區(qū)域的任務(wù)集。不同服務(wù)器之間相互隔離,不進行通信,如此會導(dǎo)致在同一時刻服務(wù)器資源利用率無法同時達到最高,進而造成了資源的浪費。
【發(fā)明內(nèi)容】
[0007]有鑒于此,本發(fā)明提供了一種分布式數(shù)據(jù)批處理系統(tǒng)和方法,以在提高數(shù)據(jù)處理效率的同時,不造成服務(wù)器資源的浪費。
[0008]為了解決上述技術(shù)問題,本發(fā)明采用了如下技術(shù)方案:
[0009]—種分布式數(shù)據(jù)批處理系統(tǒng),包括:一個主節(jié)點和多個服務(wù)節(jié)點;
[0010]其中,所述主節(jié)點包括:任務(wù)掃描模塊和任務(wù)調(diào)度分發(fā)模塊;
[0011]所述任務(wù)掃描模塊用于獲取數(shù)據(jù)文件,將所述數(shù)據(jù)文件封裝成任務(wù);計算每個任務(wù)的耗重,將所述任務(wù)存儲到主節(jié)點的任務(wù)緩沖隊列,以在所述主節(jié)點的任務(wù)緩沖隊列中形成批次任務(wù)列表;其中,所述耗重為一個任務(wù)在標準環(huán)境下處理所消耗的時間;所述標準環(huán)境為最接近生產(chǎn)環(huán)境配置的機器配置;
[0012]所述任務(wù)調(diào)度分發(fā)模塊用于從主節(jié)點的任務(wù)緩沖隊列中獲取單批次任務(wù)列表,根據(jù)所述單批次任務(wù)列表中的任務(wù)耗重、服務(wù)節(jié)點列表中的隊列長度描述和耗重速率,計算分配到各個服務(wù)節(jié)點的任務(wù)之間的特定任務(wù)耗重分配比例;將所述單批次任務(wù)列表中的任務(wù)按照所述特定任務(wù)耗重分配比例分配給各個服務(wù)節(jié)點;其中,所述特定任務(wù)耗重分配比例能夠使各個服務(wù)節(jié)點的資源得到充分利用;
[0013]所述服務(wù)節(jié)點包括任務(wù)接收模塊和任務(wù)驅(qū)動調(diào)度模塊;
[0014]所述任務(wù)接收模塊用于接收所述任務(wù)調(diào)度分發(fā)模塊分發(fā)的單批次任務(wù)列表的任務(wù),并將其存儲到服務(wù)節(jié)點的任務(wù)緩沖隊列;
[0015]所述任務(wù)驅(qū)動調(diào)度模塊用于從服務(wù)節(jié)點的任務(wù)緩沖隊列中獲取并處理分發(fā)到服務(wù)節(jié)點的單批次任務(wù)列表的任務(wù)。
[0016]可選地,所述任務(wù)驅(qū)動調(diào)度模塊包括分類模塊、泳道驅(qū)動器管理模塊、泳道驅(qū)動器、泳道集和任務(wù)線程池;
[0017]所述分類模塊用于按照特定組將所述單批次任務(wù)列表的任務(wù)分類,形成泳道列表,并將所述泳道列表提交到泳道驅(qū)動器管理模塊;所述特定組為具有共性屬性的任務(wù)構(gòu)成的組,所述泳道為單批次任務(wù)列表中具有共性維度屬性的任務(wù)集合;
[0018]所述泳道驅(qū)動器管理模塊用于將所述泳道列表添加到泳道集,并喚醒與泳道列表中的任務(wù)相關(guān)的泳道驅(qū)動器;所述泳道集用于管理多個泳道,提供最快的泳道定位和任務(wù)安全獲??;
[0019]所述與泳道列表中的任務(wù)相關(guān)泳道驅(qū)動器用于判斷實時任務(wù)并行執(zhí)行視圖中的任務(wù)線程是否達到泳道驅(qū)動器的并行上限,如果是,清理空泳道,然后執(zhí)行等待操作,如果否,執(zhí)行以下驅(qū)動過程^、8、(:、04、?:
[0020]A、判斷泳道集內(nèi)的預(yù)設(shè)泳道所屬的特定組的線程數(shù)是否達到特定組的并行上限,如果是,執(zhí)行步驟B,如果否,執(zhí)行步驟D ;
[0021]B、判斷泳道集內(nèi)是否還存在所述預(yù)設(shè)泳道的下一泳道,如果是,執(zhí)行步驟C,如果否,清理空泳道,然后執(zhí)行等待操作;
[0022]C、將預(yù)設(shè)泳道更新為泳道集視圖內(nèi)的所述預(yù)設(shè)泳道的下一泳道,返回執(zhí)行步驟A;
[0023]D、將任務(wù)循環(huán)從預(yù)設(shè)泳道中取出,并提交到任務(wù)線程池;并將實時任務(wù)并行執(zhí)行視圖中的預(yù)設(shè)泳道所屬的特定組的線程數(shù)和所述泳道驅(qū)動器的任務(wù)線程池的線程并行數(shù)加I,返回執(zhí)行步驟A和所述與泳道列表中的任務(wù)相關(guān)的泳道驅(qū)動器判斷實時任務(wù)并行執(zhí)行視圖中的任務(wù)線程池的線程是否達到泳道驅(qū)動器的并行上限;
[0024]E、任務(wù)線程池對任務(wù)進行處理;
[0025]F、當任務(wù)線程池將任務(wù)處理結(jié)束后,任務(wù)線程池將所述實時任務(wù)并行執(zhí)行視圖中的當前執(zhí)行的特定組的線程數(shù)減I,并返回執(zhí)行所述喚醒與泳道列表中的任務(wù)相關(guān)的泳道驅(qū)動器;
[0026]其中,所述實時任務(wù)并行執(zhí)行視圖里包括當前執(zhí)行的特定組數(shù)量以及每個當前執(zhí)行的特定組的線程數(shù);
[0027]所述泳道集視圖里包括屬于同一個泳道集內(nèi)的所有泳道,所述所有泳道在泳道集視圖內(nèi)按照進入泳道集的先后順序排列。
[0028]可選地,所述主節(jié)點還包括收集模塊,所述收集模塊用于收集和監(jiān)控各服務(wù)節(jié)點的狀態(tài),形成服務(wù)節(jié)點狀態(tài)視圖和健康視圖,所述服務(wù)節(jié)點狀態(tài)視圖和健康視圖為任務(wù)調(diào)度分發(fā)提供依據(jù);
[0029]所述收集模塊還用于維護服務(wù)節(jié)點狀態(tài)視圖和健康視圖。
[0030]可選地,所述主節(jié)點還包括服務(wù)節(jié)點故障處理模塊,所述服務(wù)節(jié)點故障處理模塊用于監(jiān)控各服務(wù)節(jié)點的心跳和數(shù)據(jù)采集狀態(tài),當服務(wù)節(jié)點發(fā)生節(jié)點數(shù)據(jù)更新延遲或異常時,開始向該服務(wù)節(jié)點的端口發(fā)送檢測信號,如果檢測信號的響應(yīng)信號在預(yù)設(shè)次數(shù)和/或預(yù)設(shè)時間段內(nèi)未達標,將該服務(wù)節(jié)點視為故障服務(wù)節(jié)點,主節(jié)點開始接管該服務(wù)節(jié)點的任務(wù)列表。
[0031]可選地,所述服務(wù)節(jié)點還包括:主節(jié)點狀態(tài)監(jiān)控模塊,所述主節(jié)點狀態(tài)監(jiān)控模塊用于實時監(jiān)控主節(jié)點的狀態(tài),如果發(fā)現(xiàn)主節(jié)點的心跳異常,與主節(jié)點的通信失敗次數(shù)達到預(yù)設(shè)次數(shù)和/或通信失敗時間達到預(yù)設(shè)時間段,則確定主節(jié)點發(fā)生故障,啟動競爭主節(jié)點控制權(quán)程序,如果競爭成功則開始關(guān)閉服務(wù)節(jié)點功能模塊,啟動主節(jié)點功能模塊。
[0032]可選地,所述服務(wù)節(jié)點還包括:
[0033]心跳和數(shù)據(jù)采集上報模塊,用于按照第一預(yù)設(shè)周期采集自身服務(wù)節(jié)點的心跳,按照第二預(yù)設(shè)周期采集自身服務(wù)節(jié)點的應(yīng)用數(shù)據(jù),并上傳至主節(jié)點。
[0034]一種分布式數(shù)據(jù)批處理方法,所述方法基于的分布式數(shù)據(jù)批處理系統(tǒng)包括一個主節(jié)點和多個服務(wù)節(jié)點,所述主節(jié)點包括任務(wù)掃描模塊和任務(wù)調(diào)度分發(fā)模塊;所述服務(wù)節(jié)點包括任務(wù)接收模塊和任務(wù)驅(qū)動調(diào)度模塊;
[0035]所述方法包括:
[0036]任務(wù)掃描模塊獲取數(shù)據(jù)文件,將所述數(shù)據(jù)文件封裝成任務(wù);計算每個任務(wù)的耗重,將所述任務(wù)存儲到主節(jié)點的任務(wù)緩沖隊列,以在所述主節(jié)點的任務(wù)緩沖隊列中形成批次任務(wù)列表;其中,所述耗重為一個任務(wù)在標準環(huán)境下處理所消耗的時間;所述標準環(huán)境為最接近生產(chǎn)環(huán)境配置的機器配置;
[0037]任務(wù)調(diào)度分發(fā)模塊從主節(jié)點的任務(wù)緩沖隊列中獲取單批次任務(wù)列表,根據(jù)所述單批次任務(wù)列表中的任務(wù)耗重、服務(wù)節(jié)點列表中的隊列長度描述和耗重速率,計算分配到各個服務(wù)節(jié)點的任務(wù)之間的特定任務(wù)耗重分配比例;將所述單批次任務(wù)列表中的任務(wù)按照所述特定任務(wù)耗重分配比例分配給各個服務(wù)節(jié)點;其中,所述特定任務(wù)耗重分配比例能夠使各個服務(wù)節(jié)點的資源得到充分利用;
[0038]任務(wù)接收模塊接收所述任務(wù)調(diào)度分發(fā)模塊分發(fā)的單批次任務(wù)列表的任務(wù),并將其存儲到服務(wù)節(jié)點的任務(wù)緩沖隊列;
[0039]任務(wù)驅(qū)動調(diào)度模塊從服務(wù)節(jié)點的任務(wù)緩沖隊列中獲取并處理分發(fā)到服務(wù)節(jié)點的單批次任務(wù)列表的任務(wù)。
[0040]可選地,所述任務(wù)驅(qū)動調(diào)度模塊包括分類模塊、泳道驅(qū)動器管理模塊、泳道驅(qū)動器、泳道集和任務(wù)線程池;
[0041]所述任務(wù)驅(qū)動調(diào)度模塊從服務(wù)節(jié)點的任務(wù)緩沖隊列中獲取并處理分發(fā)到服務(wù)節(jié)點的單批次任務(wù)列表的任務(wù),具體包括:
[0042]所述分類模塊按照特定組將所述單批次任務(wù)列表的任務(wù)分類,形成泳道列表,并將所述泳道列表提交到泳道驅(qū)動器管理模塊;所述特定組為具有共性屬性的任務(wù)構(gòu)成的組,所述泳道為單批次任務(wù)列表中具有共性維度屬性的任務(wù)集合;
[0043]所述泳道驅(qū)動器管理模塊將所述泳道列表添加到泳道集,并喚醒與泳道列表中的任務(wù)相關(guān)的泳道驅(qū)動器;所述泳道集用于管理多個泳道,提供最快的泳道定位和任務(wù)安全獲取;
[0044]所述與泳道列表中的任務(wù)相關(guān)泳道驅(qū)動器判斷實時任務(wù)并行執(zhí)行視圖中的任務(wù)線程是否達到泳道驅(qū)動器的并行上限,如果是,清理空泳道,然后執(zhí)行等待操作,如果否,執(zhí)行以下驅(qū)動過程:A、B、C、D、E、F:
[0045]A、判斷泳道集內(nèi)的預(yù)設(shè)泳道所屬的特定組的線程數(shù)是否達到特定組的并行上限,如果是,執(zhí)行步驟B,如果否,執(zhí)行步驟D ;
[0046]B、判斷泳道集內(nèi)是否還存在所述預(yù)設(shè)泳道的下一泳道,如果是,執(zhí)行步驟C,如果否,清理空泳道,然后執(zhí)行等待操作;
[0047]C、將預(yù)設(shè)泳道更新為泳道集視圖內(nèi)的所述預(yù)設(shè)泳道的下一泳道,返回執(zhí)行步驟A;
[0048]D、將任務(wù)循環(huán)從預(yù)設(shè)泳道中取出,并提交到任務(wù)線程池;并將實時任務(wù)并行執(zhí)行視圖中的預(yù)設(shè)泳道所屬的特定組的線程數(shù)和所述泳道驅(qū)動器的任務(wù)線程池的線程并行數(shù)加I,返回執(zhí)行步驟A和所述與泳道列表中的任務(wù)相關(guān)的泳道驅(qū)動器判斷實時任務(wù)并行執(zhí)行視圖中的任務(wù)線程池的線程是否達到泳道驅(qū)動器的并行上限;
[0049]E、任務(wù)線程池對任務(wù)進行處理;
[0050]F、當任務(wù)線程池將任務(wù)處理結(jié)束后,任務(wù)線程池將所述實時任務(wù)并行執(zhí)行視圖中的當前執(zhí)行的特定組的線程數(shù)減I,并返回執(zhí)行所述喚醒與泳道列表中的任務(wù)相關(guān)的泳道驅(qū)動器;
[0051]其中,所述實時任務(wù)并行執(zhí)行視圖里包括當前執(zhí)行的特定組數(shù)量以及每個當前執(zhí)行的特定組的線程數(shù);
[0052]所述泳道集視圖里包括屬于同一個泳道集內(nèi)的所有泳道,所述所有泳道在泳道集視圖內(nèi)按照進入泳道集的先后順序排列。
[0053]可選地,所述主節(jié)點還包括收集模塊,所述方法還包括:
[0054]所述收集模塊收集和監(jiān)控各服務(wù)節(jié)點的狀態(tài),形成服務(wù)節(jié)點狀態(tài)視圖和健康視圖,所述服務(wù)節(jié)點狀態(tài)視圖和健康視圖為任務(wù)調(diào)度分發(fā)提供依據(jù);
[0055]所述收集模塊還用于維護服務(wù)節(jié)點狀態(tài)視圖和健康視圖。
[0056]可選地,所述主節(jié)點還包括服務(wù)節(jié)點故障處理模塊,
[0057]所述方法還包括:
[0058]所述服務(wù)節(jié)點故障處理模塊監(jiān)控各服務(wù)節(jié)點的心跳和數(shù)據(jù)采集狀態(tài),當服務(wù)節(jié)點發(fā)生節(jié)點數(shù)據(jù)更新延遲或異常時,開始向該服務(wù)節(jié)點的端口發(fā)送檢測信號,如果檢測信號的響應(yīng)信號在預(yù)設(shè)次數(shù)和/或預(yù)設(shè)時間段內(nèi)未達標,將該服務(wù)節(jié)點視為故障服務(wù)節(jié)點,主節(jié)點開始接管該服務(wù)節(jié)點的任務(wù)列表。
[0059]可選地,所述服務(wù)節(jié)點還包括:主節(jié)點狀態(tài)監(jiān)控模塊,
[0060]所述方法還包括:
[0061]所述主節(jié)點狀態(tài)監(jiān)控模塊實時監(jiān)控主節(jié)點的狀態(tài),如果發(fā)現(xiàn)主節(jié)點的心跳異常,與主節(jié)點的通信失敗次數(shù)達到預(yù)設(shè)次數(shù)和/或通信失敗時間達到預(yù)設(shè)時間段,則確定主節(jié)點發(fā)生故障,啟動競爭主節(jié)點控制權(quán)程序,如果競爭成功則開始關(guān)閉服務(wù)節(jié)點功能模塊,啟動主節(jié)點功能模塊。
[0062]可選地,所述服務(wù)節(jié)點還包括:心跳和數(shù)據(jù)采集上報模塊,
[0063]所述方法還包括:
[0064]按照第一預(yù)設(shè)周期采集自身服務(wù)節(jié)點的心跳,按照第二預(yù)設(shè)周期采集自身服務(wù)節(jié)點的應(yīng)用數(shù)據(jù),并上傳至主節(jié)點。
[0065]相較于現(xiàn)有技術(shù),本發(fā)明具有以下有益效果:
[0066]本發(fā)明提供的分布式數(shù)據(jù)批處理系統(tǒng)和方法,主節(jié)點中的任務(wù)掃描模塊能夠計算每個任務(wù)的耗重,并且主節(jié)點中的任務(wù)調(diào)度分發(fā)模塊能夠根據(jù)單批次任務(wù)列表中的任務(wù)耗重、服務(wù)節(jié)點列表中的隊列長度描述和耗重速率,計算得到分配到各個服務(wù)節(jié)點上的任務(wù)之間的特定任務(wù)耗重分配比例,該特定任務(wù)耗重分配比例能夠使各個服務(wù)節(jié)點的資源得到充分利用并且使各個服務(wù)節(jié)點處理完分配到自身任務(wù)所消耗的時間基本一致。如此,任務(wù)調(diào)度分發(fā)模塊根據(jù)計算得到的特定任務(wù)耗重分配比例將單批次任務(wù)列表中的任務(wù)分配給各個服務(wù)節(jié)點后,由于特定任務(wù)耗重分配比例能夠使得各個服務(wù)節(jié)點的資源得到充分利用,因此,按照該特定任務(wù)耗重分配比例將任務(wù)分配給各個服務(wù)節(jié)點,能夠使得各個服務(wù)節(jié)點在處理這些任務(wù)時,其各自資源均得到充分利用,不會造成資源的浪費,并且各個服務(wù)節(jié)點能夠基本上同一時間點處理完分配到自身的任務(wù)。
[0067]另外,本發(fā)明提供的分布式數(shù)據(jù)批處理系統(tǒng)為集群系統(tǒng)架構(gòu),其根據(jù)數(shù)據(jù)量可以很方便地增加或減少服務(wù)節(jié)點的數(shù)量,而且,本發(fā)明中的服務(wù)節(jié)點可以為普通電腦,所以,本發(fā)明提供的分布式數(shù)據(jù)批處理系統(tǒng)的成本較低,而且容易維護。
【附圖說明】
[0068]為了清楚地理解本發(fā)明的【具體實施方式】,下面將描述本發(fā)明【具體實施方式】時用到的附圖做一簡要說明。顯而易見地,這些附圖僅是本發(fā)明的部分實施例,本領(lǐng)域技術(shù)人員在未付出創(chuàng)造性勞動的前提下,還可以獲得其它附圖。
[0069]圖1是本發(fā)明實施例提供的分布式數(shù)據(jù)批處理系統(tǒng)的架構(gòu)示意圖;
[0070]圖2是本發(fā)明實施例提供的主節(jié)點的結(jié)構(gòu)示意圖;
[0071 ]圖3是本發(fā)明實施例提供的服務(wù)節(jié)點的結(jié)構(gòu)示意圖;
[0072]圖4是本發(fā)明實施例提供的任務(wù)驅(qū)動調(diào)度模塊結(jié)構(gòu)示意圖;
[0073]圖5是本發(fā)明實施例提供的包括兩個集群的分布式數(shù)據(jù)批處理系統(tǒng)架構(gòu)示意圖;
[0074]圖6是本發(fā)明實施例提供的分布式數(shù)據(jù)批處理方法流程示意圖;
[0075]圖7是本發(fā)明實施例提供的步驟S609的一個具體實現(xiàn)方式流程示意圖。
【具體實施方式】
[0076]為使本發(fā)明的目的、技術(shù)方案和技術(shù)效果更加清楚、完整,下面將結(jié)合附圖對本發(fā)明的【具體實施方式】進行詳細描述。
[0077]圖1是本發(fā)明實施例提供的分布式數(shù)據(jù)批處理系統(tǒng)的架構(gòu)示意圖。如圖1所示,該分布式數(shù)據(jù)批處理系統(tǒng)架構(gòu)為集群系統(tǒng)架構(gòu),其物理結(jié)構(gòu)包括一個主節(jié)點11和多個服務(wù)節(jié)點12,主節(jié)點11和服務(wù)節(jié)點12之間可以采用TCPIP協(xié)議或數(shù)據(jù)庫DB13進行通信和數(shù)據(jù)采集共享。當采用TCPIP協(xié)議進行通信和數(shù)據(jù)采集共享時,服務(wù)節(jié)點12將數(shù)據(jù)通過TCPIP協(xié)議直接傳輸?shù)街鞴?jié)點11上。
[0078]當采用數(shù)據(jù)庫DB13進行通信和數(shù)據(jù)采集共享時,其具體實現(xiàn)方式如下:服務(wù)節(jié)點12將數(shù)據(jù)發(fā)送至數(shù)據(jù)庫DBl3,主節(jié)點11從數(shù)據(jù)庫DBl3中獲取這些數(shù)據(jù),如此實現(xiàn)主節(jié)點11和服務(wù)節(jié)點12的數(shù)據(jù)采集共享。
[0079]其中,各個服務(wù)節(jié)點12的配置可以不同,但在數(shù)據(jù)批處理過程中,需要依據(jù)服務(wù)節(jié)點本機硬件配置來設(shè)置應(yīng)用的并行參數(shù)和服務(wù)參數(shù),確保資源高效利用的同時不會過載。另外,在本發(fā)明提供的分布式數(shù)據(jù)批處理系統(tǒng)中,各個服務(wù)節(jié)點12可以并行處理任務(wù)。
[0080]需要說明的是,在本發(fā)明提供的處理系統(tǒng)中,主節(jié)點11和服務(wù)節(jié)點12均可以為普通計算機,所以,該處理系統(tǒng)的硬件成本較低。
[0081]在本發(fā)明實施例中,為了實現(xiàn)任務(wù)的調(diào)度分發(fā),如圖2所示,主節(jié)點11可以包括任務(wù)掃描模塊111和任務(wù)調(diào)度分發(fā)模塊112;
[0082]其中,任務(wù)掃描模塊111用于訪問數(shù)據(jù)文件系統(tǒng)(該數(shù)據(jù)文件系統(tǒng)可以為數(shù)據(jù)庫),從中獲取數(shù)據(jù)文件,其中,每個數(shù)據(jù)文件都有會計日、文本屬性,任務(wù)掃描模塊111在獲取到數(shù)據(jù)文件后將該數(shù)據(jù)文件封裝成任務(wù),即將數(shù)據(jù)文件生成邏輯任務(wù),并計算每個任務(wù)的耗重,計算完任務(wù)耗重后,將任務(wù)存儲到主節(jié)點的任務(wù)緩沖隊列,以在主節(jié)點的任務(wù)緩沖隊列形成批次任務(wù)列表;需要說明的是,不同會計日的同名數(shù)據(jù)文件生成的任務(wù)的耗重可能不同。其中,批次任務(wù)列表中的任務(wù)可以為由任務(wù)掃描模塊111在同一時刻獲取到的數(shù)據(jù)文件生成的任務(wù)。
[0083]需要說明的是,在本發(fā)明實施例中,耗重為一個任務(wù)在標準環(huán)境下處理所消耗的時間。在計算耗重時,并非是要在某套具體標準環(huán)境下對某一個具體文件進行測試,而只是需要一個標準速率。因此,標準環(huán)境可以為最接近生產(chǎn)環(huán)境配置的機器配置。例如:首先對文件的所側(cè)重的處理了解,如讀,寫,壓縮,復(fù)制。對于1M以下的文件,在一個標準環(huán)境下進行10000次測試,取平均速率為1.5M/S,后續(xù)基于此速率計算7.5M的耗重就是5S。標準耗重速率并非是一個單一值,而是按照文件大小區(qū)間測算的一組值。
[0084]在本發(fā)明實施例中,可以基于服務(wù)節(jié)點的健康視圖、文件大小、文件到達時間、文件優(yōu)先級等多個因素計算每個任務(wù)的耗重。其中,文件到達時間是指文件傳輸?shù)綌?shù)據(jù)文件系統(tǒng)的時間。需要指出的是,任務(wù)耗重并非任務(wù)的優(yōu)先級,而是該任務(wù)在標準環(huán)境下的運算耗時。而每個服務(wù)節(jié)點的資源不一致、并行度不一致,但是它們都有一個耗重速率,也就是每秒處理多少耗重,這個耗重速率在服務(wù)節(jié)點最開始是一個設(shè)置值,隨著任務(wù)的處理情況而自我學(xué)習(xí),保持在一個穩(wěn)定區(qū)間,體現(xiàn)著這個服務(wù)節(jié)點的處理效率。
[0085]其中,服務(wù)節(jié)點的健康視圖包括服務(wù)節(jié)點的硬件資源使用情況和任務(wù)隊列長度。其中,服務(wù)節(jié)點的任務(wù)隊列長度可以表示分發(fā)到該服務(wù)節(jié)點的任務(wù)數(shù)量。
[0086]需要說明的是,在本發(fā)明實施例中,主節(jié)點11和服務(wù)節(jié)點12可以通過數(shù)據(jù)庫DB的方式實現(xiàn)數(shù)據(jù)的采集共享,如此服務(wù)節(jié)點12將其采集到的自身服務(wù)節(jié)點狀態(tài)上傳至數(shù)據(jù)庫,主節(jié)點可以通過數(shù)據(jù)庫DB收集各個服務(wù)節(jié)點的狀態(tài),形成服務(wù)節(jié)點狀態(tài)視圖和健康視圖,為任務(wù)的調(diào)度提供依據(jù)。為了實現(xiàn)該功能,主節(jié)點11還可以包括收集模塊113,該收集模塊113用于收集和監(jiān)控各服務(wù)節(jié)點的狀態(tài),形成服務(wù)節(jié)點狀態(tài)視圖和健康視圖,所述服務(wù)節(jié)點狀態(tài)視圖和健康視圖為任務(wù)調(diào)度分發(fā)提供依據(jù),所述主節(jié)點還用于維護服務(wù)節(jié)點狀態(tài)視圖和健康視圖。其中,服務(wù)節(jié)點狀態(tài)視圖包括該服務(wù)節(jié)點的任務(wù)列表、服務(wù)節(jié)點狀態(tài)、任務(wù)處理情況和服務(wù)節(jié)點列表。在服務(wù)節(jié)點列表中有服務(wù)節(jié)點隊列長度的描述。服務(wù)節(jié)點隊列長度的描述為該服務(wù)節(jié)點上的任務(wù)數(shù)量描述。此外,主節(jié)點11還可以動態(tài)維護任務(wù)列表狀態(tài),實時更新結(jié)果,記錄日志O
[0087]在本發(fā)明實施例中,任務(wù)調(diào)度分發(fā)模塊112用于從主節(jié)點的任務(wù)緩沖隊列中獲取單批次任務(wù)列表,根據(jù)單批次任務(wù)列表中的任務(wù)耗重、服務(wù)節(jié)點列表中的隊列長度描述和耗重速率,計算分配到各個服務(wù)節(jié)點的任務(wù)之間的特定耗重分配比例;然后按照該特定耗重分配比例將該單批次任務(wù)列表中的任務(wù)分配給各個服務(wù)節(jié)點。作為示例,任務(wù)調(diào)度分發(fā)模塊112可以先將單批次任務(wù)列表中的任務(wù)進行分組,形成分組分發(fā)描述,然后再按照分組分發(fā)描述將單批次任務(wù)列表中的任務(wù)分配給各個服務(wù)節(jié)點。其中,任務(wù)調(diào)度分發(fā)模塊112基于服務(wù)節(jié)點的數(shù)量進行分組,處理系統(tǒng)中包括多少個服務(wù)節(jié)點,就將單批次任務(wù)列表中的任務(wù)分成多少個組。舉例來說,若處理系統(tǒng)中包括3個服務(wù)節(jié)點,則任務(wù)調(diào)度分發(fā)模塊就將單批次任務(wù)列表中的任務(wù)分成3組。具體為:當分組完成后,RPC模塊根據(jù)分組分發(fā)描述,按照協(xié)議將單批次任務(wù)列表的任務(wù)分發(fā)至各個服務(wù)節(jié)點。
[0088]在本發(fā)明實施例中,任務(wù)調(diào)度分發(fā)模塊的任務(wù)調(diào)度分發(fā)可以具體由RPC(Rem0teProcedure Call,遠程過程調(diào)用)模塊實現(xiàn)。
[0089]為了方便描述,在下文中,我們將這種任務(wù)調(diào)度分發(fā)機制稱之為基于耗重的分配機制。
[0090]需要說明的是,在本發(fā)明實施例中,計算得到的特定耗重分配比例不僅能夠使得各個服務(wù)節(jié)點的資源得到充分利用,而且能夠使得各個服務(wù)節(jié)點完成分配到自身的任務(wù)所花費的時間基本相同,所以,通過本發(fā)明的任務(wù)調(diào)度分發(fā)模塊112能夠使得分布式數(shù)據(jù)批處理系統(tǒng)中的各個服務(wù)節(jié)點的資源得到充分利用,而且能夠使得各個服務(wù)節(jié)點處理自身任務(wù)所花費的時長基本相同。因此,本發(fā)明提供的分布式數(shù)據(jù)批處理系統(tǒng)不會造成服務(wù)節(jié)點資源的浪費。
[0091]此外,在本發(fā)明實施例中,為了能夠及時發(fā)現(xiàn)服務(wù)節(jié)點故障以及對故障服務(wù)節(jié)點的任務(wù)進行處理,主節(jié)點11還可以包括服務(wù)節(jié)點故障處理模塊114,該服務(wù)節(jié)點故障處理模塊114用于監(jiān)控各服務(wù)節(jié)點的心跳和數(shù)據(jù)采集狀態(tài),當服務(wù)節(jié)點發(fā)生節(jié)點數(shù)據(jù)更新延遲或異常時,開始向該服務(wù)節(jié)點的端口發(fā)送檢測信號,如果檢測信號的響應(yīng)信號在預(yù)設(shè)次數(shù)和/或預(yù)設(shè)時間段內(nèi)未達標,將該服務(wù)節(jié)點視為故障服務(wù)節(jié)點,主節(jié)點開始接管該服務(wù)節(jié)點的任務(wù)列表。作為示例,服務(wù)節(jié)點故障處理模塊114可以通過服務(wù)節(jié)點狀態(tài)視圖獲知每個服務(wù)節(jié)點的狀態(tài)。當服務(wù)節(jié)點故障處理模塊114發(fā)現(xiàn)某個服務(wù)節(jié)點狀態(tài)異常時,向該服務(wù)節(jié)點以RMKRemote Method Invoke,遠程方法調(diào)用)通信的方式發(fā)送檢測信號,如果發(fā)送了3次(作為示例,上述所述的預(yù)設(shè)次數(shù)為3)檢測信號后,該服務(wù)節(jié)點均未做出響應(yīng),S卩服務(wù)節(jié)點故障處理模塊114未接收到該服務(wù)節(jié)點發(fā)出的響應(yīng)信號,則服務(wù)節(jié)點故障處理模塊114認為該服務(wù)節(jié)點為故障服務(wù)節(jié)點,主節(jié)點開始接管該服務(wù)節(jié)點的任務(wù)列表,并處理該服務(wù)節(jié)點上的任務(wù)。
[0092]此外,需要說明的是,在本發(fā)明實施例中,任務(wù)調(diào)度分發(fā)模塊基于任務(wù)耗重的分配機制進行任務(wù)的調(diào)度分發(fā)。實際上,在本技術(shù)領(lǐng)域,還可以采用輪詢分配機制或均分分配機制進行任務(wù)的調(diào)度分發(fā)。其中,輪詢分配機制就是選擇服務(wù)節(jié)點列表中最近未被調(diào)度的服務(wù)節(jié)點進行任務(wù)分配;均分分配機制就是以任務(wù)個數(shù)為單位,將任務(wù)平均分配給可用的服務(wù)節(jié)點。
[0093]但是,采用輪詢分配機制或均分分配機制均無法保障各個服務(wù)節(jié)點的資源得到充分利用并且各個服務(wù)節(jié)點的處理時長基本相等的效果。
[0094]以上為本發(fā)明實施例提供的主節(jié)點的主要結(jié)構(gòu)和功能描述。在該主節(jié)點中,其任務(wù)的調(diào)度分發(fā)基于任務(wù)耗重分配機制將任務(wù)分配給系統(tǒng)的各個服務(wù)節(jié)點。由于在該基于任務(wù)耗重分配機制中,分配到各個服務(wù)節(jié)點的任務(wù)的特定耗重分配比例是根據(jù)單批次列表中的任務(wù)耗重、服務(wù)節(jié)點列表中的隊列長度描述和耗重速率計算得到的,并且,任務(wù)耗重為處理任務(wù)的耗時,服務(wù)節(jié)點的耗重速率與該服務(wù)節(jié)點配置的性能參數(shù)相關(guān),性能參數(shù)越高,耗重速率越大。因此,在計算特定耗重分配比例時考慮了各個服務(wù)節(jié)點的性能參數(shù),因此,根據(jù)該上述方法計算得到的特定耗重分配比例能夠使得各個服務(wù)節(jié)點的資源得到充分利用,即能夠使得各個服務(wù)節(jié)點滿負荷運行,而且還能夠使得各個服務(wù)節(jié)點處理分配到自身的任務(wù)所消耗的時長基本相等。因此,通過本發(fā)明的主節(jié)點,本發(fā)明的分布式數(shù)據(jù)批處理系統(tǒng)能夠避免服務(wù)節(jié)點資源的浪費。
[0095]此外,由于本發(fā)明提供的分布式數(shù)據(jù)批處理系統(tǒng)為集群系統(tǒng)架構(gòu),其可以根據(jù)數(shù)據(jù)文件的大小可以很方便地增加或減少服務(wù)節(jié)點的數(shù)量,而且,本發(fā)明中的服務(wù)節(jié)點可以為普通電腦,所以,本發(fā)明提供的分布式數(shù)據(jù)批處理系統(tǒng)的成本較低,而且容易維護。
[0096]下面介紹服務(wù)節(jié)點的主要結(jié)構(gòu)和功能描述。
[0097]在本發(fā)明實施例中,服務(wù)節(jié)點12的主要功能是用于接收并處理主節(jié)點下發(fā)的單批次任務(wù)列表中的任務(wù)。其具體結(jié)構(gòu)如圖3所示,包括任務(wù)接收模塊121和任務(wù)驅(qū)動調(diào)度模塊122;
[0098]其中,任務(wù)接收模塊121用于接收所述主節(jié)點11分發(fā)的單批次任務(wù)列表的任務(wù),并將其存儲到服務(wù)節(jié)點的任務(wù)緩沖隊列;作為示例,任務(wù)接收模塊121可以具體為RPC模塊。
[0099]任務(wù)驅(qū)動調(diào)度模塊122用于從服務(wù)節(jié)點的任務(wù)緩沖隊列中獲取并處理主節(jié)點下發(fā)的單批次任務(wù)列表中的任務(wù)。
[0100]需要說明的是,為了使得當系統(tǒng)出現(xiàn)阻塞時,仍有空閑線程處理別類任務(wù),在本發(fā)明實施例中,對服務(wù)節(jié)點處理某類任務(wù)時在任意時刻占用的線程設(shè)置有上限。為了實現(xiàn)該目的,如圖4所示,本發(fā)明實施例所述的任務(wù)驅(qū)動調(diào)度模塊122包括以下結(jié)構(gòu):
[0101]分類模塊1221、泳道驅(qū)動器管理模塊1222、泳道驅(qū)動器1223、泳道集1224和任務(wù)線程池1225;
[0102]所述分類模塊1221用于按照特定組將所述單批次任務(wù)列表的任務(wù)分類,形成泳道列表,并將所述泳道列表提交到泳道驅(qū)動器管理模塊1222;所述特定組為具有共性屬性的任務(wù)構(gòu)成的組,所述泳道為單批次任務(wù)列表中具有共性維度屬性的任務(wù)集合;例如,服務(wù)節(jié)點NodeOl在12:00接收到一批‘A業(yè)務(wù)系統(tǒng)’的數(shù)據(jù)處理任務(wù),在該示例中,‘A業(yè)務(wù)系統(tǒng)’為該批次數(shù)據(jù)處理任務(wù)的共性維度。
[0103]所述泳道驅(qū)動器管理模塊1222用于將所述泳道列表添加到泳道集1224,并喚醒與泳道列表中的任務(wù)相關(guān)的泳道驅(qū)動器;所述泳道集1224用于管理多個泳道,提供最快的泳道定位和任務(wù)安全獲??;
[0104]所述與泳道列表中的任務(wù)相關(guān)泳道驅(qū)動器用于判斷實時任務(wù)并行執(zhí)行視圖中的任務(wù)線程是否達到泳道驅(qū)動器的并行上限,如果是,清理空泳道,然后執(zhí)行等待操作,如果否,執(zhí)行以下驅(qū)動過程^、8、(:、04、?:
[0105]A、判斷泳道集內(nèi)的預(yù)設(shè)泳道所屬的特定組的線程數(shù)是否達到特定組的并行上限,如果是,執(zhí)行步驟B,如果否,執(zhí)行步驟D ;
[0106]B、判斷泳道集內(nèi)是否還存在所述預(yù)設(shè)泳道的下一泳道,如果是,執(zhí)行步驟C,如果否,清理空泳道,然后執(zhí)行等待操作;
[0107]C、將預(yù)設(shè)泳道更新為泳道集視圖內(nèi)的所述預(yù)設(shè)泳道的下一泳道,返回執(zhí)行步驟A;
[0108]D、將任務(wù)循環(huán)從預(yù)設(shè)泳道中取出,并提交到任務(wù)線程池;并將實時任務(wù)并行執(zhí)行視圖中的預(yù)設(shè)泳道所屬的特定組的線程數(shù)和所述泳道驅(qū)動器的任務(wù)線程池的線程并行數(shù)加I,返回執(zhí)行步驟A和所述與泳道列表中的任務(wù)相關(guān)的泳道驅(qū)動器判斷實時任務(wù)并行執(zhí)行視圖中的任務(wù)線程池的線程是否達到泳道驅(qū)動器的并行上限;
[0109]E、任務(wù)線程池對任務(wù)進行處理;
[0110]F、當任務(wù)線程池將任務(wù)處理結(jié)束后,任務(wù)線程池將所述實時任務(wù)并行執(zhí)行視圖中的當前執(zhí)行的特定組的線程數(shù)減I,并返回執(zhí)行所述喚醒與泳道列表中的任務(wù)相關(guān)的泳道驅(qū)動器;
[0111]其中,所述實時任務(wù)并行執(zhí)行視圖里包括當前執(zhí)行的特定組數(shù)量以及每個當前執(zhí)行的特定組的線程數(shù);
[0112]所述泳道集視圖里包括屬于同一個泳道集內(nèi)的所有泳道,所述所有泳道在泳道集視圖內(nèi)按照進入泳道集的先后順序排列。
[0113]作為示例,預(yù)設(shè)泳道可以為最先進入泳道集的泳道。需要說明的是,在本發(fā)明實施例中,與泳道列表中的任務(wù)相關(guān)泳道驅(qū)動器可以按照先進先出的規(guī)則處理泳道集中的各個泳道。即先進入泳道集的泳道先處理。
[0114]通過圖4所示的任務(wù)驅(qū)動調(diào)度模塊能夠使得在任意時刻,處理某個特定組中的任務(wù)占用的線程存在上限,而不能占用任務(wù)線程池內(nèi)的所有線程,如此,能夠?qū)崿F(xiàn)當系統(tǒng)出現(xiàn)阻塞時,仍有空閑線程處理其它特定組內(nèi)的任務(wù)。
[0115]此外,為了實現(xiàn)對主節(jié)點狀態(tài)的監(jiān)控,上述服務(wù)節(jié)點還可以包括:主節(jié)點狀態(tài)監(jiān)控模塊123,該主節(jié)點狀態(tài)監(jiān)控模塊123實時監(jiān)控主節(jié)點的狀態(tài),如果發(fā)現(xiàn)主節(jié)點的心跳異常,與主節(jié)點的通信失敗次數(shù)達到預(yù)設(shè)次數(shù)和/或通信失敗時間達到預(yù)設(shè)時間段,則確定主節(jié)點發(fā)生故障,啟動競爭主節(jié)點控制權(quán)程序,如果競爭成功則開始關(guān)閉服務(wù)節(jié)點功能模塊,啟動主節(jié)點功能模塊。
[0116]進一步地,為了實現(xiàn)服務(wù)節(jié)點與主節(jié)點之間的數(shù)據(jù)共享,上述服務(wù)節(jié)點還可以包括:心跳和數(shù)據(jù)模塊124,用于按照第一預(yù)設(shè)周期采集自身服務(wù)節(jié)點的心跳,按照第二預(yù)設(shè)周期采集自身服務(wù)節(jié)點的應(yīng)用數(shù)據(jù),并上傳至主節(jié)點或數(shù)據(jù)庫。如此,主節(jié)點能夠?qū)崟r獲取到服務(wù)節(jié)點的狀態(tài),利用該獲取到的服務(wù)節(jié)點狀態(tài),實時維護服務(wù)節(jié)點狀態(tài)視圖和健康視圖。
[0117]以上為本發(fā)明實施例提供的分布式數(shù)據(jù)批處理系統(tǒng)的【具體實施方式】。從以上描述可知,本發(fā)明提供的分布式數(shù)據(jù)批處理系統(tǒng)為集群架構(gòu),且上述實施例僅示例出了一個集群。作為本發(fā)明實施例的擴展,本發(fā)明提供的分布式數(shù)據(jù)批處理系統(tǒng)還可以由多個集群組成。即分布式數(shù)據(jù)批處理系統(tǒng)可以由群組組成。具體參見圖5。圖5示出了由兩個物理集群組成的分布式數(shù)據(jù)批處理系統(tǒng)架構(gòu)示意圖。如圖5所示,該系統(tǒng)架構(gòu)包括第一物理集群51、第二物理集群52、數(shù)據(jù)庫53以及統(tǒng)一配置管理端54。其中,第一物理集群51或第二物理集群52可以為上述實施例所述的分布式數(shù)據(jù)批處理系統(tǒng)架構(gòu)。統(tǒng)一配置管理端44將待處理數(shù)據(jù)發(fā)送至數(shù)據(jù)庫53,第一物理集群51和第二物理集群52分別從數(shù)據(jù)庫53中獲取到由統(tǒng)一配置管理端分配到與其對應(yīng)的數(shù)據(jù)文件,然后分別按照上述分布式數(shù)據(jù)批處理系統(tǒng)的處理方式對數(shù)據(jù)文件進行處理。
[0118]在本發(fā)明實施例中,根據(jù)不同的應(yīng)用場景,集群群組的產(chǎn)生是為了實現(xiàn)邏輯的隔離,或者是物理的隔離如國內(nèi)數(shù)據(jù)和海外數(shù)據(jù)。群組內(nèi)的集群之間可以實現(xiàn)數(shù)據(jù)的歸集或轉(zhuǎn)移調(diào)度,從而完成數(shù)據(jù)統(tǒng)一配置管理。
[0119]基于上述實施例提供的分布式數(shù)據(jù)批處理系統(tǒng),本發(fā)明還提供了分布式數(shù)據(jù)批處理方法的【具體實施方式】,具體參見以下實施例。
[0120]圖6是本發(fā)明實施例提供的分布式數(shù)據(jù)批處理方法流程示意圖。如圖6所示,該處理方法包括以下步驟:
[0121]S601、任務(wù)掃描模塊獲取數(shù)據(jù)文件,將該數(shù)據(jù)文件封裝成任務(wù):
[0122]具體地,任務(wù)掃描模塊訪問數(shù)據(jù)文件系統(tǒng)及任務(wù)定義,從數(shù)據(jù)文件系統(tǒng)中獲取數(shù)據(jù)文件,根據(jù)任務(wù)定義將數(shù)據(jù)文件封裝成任務(wù)。
[0123]S602、任務(wù)掃描模塊計算每個任務(wù)的耗重:
[0124]具體地,任務(wù)掃描模塊可以并行計算每個任務(wù)的耗重。
[0125]S603、任務(wù)掃描模塊將任務(wù)存儲到主節(jié)點的任務(wù)緩沖隊列,以在主節(jié)點的任務(wù)緩沖隊列中形成批次任務(wù)列表:
[0126]具體地,任務(wù)耗重計算完成后,任務(wù)掃描模塊將任務(wù)存儲到主節(jié)點的任務(wù)緩沖隊列,以在主節(jié)點的任務(wù)緩沖隊列中形成批次任務(wù)列表。
[0127]S604、任務(wù)調(diào)度分發(fā)模塊從主節(jié)點的任務(wù)緩沖隊列中獲取單批次任務(wù)列表。
[0128]S605、任務(wù)調(diào)度分發(fā)模塊根據(jù)該單批次任務(wù)列表中的任務(wù)耗重、服務(wù)節(jié)點列表中的隊列長度描述和耗重速率,計算分配到各個服務(wù)節(jié)點的任務(wù)的特定任務(wù)耗重分配比例:
[0129]需要說明的是,與分配到各個服務(wù)節(jié)點的任務(wù)的特定任務(wù)耗重分配比例的計算相關(guān)的因素包括:服務(wù)節(jié)點任務(wù)緩沖隊列耗重合計、服務(wù)節(jié)點耗重速率、任務(wù)固有屬性(文件大小、任務(wù)類型、)和任務(wù)批次。
[0130]S606、任務(wù)調(diào)度分發(fā)模塊根據(jù)服務(wù)節(jié)點列表中的隊列長度描述將單批次任務(wù)列表中的任務(wù)進行分組,形成分組分發(fā)描述。
[0131]S607、任務(wù)調(diào)度分發(fā)模塊根據(jù)分組分發(fā)描述將單批次任務(wù)列表中的任務(wù)按照特定任務(wù)耗重分配比例分配給各個服務(wù)節(jié)點:
[0132]需要說明的是,任務(wù)調(diào)度分發(fā)模塊中可以包括RPC模塊。本步驟具體可以通過RPC模塊實現(xiàn)。具體為:RPC模塊根據(jù)分組分發(fā)描述將單批次任務(wù)列表中的任務(wù)按照協(xié)議分配給各個服務(wù)節(jié)點。
[0133]S608、各服務(wù)節(jié)點的任務(wù)接收模塊接收分發(fā)至自身的單批次任務(wù)列表中的任務(wù),將接收到的任務(wù)存儲到服務(wù)節(jié)點的任務(wù)緩沖隊列:
[0134]本步驟具體可以為:服務(wù)節(jié)點上的任務(wù)接收模塊接收分發(fā)至服務(wù)節(jié)點的單批次任務(wù)列表中的任務(wù),將接收到的任務(wù)存儲到服務(wù)節(jié)點的任務(wù)緩沖隊列。需要說明的是,服務(wù)節(jié)點上的任務(wù)接收模塊可以包括RPC接收模塊。
[0135]S609、各服務(wù)節(jié)點的任務(wù)驅(qū)動調(diào)度模塊從任務(wù)緩沖隊列中獲取并處理單批次任務(wù)列表中的任務(wù):
[0136]需要說明的是,本步驟具體可以通過任務(wù)驅(qū)動調(diào)度模塊實現(xiàn)。具體為:任務(wù)驅(qū)動調(diào)度模塊從服務(wù)節(jié)點的任務(wù)緩沖隊列中獲取單批次任務(wù)列表中的任務(wù),并按照一定的規(guī)則如并行上限控制、先到先處理策略處理單批次任務(wù)列表中的任務(wù)。采用并行上限控制策略能夠使得處理系統(tǒng)出現(xiàn)阻塞時,仍有空閑線程處理別類任務(wù)。
[0137]此外,作為本發(fā)明的一具體實施例,在本發(fā)明實施例的處理方法中,主節(jié)點和各個服務(wù)節(jié)點之間還實時進行數(shù)據(jù)通信。具體為主節(jié)點可以執(zhí)行以下操作:
[0138]主節(jié)點的收集模塊收集監(jiān)控各服務(wù)節(jié)點的狀態(tài),并根據(jù)收集監(jiān)控到的服務(wù)節(jié)點狀態(tài)維護服務(wù)節(jié)點狀態(tài)視圖和健康視圖。
[0139]另外,主節(jié)點還可以執(zhí)行以下操作:
[0140]主節(jié)點的服務(wù)節(jié)點故障處理模塊實時監(jiān)控各服務(wù)節(jié)點的心跳和數(shù)據(jù)采集狀態(tài),當服務(wù)節(jié)點發(fā)生節(jié)點數(shù)據(jù)更新延遲或異常時,開始向該服務(wù)節(jié)點的端口發(fā)送檢測信號,如果檢測信號的相應(yīng)信號在預(yù)設(shè)次數(shù)和/或預(yù)設(shè)時間段內(nèi)為達標,將該服務(wù)節(jié)點視為故障服務(wù)節(jié)點,主節(jié)點開始接管該故障服務(wù)節(jié)點的任務(wù)列表,處理該故障服務(wù)節(jié)點的任務(wù)。
[0141]服務(wù)節(jié)點可以執(zhí)行以下操作:
[0142]服務(wù)節(jié)點的主節(jié)點狀態(tài)監(jiān)控模塊實時監(jiān)控主節(jié)點的狀態(tài),如果發(fā)現(xiàn)主節(jié)點的心跳異常,與主節(jié)點的通信失敗次數(shù)達到預(yù)設(shè)次數(shù)和/或通信失敗時間達到預(yù)設(shè)時間段,則確定主節(jié)點發(fā)生故障,啟動競爭主節(jié)點控制權(quán)程序,如果競爭成功則開始關(guān)閉服務(wù)節(jié)點功能模塊,啟動主節(jié)點功能模塊。
[0143]此外,服務(wù)節(jié)點還可以執(zhí)行以下操作:
[0144]心跳和數(shù)據(jù)模塊按照第一預(yù)設(shè)周期采集自身服務(wù)節(jié)點的心跳,按照第二預(yù)設(shè)周期采集自身服務(wù)節(jié)點的應(yīng)用數(shù)據(jù),并上傳至主節(jié)點或數(shù)據(jù)庫。如此,主節(jié)點能夠?qū)崟r獲取到服務(wù)節(jié)點的狀態(tài),利用該獲取到的服務(wù)節(jié)點狀態(tài),實時維護服務(wù)節(jié)點狀態(tài)視圖和健康視圖。
[0145]以上為本發(fā)明實施例提供的分布式數(shù)據(jù)批處理方法的【具體實施方式】。通過該處理方法,能夠使得各個服務(wù)節(jié)點的資源得到充分利用,并且各個服務(wù)節(jié)點處理完分配到自身的任務(wù)所花費的時長基本相等。
[0146]進一步地,為了使得當系統(tǒng)出現(xiàn)阻塞時,服務(wù)節(jié)點上仍有空閑線程處理其它特定組內(nèi)的任務(wù),作為本發(fā)明的一個具體實施例,上述步驟S609的具體實現(xiàn)方式可以通過圖4所示的任務(wù)驅(qū)動調(diào)度模塊122實現(xiàn),其具體實現(xiàn)過程如圖7所示。其包括以下步驟:
[0147]S701、分類模塊1221按照特定組將單批次任務(wù)列表中的任務(wù)分類,形成泳道列表,并將該泳道列表提交到泳道驅(qū)動器管理模塊1222。
[0148]S702、泳道驅(qū)動器管理模塊1222將泳道列表添加到泳道集1224。
[0149]S703、泳道驅(qū)動器管理模塊1222喚醒與泳道列表中的任務(wù)相關(guān)的泳道驅(qū)動器。
[0150]S704、所述與泳道列表中的任務(wù)相關(guān)泳道驅(qū)動器根據(jù)實時任務(wù)并行執(zhí)行視圖判斷任務(wù)線程池的線程是否達到泳道驅(qū)動器的并行上限,如果是,執(zhí)行步驟S705,如果否,執(zhí)行步驟S706。
[0151]S705、清理空泳道,然后執(zhí)行等待操作。
[0152]S706、與泳道列表中的任務(wù)相關(guān)泳道驅(qū)動器執(zhí)行以下操作:
[0153]A、判斷泳道集內(nèi)的預(yù)設(shè)泳道所屬的特定組的線程數(shù)是否達到特定組的并行上限,如果是,執(zhí)行步驟B,如果否,執(zhí)行步驟D ;
[0154]B、判斷泳道集內(nèi)是否還存在所述預(yù)設(shè)泳道的下一泳道,如果是,執(zhí)行步驟C,如果否,清理空泳道,然后執(zhí)行等待操作;
[0155]C、將預(yù)設(shè)泳道更新為泳道集視圖內(nèi)的所述預(yù)設(shè)泳道的下一泳道,返回執(zhí)行步驟A;
[0156]D、將任務(wù)循環(huán)從預(yù)設(shè)泳道中取出,并提交到任務(wù)線程池;并將實時任務(wù)并行執(zhí)行視圖中的預(yù)設(shè)泳道所屬的特定組的線程數(shù)和所述泳道驅(qū)動器的任務(wù)線程池的線程并行數(shù)加I,返回執(zhí)行步驟A和所述與泳道列表中的任務(wù)相關(guān)的泳道驅(qū)動器判斷實時任務(wù)并行執(zhí)行視圖中的任務(wù)線程池的線程是否達到泳道驅(qū)動器的并行上限;
[0157]E、任務(wù)線程池對任務(wù)進行處理;
[0158]F、當任務(wù)線程池將任務(wù)處理結(jié)束后,任務(wù)線程池將所述實時任務(wù)并行執(zhí)行視圖中的當前執(zhí)行的特定組的線程數(shù)減I,并返回執(zhí)行所述喚醒與泳道列表中的任務(wù)相關(guān)的泳道驅(qū)動器。
[0159]以上為本發(fā)明的優(yōu)選實施例。雖然本發(fā)明已以較佳實施例披露如上,然而并非用以限定本發(fā)明。任何熟悉本領(lǐng)域的技術(shù)人員,在不脫離本發(fā)明技術(shù)方案范圍情況下,都可利用上述揭示的方法和技術(shù)內(nèi)容對本發(fā)明技術(shù)方案作出許多可能的變動和修飾,或修改為等同變化的等效實施例。因此,凡是未脫離本發(fā)明技術(shù)方案的內(nèi)容,依據(jù)本發(fā)明的技術(shù)實質(zhì)對以上實施例所做的任何簡單修改、等同變化及修飾,均仍屬于本發(fā)明技術(shù)方案保護的范圍內(nèi)。
【主權(quán)項】
1.一種分布式數(shù)據(jù)批處理系統(tǒng),其特征在于,包括:一個主節(jié)點和多個服務(wù)節(jié)點; 其中,所述主節(jié)點包括:任務(wù)掃描模塊和任務(wù)調(diào)度分發(fā)模塊; 所述任務(wù)掃描模塊用于獲取數(shù)據(jù)文件,將所述數(shù)據(jù)文件封裝成任務(wù);計算每個任務(wù)的耗重,將所述任務(wù)存儲到主節(jié)點的任務(wù)緩沖隊列,以在所述主節(jié)點的任務(wù)緩沖隊列中形成批次任務(wù)列表;其中,所述耗重為一個任務(wù)在標準環(huán)境下處理所消耗的時間;所述標準環(huán)境為最接近生產(chǎn)環(huán)境配置的機器配置; 所述任務(wù)調(diào)度分發(fā)模塊用于從主節(jié)點的任務(wù)緩沖隊列中獲取單批次任務(wù)列表,根據(jù)所述單批次任務(wù)列表中的任務(wù)耗重、服務(wù)節(jié)點列表中的隊列長度描述和耗重速率,計算分配到各個服務(wù)節(jié)點的任務(wù)之間的特定任務(wù)耗重分配比例;將所述單批次任務(wù)列表中的任務(wù)按照所述特定任務(wù)耗重分配比例分配給各個服務(wù)節(jié)點;其中,所述特定任務(wù)耗重分配比例能夠使各個服務(wù)節(jié)點的資源得到充分利用; 所述服務(wù)節(jié)點包括任務(wù)接收模塊和任務(wù)驅(qū)動調(diào)度模塊; 所述任務(wù)接收模塊用于接收所述任務(wù)調(diào)度分發(fā)模塊分發(fā)的單批次任務(wù)列表的任務(wù),并將其存儲到服務(wù)節(jié)點的任務(wù)緩沖隊列; 所述任務(wù)驅(qū)動調(diào)度模塊用于從服務(wù)節(jié)點的任務(wù)緩沖隊列中獲取并處理分發(fā)到服務(wù)節(jié)點的單批次任務(wù)列表的任務(wù)。2.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述任務(wù)驅(qū)動調(diào)度模塊包括分類模塊、泳道驅(qū)動器管理模塊、泳道驅(qū)動器、泳道集和任務(wù)線程池; 所述分類模塊用于按照特定組將所述單批次任務(wù)列表的任務(wù)分類,形成泳道列表,并將所述泳道列表提交到泳道驅(qū)動器管理模塊;所述特定組為具有共性屬性的任務(wù)構(gòu)成的組,所述泳道為單批次任務(wù)列表中具有共性維度屬性的任務(wù)集合; 所述泳道驅(qū)動器管理模塊用于將所述泳道列表添加到泳道集,并喚醒與泳道列表中的任務(wù)相關(guān)的泳道驅(qū)動器;所述泳道集用于管理多個泳道,提供最快的泳道定位和任務(wù)安全獲??; 所述與泳道列表中的任務(wù)相關(guān)泳道驅(qū)動器用于判斷實時任務(wù)并行執(zhí)行視圖中的任務(wù)線程是否達到泳道驅(qū)動器的并行上限,如果是,清理空泳道,然后執(zhí)行等待操作,如果否,執(zhí)行以下驅(qū)動過程:A、B、C、D、E、F: A、判斷泳道集內(nèi)的預(yù)設(shè)泳道所屬的特定組的線程數(shù)是否達到特定組的并行上限,如果是,執(zhí)行步驟B,如果否,執(zhí)行步驟D; B、判斷泳道集內(nèi)是否還存在所述預(yù)設(shè)泳道的下一泳道,如果是,執(zhí)行步驟C,如果否,清理空泳道,然后執(zhí)行等待操作; C、將預(yù)設(shè)泳道更新為泳道集視圖內(nèi)的所述預(yù)設(shè)泳道的下一泳道,返回執(zhí)行步驟A; D、將任務(wù)循環(huán)從預(yù)設(shè)泳道中取出,并提交到任務(wù)線程池;并將實時任務(wù)并行執(zhí)行視圖中的預(yù)設(shè)泳道所屬的特定組的線程數(shù)和所述泳道驅(qū)動器的任務(wù)線程池的線程并行數(shù)加I,返回執(zhí)行步驟A和所述與泳道列表中的任務(wù)相關(guān)的泳道驅(qū)動器判斷實時任務(wù)并行執(zhí)行視圖中的任務(wù)線程池的線程是否達到泳道驅(qū)動器的并行上限; E、任務(wù)線程池對任務(wù)進彳丁處理; F、當任務(wù)線程池將任務(wù)處理結(jié)束后,任務(wù)線程池將所述實時任務(wù)并行執(zhí)行視圖中的當前執(zhí)行的特定組的線程數(shù)減I,并返回執(zhí)行所述喚醒與泳道列表中的任務(wù)相關(guān)的泳道驅(qū)動器; 其中,所述實時任務(wù)并行執(zhí)行視圖里包括當前執(zhí)行的特定組數(shù)量以及每個當前執(zhí)行的特定組的線程數(shù); 所述泳道集視圖里包括屬于同一個泳道集內(nèi)的所有泳道,所述所有泳道在泳道集視圖內(nèi)按照進入泳道集的先后順序排列。3.根據(jù)權(quán)利要求1或2所述的系統(tǒng),其特征在于,所述主節(jié)點還包括收集模塊,所述收集模塊用于收集和監(jiān)控各服務(wù)節(jié)點的狀態(tài),形成服務(wù)節(jié)點狀態(tài)視圖和健康視圖,所述服務(wù)節(jié)點狀態(tài)視圖和健康視圖為任務(wù)調(diào)度分發(fā)提供依據(jù); 所述收集模塊還用于維護服務(wù)節(jié)點狀態(tài)視圖和健康視圖。4.根據(jù)權(quán)利要求1或2所述的系統(tǒng),其特征在于,所述主節(jié)點還包括服務(wù)節(jié)點故障處理模塊,所述服務(wù)節(jié)點故障處理模塊用于監(jiān)控各服務(wù)節(jié)點的心跳和數(shù)據(jù)采集狀態(tài),當服務(wù)節(jié)點發(fā)生節(jié)點數(shù)據(jù)更新延遲或異常時,開始向該服務(wù)節(jié)點的端口發(fā)送檢測信號,如果檢測信號的響應(yīng)信號在預(yù)設(shè)次數(shù)和/或預(yù)設(shè)時間段內(nèi)未達標,將該服務(wù)節(jié)點視為故障服務(wù)節(jié)點,主節(jié)點開始接管該服務(wù)節(jié)點的任務(wù)列表。5.根據(jù)權(quán)利要求1或2所述的系統(tǒng),其特征在于,所述服務(wù)節(jié)點還包括:主節(jié)點狀態(tài)監(jiān)控模塊,所述主節(jié)點狀態(tài)監(jiān)控模塊用于實時監(jiān)控主節(jié)點的狀態(tài),如果發(fā)現(xiàn)主節(jié)點的心跳異常,與主節(jié)點的通信失敗次數(shù)達到預(yù)設(shè)次數(shù)和/或通信失敗時間達到預(yù)設(shè)時間段,則確定主節(jié)點發(fā)生故障,啟動競爭主節(jié)點控制權(quán)程序,如果競爭成功則開始關(guān)閉服務(wù)節(jié)點功能模塊,啟動主節(jié)點功能模塊。6.根據(jù)權(quán)利要求1或2所述的系統(tǒng),其特征在于,所述服務(wù)節(jié)點還包括: 心跳和數(shù)據(jù)采集上報模塊,用于按照第一預(yù)設(shè)周期采集自身服務(wù)節(jié)點的心跳,按照第二預(yù)設(shè)周期采集自身服務(wù)節(jié)點的應(yīng)用數(shù)據(jù),并上傳至主節(jié)點。7.—種分布式數(shù)據(jù)批處理方法,其特征在于,所述方法基于的分布式數(shù)據(jù)批處理系統(tǒng)包括一個主節(jié)點和多個服務(wù)節(jié)點,所述主節(jié)點包括任務(wù)掃描模塊和任務(wù)調(diào)度分發(fā)模塊;所述服務(wù)節(jié)點包括任務(wù)接收模塊和任務(wù)驅(qū)動調(diào)度模塊; 所述方法包括: 任務(wù)掃描模塊獲取數(shù)據(jù)文件,將所述數(shù)據(jù)文件封裝成任務(wù);計算每個任務(wù)的耗重,將所述任務(wù)存儲到主節(jié)點的任務(wù)緩沖隊列,以在所述主節(jié)點的任務(wù)緩沖隊列中形成批次任務(wù)列表;其中,所述耗重為一個任務(wù)在標準環(huán)境下處理所消耗的時間;所述標準環(huán)境為最接近生產(chǎn)環(huán)境配置的機器配置; 任務(wù)調(diào)度分發(fā)模塊從主節(jié)點的任務(wù)緩沖隊列中獲取單批次任務(wù)列表,根據(jù)所述單批次任務(wù)列表中的任務(wù)耗重、服務(wù)節(jié)點列表中的隊列長度描述和耗重速率,計算分配到各個服務(wù)節(jié)點的任務(wù)之間的特定任務(wù)耗重分配比例;將所述單批次任務(wù)列表中的任務(wù)按照所述特定任務(wù)耗重分配比例分配給各個服務(wù)節(jié)點;其中,所述特定任務(wù)耗重分配比例能夠使各個服務(wù)節(jié)點的資源得到充分利用; 任務(wù)接收模塊接收所述任務(wù)調(diào)度分發(fā)模塊分發(fā)的單批次任務(wù)列表的任務(wù),并將其存儲到服務(wù)節(jié)點的任務(wù)緩沖隊列; 任務(wù)驅(qū)動調(diào)度模塊從服務(wù)節(jié)點的任務(wù)緩沖隊列中獲取并處理分發(fā)到服務(wù)節(jié)點的單批次任務(wù)列表的任務(wù)。8.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述任務(wù)驅(qū)動調(diào)度模塊包括分類模塊、泳道驅(qū)動器管理模塊、泳道驅(qū)動器、泳道集和任務(wù)線程池; 所述任務(wù)驅(qū)動調(diào)度模塊從服務(wù)節(jié)點的任務(wù)緩沖隊列中獲取并處理分發(fā)到服務(wù)節(jié)點的單批次任務(wù)列表的任務(wù),具體包括: 所述分類模塊按照特定組將所述單批次任務(wù)列表的任務(wù)分類,形成泳道列表,并將所述泳道列表提交到泳道驅(qū)動器管理模塊;所述特定組為具有共性屬性的任務(wù)構(gòu)成的組,所述泳道為單批次任務(wù)列表中具有共性維度屬性的任務(wù)集合; 所述泳道驅(qū)動器管理模塊將所述泳道列表添加到泳道集,并喚醒與泳道列表中的任務(wù)相關(guān)的泳道驅(qū)動器;所述泳道集用于管理多個泳道,提供最快的泳道定位和任務(wù)安全獲取; 所述與泳道列表中的任務(wù)相關(guān)泳道驅(qū)動器判斷實時任務(wù)并行執(zhí)行視圖中的任務(wù)線程是否達到泳道驅(qū)動器的并行上限,如果是,清理空泳道,然后執(zhí)行等待操作,如果否,執(zhí)行以下驅(qū)動過程:A、B、C、D、E、F: A、判斷泳道集內(nèi)的預(yù)設(shè)泳道所屬的特定組的線程數(shù)是否達到特定組的并行上限,如果是,執(zhí)行步驟B,如果否,執(zhí)行步驟D; B、判斷泳道集內(nèi)是否還存在所述預(yù)設(shè)泳道的下一泳道,如果是,執(zhí)行步驟C,如果否,清理空泳道,然后執(zhí)行等待操作; C、將預(yù)設(shè)泳道更新為泳道集視圖內(nèi)的所述預(yù)設(shè)泳道的下一泳道,返回執(zhí)行步驟A; D、將任務(wù)循環(huán)從預(yù)設(shè)泳道中取出,并提交到任務(wù)線程池;并將實時任務(wù)并行執(zhí)行視圖中的預(yù)設(shè)泳道所屬的特定組的線程數(shù)和所述泳道驅(qū)動器的任務(wù)線程池的線程并行數(shù)加I,返回執(zhí)行步驟A和所述與泳道列表中的任務(wù)相關(guān)的泳道驅(qū)動器判斷實時任務(wù)并行執(zhí)行視圖中的任務(wù)線程池的線程是否達到泳道驅(qū)動器的并行上限; E、任務(wù)線程池對任務(wù)進彳丁處理; F、當任務(wù)線程池將任務(wù)處理結(jié)束后,任務(wù)線程池將所述實時任務(wù)并行執(zhí)行視圖中的當前執(zhí)行的特定組的線程數(shù)減I,并返回執(zhí)行所述喚醒與泳道列表中的任務(wù)相關(guān)的泳道驅(qū)動器; 其中,所述實時任務(wù)并行執(zhí)行視圖里包括當前執(zhí)行的特定組數(shù)量以及每個當前執(zhí)行的特定組的線程數(shù); 所述泳道集視圖里包括屬于同一個泳道集內(nèi)的所有泳道,所述所有泳道在泳道集視圖內(nèi)按照進入泳道集的先后順序排列。9.根據(jù)權(quán)利要求7或8所述的方法,其特征在于,所述主節(jié)點還包括收集模塊,所述方法還包括: 所述收集模塊收集和監(jiān)控各服務(wù)節(jié)點的狀態(tài),形成服務(wù)節(jié)點狀態(tài)視圖和健康視圖,所述服務(wù)節(jié)點狀態(tài)視圖和健康視圖為任務(wù)調(diào)度分發(fā)提供依據(jù); 所述收集模塊還用于維護服務(wù)節(jié)點狀態(tài)視圖和健康視圖。10.根據(jù)權(quán)利要求7或8所述的方法,其特征在于,所述主節(jié)點還包括服務(wù)節(jié)點故障處理模塊, 所述方法還包括: 所述服務(wù)節(jié)點故障處理模塊監(jiān)控各服務(wù)節(jié)點的心跳和數(shù)據(jù)采集狀態(tài),當服務(wù)節(jié)點發(fā)生節(jié)點數(shù)據(jù)更新延遲或異常時,開始向該服務(wù)節(jié)點的端口發(fā)送檢測信號,如果檢測信號的響應(yīng)信號在預(yù)設(shè)次數(shù)和/或預(yù)設(shè)時間段內(nèi)未達標,將該服務(wù)節(jié)點視為故障服務(wù)節(jié)點,主節(jié)點開始接管該服務(wù)節(jié)點的任務(wù)列表。11.根據(jù)權(quán)利要求7或8所述的方法,其特征在于,所述服務(wù)節(jié)點還包括:主節(jié)點狀態(tài)監(jiān)控模塊, 所述方法還包括: 所述主節(jié)點狀態(tài)監(jiān)控模塊實時監(jiān)控主節(jié)點的狀態(tài),如果發(fā)現(xiàn)主節(jié)點的心跳異常,與主節(jié)點的通信失敗次數(shù)達到預(yù)設(shè)次數(shù)和/或通信失敗時間達到預(yù)設(shè)時間段,則確定主節(jié)點發(fā)生故障,啟動競爭主節(jié)點控制權(quán)程序,如果競爭成功則開始關(guān)閉服務(wù)節(jié)點功能模塊,啟動主節(jié)點功能模塊。12.根據(jù)權(quán)利要求7或8所述的方法,其特征在于,所述服務(wù)節(jié)點還包括:心跳和數(shù)據(jù)采集上報模塊, 所述方法還包括: 按照第一預(yù)設(shè)周期采集自身服務(wù)節(jié)點的心跳,按照第二預(yù)設(shè)周期采集自身服務(wù)節(jié)點的應(yīng)用數(shù)據(jù),并上傳至主節(jié)點。
【文檔編號】G06F9/48GK105912401SQ201610218574
【公開日】2016年8月31日
【申請日】2016年4月8日
【發(fā)明人】羅焱學(xué), 王寶義, 安莉
【申請人】中國銀行股份有限公司