esult均初始化為0,然后將變量result通過公式(1)與標(biāo)識符Sa 進(jìn)行異或運算:
[0101] result = Sa XOR result公式(I)
[0102] S62.若處理任務(wù)分布式子網(wǎng)絡(luò)中ETL節(jié)點k之后無用于對輸入數(shù)據(jù)A進(jìn)行處理 的ETL節(jié)點,如圖4(a)所示,則ETL節(jié)點k處理完成后,變量result再次通過公式(1)與 標(biāo)識符Sa進(jìn)行異或運算,跳轉(zhuǎn)步驟S63;
[0103] 若處理任務(wù)分布式子網(wǎng)絡(luò)中ETL節(jié)點k之后有用于對輸入數(shù)據(jù)A進(jìn)行處理的ETL 節(jié)點,如圖4(b)所示,則ETL節(jié)點k生成輸入數(shù)據(jù)A的一個或多個中間輸出值U 1, A2, A3,… ,AN},并將中間輸出值U1, A2, A3,…,AJ發(fā)送給后續(xù)ETL節(jié)點,每個An表示ETL節(jié)點k的一 個中間輸出值,為每個中間輸出值A(chǔ)N生成一個隨機(jī)的64位標(biāo)識符,如圖4(c)所示,并將 標(biāo)識符I記錄到該處理任務(wù)分布式子網(wǎng)絡(luò)的標(biāo)識序列中,變量result的值通過公式(2) 進(jìn)行更新:
[0104] result=resultXORSuXORS...,XOR 公式(2)
[0105] ETL節(jié)點k處理完成后,變量result再次與標(biāo)識符3&通過公式(1)進(jìn)行異或運 算;
[0106] S63.每過間隔時間t檢測一次變量result的值:
[0107] 若變量result的值為0,則輸入數(shù)據(jù)A被完全處理;
[0108] 若變量result的值不為0,則經(jīng)過超時時長p后再次檢測該result的值,若該變 量result的值仍不為0,則輸入數(shù)據(jù)A未被完全處理;間隔時間t為20毫秒~40毫秒。超 時時長為20秒~30秒。
[0109] 所述ETL節(jié)點一直保持運行狀態(tài),除非主動停止該ETL節(jié)點。所述ETL節(jié)點用于 運行對應(yīng)的ETL轉(zhuǎn)換單元。
【主權(quán)項】
1. 一種實時ETL系統(tǒng),其特征在于:包括ETL客戶端、分布式數(shù)據(jù)緩存隊列、分布式狀 態(tài)管理機(jī)和ETL群集; 所述ETL客戶端,用于設(shè)計ETL流程、測試ETL流程和發(fā)布ETL流程; 所述分布式數(shù)據(jù)緩存隊列,用于緩存輸入數(shù)據(jù); 所述分布式狀態(tài)管理機(jī),用于存儲系統(tǒng)狀態(tài)信息; 所述ETL群集,用于按行從數(shù)據(jù)源獲取輸入數(shù)據(jù),并將輸入數(shù)據(jù)緩存到分布式數(shù)據(jù)緩 存隊列中,然后對輸入數(shù)據(jù)進(jìn)行處理。2. 根據(jù)權(quán)利要求1所述的一種實時ETL系統(tǒng),其特征在于:所述系統(tǒng)狀態(tài)信息包括輸 入數(shù)據(jù)的元數(shù)據(jù)信息和當(dāng)前的分布式數(shù)據(jù)緩存隊列的隊列信息。3. 根據(jù)權(quán)利要求1所述的一種實時ETL系統(tǒng),其特征在于:所述ETL群集包括多個ETL 節(jié)點,多個ETL節(jié)點組成分布式數(shù)據(jù)處理ETL網(wǎng)絡(luò),分布式數(shù)據(jù)處理ETL網(wǎng)絡(luò)包括抽取任務(wù) 分布式子網(wǎng)絡(luò)和處理任務(wù)分布式子網(wǎng)絡(luò); 所述抽取任務(wù)分布式子網(wǎng)絡(luò),用于按行從數(shù)據(jù)源中獲取輸入數(shù)據(jù),并將輸入數(shù)據(jù)緩存 到分布式數(shù)據(jù)緩存隊列; 所述處理任務(wù)分布式子網(wǎng)絡(luò),用于對輸入數(shù)據(jù)進(jìn)行處理和轉(zhuǎn)換,并輸出結(jié)果數(shù)據(jù)。4. 一種實時ETL方法,其特征在于:包括以下步驟:51. 設(shè)計和測試ETL流程,將測試合格的ETL流程以元數(shù)據(jù)的方式存儲為xml文件;52. 將測試合格的ETL流程構(gòu)造成能夠在ETL群集中運行的分布式數(shù)據(jù)處理ETL流程, 并將該分布式數(shù)據(jù)處理ETL流程發(fā)送到ETL群集; 53. ETL群集中的多個ETL節(jié)點組成分布式數(shù)據(jù)處理ETL網(wǎng)絡(luò),構(gòu)建每個數(shù)據(jù)源的分布 式數(shù)據(jù)緩存隊列,按行從數(shù)據(jù)源中獲取輸入數(shù)據(jù),將輸入數(shù)據(jù)發(fā)送到該數(shù)據(jù)源對應(yīng)的分布 式數(shù)據(jù)緩存隊列,將該分布式數(shù)據(jù)緩存隊列的隊列信息和該分布式數(shù)據(jù)緩存隊列對應(yīng)數(shù)據(jù) 源中輸入數(shù)據(jù)的元數(shù)據(jù)信息發(fā)送到分布式狀態(tài)管理機(jī);54. 從分布式數(shù)據(jù)緩存隊列中抽取輸入數(shù)據(jù),并使輸入數(shù)據(jù)流經(jīng)分布式數(shù)據(jù)處理ETL 網(wǎng)絡(luò)中的處理任務(wù)分布式子網(wǎng)絡(luò)中的所有ETL節(jié)點;55. 每條進(jìn)入分布式數(shù)據(jù)處理ETL網(wǎng)絡(luò)中的輸入數(shù)據(jù)形成一個消息樹;56. 判斷每條輸入數(shù)據(jù)是否在分布式數(shù)據(jù)處理ETL網(wǎng)絡(luò)中被完全處理: 若存在輸入數(shù)據(jù)未被完全處理,則從分布式數(shù)據(jù)緩存隊列中重新抽取該輸入數(shù)據(jù),將 該輸入數(shù)據(jù)發(fā)送到分布式數(shù)據(jù)處理ETL網(wǎng)絡(luò)中,重新處理; 若所有輸入數(shù)據(jù)均被完全處理,輸出處理完成后的結(jié)果數(shù)據(jù)。5. 根據(jù)權(quán)利要求4所述的一種實時ETL方法,其特征在于:所述步驟S2包括以下子步 驟:521. 檢測ETL流程的DAG圖中入度為O的ETL轉(zhuǎn)換單元,并將該入度為O的ETL轉(zhuǎn)換 單元歸類到輸入步驟節(jié)點集合;檢測ETL的DAG圖中出度為O的ETL轉(zhuǎn)換單元,并將該出度 為O的ETL轉(zhuǎn)換單元歸類到輸出步驟節(jié)點集合;將ETL流程的DAG圖中除入度為0、出度為 0以外的ETL轉(zhuǎn)換單元歸類到中間處理步驟節(jié)點集合;522. 從步驟Sl中的xml文件中讀取每個ETL轉(zhuǎn)換單元的元數(shù)據(jù),并構(gòu)建每個ETL轉(zhuǎn)換 單元的元數(shù)據(jù)對象;523. 根據(jù)輸入步驟節(jié)點集合中各ETL轉(zhuǎn)換單元的元數(shù)據(jù)對象和ETL流程的DAG圖中各 ETL轉(zhuǎn)換單元間的連接關(guān)系構(gòu)成抽取任務(wù)分布式子網(wǎng)絡(luò); S24.根據(jù)中間處理步驟節(jié)點集合中各ETL轉(zhuǎn)換單元的元數(shù)據(jù)對象和ETL流程的DAG圖 中各ETL轉(zhuǎn)換單元間的連接關(guān)系構(gòu)成處理任務(wù)分布式子網(wǎng)絡(luò)。6. 根據(jù)權(quán)利要求5所述的一種實時ETL方法,其特征在于:所述步驟S3還包括:將步 驟S22中的元數(shù)據(jù)存儲在分布式數(shù)據(jù)緩存隊列中。7. 根據(jù)權(quán)利要求4所述的一種實時ETL方法,其特征在于:所述步驟S6中判斷輸入數(shù) 據(jù)是否被處理完成的方式為:為輸入數(shù)據(jù)的消息樹分配一個變量,并將該變量均初始化為 〇,待所述輸入數(shù)據(jù)經(jīng)過處理任務(wù)分布式子網(wǎng)絡(luò)處理后,判斷所述變量是否為〇 : 若該變量為〇,則該輸入數(shù)據(jù)被完全處理; 若該變量不為〇,則該輸入數(shù)據(jù)未被完全處理。8. 根據(jù)權(quán)利要求7所述的一種實時ETL方法,其特征在于:所述判斷輸入數(shù)據(jù)是否被 處理完成的方式包括以下子步驟:561. 定義處理任務(wù)分布式子網(wǎng)絡(luò)中任意一個ETL節(jié)點為k,接收到的輸入數(shù)據(jù)為A,則 ETL節(jié)點k為輸入數(shù)據(jù)A生成一個隨機(jī)的64位標(biāo)識符Sa,并將標(biāo)識符Sa保存到該處理任務(wù) 分布式子網(wǎng)絡(luò)的標(biāo)識序列中,為ETL節(jié)點k的消息樹分配一個64位的變量result,并將該 變量result均初始化為0,然后將變量result通過公式(1)與標(biāo)識符S a進(jìn)行異或運算: result = Sa XOR result 公式(I)562. 若處理任務(wù)分布式子網(wǎng)絡(luò)中ETL節(jié)點k之后無用于對輸入數(shù)據(jù)A進(jìn)行處理的ETL 節(jié)點,則ETL節(jié)點k處理完成后,變量result再次通過公式(1)與標(biāo)識符$4進(jìn)行異或運算, 跳轉(zhuǎn)步驟S63 ; 若處理任務(wù)分布式子網(wǎng)絡(luò)中ETL節(jié)點k之后有用于對輸入數(shù)據(jù)A進(jìn)行處理的ETL節(jié)點, 貝IJ ETL節(jié)點k生成輸入數(shù)據(jù)A的一個或多個中間輸出值U1, A2, A3,…,AJ,并將中間輸出值 M1, A2, A3,…,AJ發(fā)送給后續(xù)ETL節(jié)點,每個An表示ETL節(jié)點k的一個中間輸出值,為每個 中間輸出值^生成一個隨機(jī)的64位標(biāo)識符*并將標(biāo)識符Sa記錄到該處理任務(wù)分布式 子網(wǎng)絡(luò)的標(biāo)識序列中,變量result的值通過公式(2)進(jìn)行更新:ETL節(jié)點k處理完成后,變量result再次與標(biāo)識符$4通過公式(1)進(jìn)行異或運算;563. 每過間隔時間t檢測一次變量result的值: 若變量result的值為0,則輸入數(shù)據(jù)A被完全處理; 若變量result的值不為0,則經(jīng)過超時時長p后再次檢測該result的值,若該變量 result的值仍不為0,則輸入數(shù)據(jù)A未被完全處理。9. 根據(jù)權(quán)利要求4所述的一種實時ETL方法,其特征在于:步驟S4中每個ETL節(jié)點對 輸入數(shù)據(jù)進(jìn)行處理,ETL節(jié)點對輸入數(shù)據(jù)進(jìn)行處理包括以下步驟:541. 處理任務(wù)分布式子網(wǎng)絡(luò)中的任意一個ETL節(jié)點在自己的輸入緩存區(qū)中獲取該ETL 節(jié)點的輸入數(shù)據(jù)和輸入數(shù)據(jù)的元數(shù)據(jù)信息;542. 所述ETL節(jié)點根據(jù)自己的節(jié)點元數(shù)據(jù)信息中描述的操作步驟對輸入數(shù)據(jù)進(jìn)行處 理,并修改輸入數(shù)據(jù)的元數(shù)據(jù)信息,生成該ETL節(jié)點的輸出數(shù)據(jù)的元數(shù)據(jù)信息;543. 所述ETL節(jié)點將自己的輸出數(shù)據(jù)和輸出數(shù)據(jù)的元數(shù)據(jù)信息打包后發(fā)給處理任務(wù) 分布式子網(wǎng)絡(luò)中后續(xù)ETL節(jié)點。10.根據(jù)權(quán)利要求4所述的一種實時ETL方法,其特征在于:所述ETL節(jié)點一直保持運 行狀態(tài),除非主動停止該ETL節(jié)點。
【專利摘要】本發(fā)明公開了一種實時ETL系統(tǒng)及方法,包括ETL客戶端、分布式數(shù)據(jù)緩存隊列、分布式狀態(tài)管理機(jī)和ETL群集;所述ETL客戶端,用于設(shè)計ETL流程、測試ETL流程和發(fā)布ETL流程;所述分布式數(shù)據(jù)緩存隊列,用于緩存輸入數(shù)據(jù);所述分布式狀態(tài)管理機(jī),用于存儲系統(tǒng)狀態(tài)信息;所述ETL群集,用于按行從數(shù)據(jù)源獲取輸入數(shù)據(jù),并將輸入數(shù)據(jù)緩存到分布式數(shù)據(jù)緩存隊列中,然后對輸入數(shù)據(jù)進(jìn)行處理。本發(fā)明具有很高的效率,能夠解決目前ETL技術(shù)應(yīng)用在實時大數(shù)據(jù)環(huán)境下的局限性問題。
【IPC分類】G06F17/30
【公開號】CN105069029
【申請?zhí)枴緾N201510425219
【發(fā)明人】林劼, 李虹峰, 郝玉潔, 廖虹光
【申請人】電子科技大學(xué)
【公開日】2015年11月18日
【申請日】2015年7月17日