本發(fā)明涉及數(shù)據(jù)處理技術領域,尤其涉及一種數(shù)據(jù)處理方法、裝置和系統(tǒng)。
背景技術:
數(shù)據(jù)的抽取-轉換-加載(Extract-Transform-load,ETL)是用來實現(xiàn)將待分析的數(shù)據(jù)從源端經(jīng)過抽取(Extract)、轉換(Transform)、加載(Load)至目的端的過程。ETL較常用在數(shù)據(jù)倉庫,作為構建數(shù)據(jù)倉庫的重要一環(huán),用戶從數(shù)據(jù)源抽取出所需的數(shù)據(jù),經(jīng)過數(shù)據(jù)清洗,最終按照預先定義好的數(shù)據(jù)倉庫模型,將數(shù)據(jù)加載到數(shù)據(jù)倉庫中去。
基于ETL技術的系統(tǒng)包括用于對數(shù)據(jù)抽取、用于對數(shù)據(jù)轉換和用于對數(shù)據(jù)加載的三種類型節(jié)點,各個節(jié)點用于完成不同的功能,各個節(jié)點之間通過連線來連接,連線代表具體的數(shù)據(jù)流向,不同功能的節(jié)點是用于完成相應功能的邏輯節(jié)點,通常對應一段軟件程序。
針對各個節(jié)點,按照數(shù)據(jù)輸入方式可以分為單輸入節(jié)點和多輸入節(jié)點,單輸入節(jié)點指的是輸入的數(shù)據(jù)源僅有一個,多輸入節(jié)點指的是輸入的數(shù)據(jù)源存在多個。
針對各個節(jié)點,按照處理數(shù)據(jù)的方式可以分為阻塞節(jié)點和非阻塞節(jié)點,阻塞節(jié)點指的是需要將輸入的數(shù)據(jù)全部駐留到內(nèi)存,并對駐留到內(nèi)存的數(shù)據(jù)進行計算,待所有數(shù)據(jù)計算完成后才能將計算完成的所有數(shù)據(jù)繼續(xù)流向下一個節(jié)點;非阻塞節(jié)點指的是不需要將輸入的數(shù)據(jù)駐留到內(nèi)存,可以接收到一條輸入數(shù)據(jù)及時計算一條,并將計算處理后的一條數(shù)據(jù)直接流向下一個節(jié)點。
由此可知,對于單輸入節(jié)點來說,由于輸入的數(shù)據(jù)源僅有一個,因此單輸入節(jié)點針對輸入的數(shù)據(jù)源進行數(shù)據(jù)處理的方式也僅有一種,即將輸入的數(shù)據(jù)源的數(shù)據(jù)駐留到內(nèi)存或不駐留到內(nèi)存;而對于多輸入節(jié)點來說,輸入的數(shù)據(jù)源存 在多個,這多個數(shù)據(jù)源可以從同一個節(jié)點輸出,該同一個節(jié)點稱之為同源節(jié)點,由于多輸入節(jié)點存在多個輸入的數(shù)據(jù)源,對有些數(shù)據(jù)源上的數(shù)據(jù)需要駐留到內(nèi)存后,才能計將計算完成的所有數(shù)據(jù)繼續(xù)流向下一個節(jié)點,這種數(shù)據(jù)源稱之為阻塞數(shù)據(jù)源,而有些數(shù)據(jù)源上的數(shù)據(jù)不需要駐留到內(nèi)存,接收到直接計算后繼續(xù)流向下一個節(jié)點,這種數(shù)據(jù)源稱之為非阻塞數(shù)據(jù)源。這樣就會使得多輸入節(jié)點在既接收到阻塞數(shù)據(jù)源又接收到非阻塞數(shù)據(jù)源時,可能會出現(xiàn)處理阻塞數(shù)據(jù)源和非阻塞數(shù)據(jù)源時對該多輸入節(jié)點對應的同源節(jié)點輸出的數(shù)據(jù)源出現(xiàn)資源競爭現(xiàn)象。
現(xiàn)有技術中,在基于ETL系統(tǒng)進行大數(shù)據(jù)分析時,如果出現(xiàn)故障告警,則查看后臺記錄的處理日志,若確定處理日志中記錄的故障原因只為處理超時這一種原因時,則可以確定數(shù)據(jù)處理出現(xiàn)依賴死鎖狀態(tài)。
目前,針對數(shù)據(jù)處理出現(xiàn)依賴死鎖的問題,現(xiàn)有技術中通常在ETL系統(tǒng)中,將所有單輸入節(jié)點中的非阻塞節(jié)點更改為阻塞節(jié)點,將所有多輸入節(jié)點中的非阻塞數(shù)據(jù)源更改為阻塞數(shù)據(jù)源,這樣勢必會存在大量節(jié)點都需要將接收到的數(shù)據(jù)存儲到本地,勢必會大量增加對磁盤或內(nèi)存的IO讀寫操作,從而導致大數(shù)據(jù)分析性能大幅降低。
技術實現(xiàn)要素:
本發(fā)明實施例提供一種數(shù)據(jù)處理方法、裝置和系統(tǒng),以避免基于ETL技術對大數(shù)據(jù)進行分析處理時出現(xiàn)依賴死鎖問題,而導致的對磁盤或內(nèi)存的IO讀寫操作過于頻繁,造成大數(shù)據(jù)分析性能大幅降低的問題。
本發(fā)明實施例提供的具體技術方案如下:
第一方面,本發(fā)明實施例提供一種數(shù)據(jù)處理方法,包括:
在ETL系統(tǒng)包括的所有節(jié)點中,確定符合下述條件的節(jié)點:
所述節(jié)點為多輸入節(jié)點、且所述多輸入節(jié)點接收的多個數(shù)據(jù)源包括阻塞數(shù)據(jù)源和非阻塞數(shù)據(jù)源;
所述多輸入節(jié)點接收的多個數(shù)據(jù)源是從同一個同源節(jié)點輸出的;
所述多輸入節(jié)點接收的非阻塞數(shù)據(jù)源所經(jīng)過的傳輸路徑上存在的所有單輸入節(jié)點均為非阻塞節(jié)點,所述傳輸路徑為所述同源節(jié)點至所述多輸入節(jié)點之間的傳輸路徑;
針對確定出的每個符合所述條件的節(jié)點,執(zhí)行:
在該節(jié)點接收的非阻塞數(shù)據(jù)源所經(jīng)過的傳輸路徑上存在的所有非阻塞節(jié)點中,選擇部分非阻塞節(jié)點,將選擇的非阻塞節(jié)點更改為阻塞節(jié)點;和/或
將該節(jié)點接收的非阻塞數(shù)據(jù)源存儲到該節(jié)點本地。
結合第一方面,在第一方面的第一種可能的實現(xiàn)方式中,在該節(jié)點接收的非阻塞數(shù)據(jù)源所經(jīng)過的傳輸路徑上存在的所有非阻塞節(jié)點,選擇部分非阻塞節(jié)點,包括:
在該節(jié)點接收的非阻塞數(shù)據(jù)源所經(jīng)過的傳輸路徑上存在的所有非阻塞節(jié)點中,任意選擇一個非阻塞節(jié)點。
結合第一方面,在第一方面的第二種可能的實現(xiàn)方式中,在ETL系統(tǒng)包括的所有節(jié)點中,確定符合下述條件的節(jié)點之前,還包括:
確定所述ETL系統(tǒng)對數(shù)據(jù)進行分析處理出現(xiàn)故障告警。
第二方面,本發(fā)明實施例提供一種數(shù)據(jù)處理裝置,包括:
確定模塊,用于在ETL系統(tǒng)包括的所有節(jié)點中,確定符合下述條件的節(jié)點:
所述節(jié)點為多輸入節(jié)點、且所述多輸入節(jié)點接收的多個數(shù)據(jù)源包括阻塞數(shù)據(jù)源和非阻塞數(shù)據(jù)源;
所述多輸入節(jié)點接收的多個數(shù)據(jù)源是從同一個同源節(jié)點輸出的;
所述多輸入節(jié)點接收的非阻塞數(shù)據(jù)源所經(jīng)過的傳輸路徑上存在的所有單輸入節(jié)點均為非阻塞節(jié)點,所述傳輸路徑為所述同源節(jié)點至所述多輸入節(jié)點之間的傳輸路徑;
處理模塊,用于針對確定出的每個符合所述條件的節(jié)點,執(zhí)行:
在該節(jié)點接收的非阻塞數(shù)據(jù)源所經(jīng)過的傳輸路徑上存在的所有非阻塞節(jié)點中,選擇部分非阻塞節(jié)點,將選擇的非阻塞節(jié)點更改為阻塞節(jié)點;和/或
將該節(jié)點接收的非阻塞數(shù)據(jù)源存儲到該節(jié)點本地。
結合第二方面,在第二方面的第一種可能的實現(xiàn)方式中,所述處理模塊在該節(jié)點接收的非阻塞數(shù)據(jù)源所經(jīng)過的傳輸路徑上存在的所有非阻塞節(jié)點中,選擇部分非阻塞節(jié)點時,具體用于:
在該節(jié)點接收的非阻塞數(shù)據(jù)源所經(jīng)過的傳輸路徑上存在的所有非阻塞節(jié)點中,任意選擇一個非阻塞節(jié)點。
結合第二方面,在第二方面的第二種可能的實現(xiàn)方式中,所述確定模塊還用于:
在ETL系統(tǒng)包括的所有節(jié)點中,確定符合所述條件的節(jié)點之前,確定所述ETL系統(tǒng)對數(shù)據(jù)進行分析處理出現(xiàn)故障告警或未出現(xiàn)故障告警。
第三方面,本發(fā)明實施例提供一種數(shù)據(jù)處理系統(tǒng),包括:
ETL系統(tǒng),所述系統(tǒng)包括多個節(jié)點;
數(shù)據(jù)處理裝置,用于在所述ETL系統(tǒng)包括的所有節(jié)點中,確定符合下述條件的節(jié)點:所述節(jié)點為多輸入節(jié)點、且所述多輸入節(jié)點接收的多個數(shù)據(jù)源包括阻塞數(shù)據(jù)源和非阻塞數(shù)據(jù)源;所述多輸入節(jié)點接收的多個數(shù)據(jù)源是從同一個同源節(jié)點輸出的;所述多輸入節(jié)點接收的非阻塞數(shù)據(jù)源所經(jīng)過的傳輸路徑上存在的所有單輸入節(jié)點均為非阻塞節(jié)點,所述傳輸路徑為所述同源節(jié)點至所述多輸入節(jié)點之間的傳輸路徑;以及
針對確定出的每個符合所述條件的節(jié)點,執(zhí)行:在該節(jié)點接收的非阻塞數(shù)據(jù)源所經(jīng)過的傳輸路徑上存在的所有非阻塞節(jié)點中,選擇部分非阻塞節(jié)點,將選擇的非阻塞節(jié)點更改為阻塞節(jié)點;和/或將該節(jié)點接收的非阻塞數(shù)據(jù)源存儲到該節(jié)點本地。
結合第三方面,在第三方面的第一種可能的實現(xiàn)方式中,所述數(shù)據(jù)處理裝置在該節(jié)點接收的非阻塞數(shù)據(jù)源所經(jīng)過的傳輸路徑上存在的所有非阻塞節(jié)點 中,選擇部分非阻塞節(jié)點時,具體用于:
在該節(jié)點接收的非阻塞數(shù)據(jù)源所經(jīng)過的傳輸路徑上存在的所有非阻塞節(jié)點中,任意選擇一個非阻塞節(jié)點。
結合第三方面,在第三方面的第二種可能的實現(xiàn)方式中,所述數(shù)據(jù)處理裝置還用于:
在ETL系統(tǒng)包括的所有節(jié)點中,確定符合所述條件的節(jié)點之前,確定所述ETL系統(tǒng)對數(shù)據(jù)進行分析處理出現(xiàn)故障告警或未出現(xiàn)故障告警。
本發(fā)明有益效果如下:
本發(fā)明實施例中,提出一種數(shù)據(jù)處理方案,具體通過在ETL系統(tǒng)包括的所有節(jié)點中,確定符合下述條件的節(jié)點:所述節(jié)點為多輸入節(jié)點、且所述多輸入節(jié)點接收的多個數(shù)據(jù)源包括阻塞數(shù)據(jù)源和非阻塞數(shù)據(jù)源;所述多輸入節(jié)點接收的多個數(shù)據(jù)源是從同一個同源節(jié)點輸出的;所述多輸入節(jié)點接收的非阻塞數(shù)據(jù)源所經(jīng)過的傳輸路徑上存在的所有單輸入節(jié)點均為非阻塞節(jié)點,所述傳輸路徑為所述同源節(jié)點至所述多輸入節(jié)點之間的傳輸路徑;針對確定出的每個符合所述條件的節(jié)點,在該節(jié)點接收的非阻塞數(shù)據(jù)源所經(jīng)過的傳輸路徑上存在的所有非阻塞節(jié)點中,選擇部分非阻塞節(jié)點,將選擇的非阻塞節(jié)點更改為阻塞節(jié)點;和/或將該節(jié)點接收的非阻塞數(shù)據(jù)源存儲到該節(jié)點本地。因此,本發(fā)明實施例若在基于ETL系統(tǒng)進行大數(shù)據(jù)分析出現(xiàn)故障告警之前實施,則可以提前找出符合這樣條件的節(jié)點,根據(jù)符合這樣條件的節(jié)點提前對ETL系統(tǒng)中的相關節(jié)點進行設置,可以避免基于ETL系統(tǒng)對數(shù)據(jù)分析處理出現(xiàn)的依賴死鎖狀態(tài);本發(fā)明實施例若在基于ETL系統(tǒng)進行大數(shù)據(jù)分析出現(xiàn)故障告警之后實施,則也可以快速找出符合這樣條件的節(jié)點,根據(jù)符合這樣條件的節(jié)點及時對ETL系統(tǒng)中的相關節(jié)點進行設置,以解決基于ETL系統(tǒng)對數(shù)據(jù)分析處理出現(xiàn)的依賴死鎖狀態(tài)。從而可以避免現(xiàn)有技術中基于ETL技術對大數(shù)據(jù)進行分析處理時出現(xiàn)依賴死鎖問題后,需要將ETL系統(tǒng)中的所有非阻塞節(jié)點接收的數(shù)據(jù)均儲存在本地,而使得磁盤或內(nèi)存的IO讀寫操作過于頻繁,造成大數(shù)據(jù)分析性能 大幅降低的問題。
附圖說明
圖1為本發(fā)明實施例中數(shù)據(jù)處理方法流程示意圖;
圖2為本發(fā)明實施例中ETL系統(tǒng)中的節(jié)點連接示例圖;
圖3本發(fā)明實施例中數(shù)據(jù)處理裝置結構示意圖;
圖4本發(fā)明實施例中數(shù)據(jù)處理設備結構示意圖;
圖5本發(fā)明實施例中數(shù)據(jù)處理系統(tǒng)結構示意圖。
具體實施方式
下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,并不是全部的實施例。基于本發(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
本發(fā)明實施例提供了一種數(shù)據(jù)處理方法和裝置,用以避免現(xiàn)有技術中基于ETL技術對大數(shù)據(jù)進行分析處理時出現(xiàn)依賴死鎖問題,而導致的對磁盤或內(nèi)存的IO讀寫操作過于頻繁,造成大數(shù)據(jù)分析性能大幅降低的問題。其中,方法和裝置是基于同一發(fā)明構思的,由于方法及裝置解決問題的原理相似,因此裝置與方法的實施可以相互參見,重復之處不再贅述。
在ETL系統(tǒng)中,多輸入節(jié)點對接收到的多個數(shù)據(jù)源進行數(shù)據(jù)處理時由于資源競爭可能會導致ETL系統(tǒng)對數(shù)據(jù)處理出現(xiàn)依賴死鎖問題,現(xiàn)有技術中針對ETL系統(tǒng)出現(xiàn)的依賴死鎖問題,由于不能準確確定出在ETL系統(tǒng)中出現(xiàn)依賴死鎖問題的多輸入節(jié)點有哪些,而是簡單的查看后臺處理日志來確定故障類型,如果確定的故障類型是依賴死鎖問題,則在對ETL系統(tǒng)進行數(shù)據(jù)處理出現(xiàn)的依賴死鎖狀態(tài)進行解鎖時,籠統(tǒng)的將ETL系統(tǒng)中所有單輸入節(jié)點中的非阻塞節(jié)點 更改為阻塞節(jié)點,并將所有多輸入節(jié)點中的非阻塞數(shù)據(jù)源更改為阻塞數(shù)據(jù)源,這樣勢必會存在大量節(jié)點都需要將接收到的數(shù)據(jù)存儲到本地,勢必會大量增加對磁盤或內(nèi)存的IO讀寫操作,而本發(fā)明實施例中提供的數(shù)據(jù)處理方法和裝置不僅能準確確定出現(xiàn)依賴死鎖問題的節(jié)點所在,更重要的是,針對ETL系統(tǒng)數(shù)據(jù)處理出現(xiàn)的依賴死鎖狀態(tài)進行解鎖時,可以基于確定出的節(jié)點以較小的性能損失來解決依賴死鎖問題。
下面結合附圖對本發(fā)明優(yōu)選的實施方式進行詳細說明。
參閱圖1所示,本發(fā)明實施例提供一種數(shù)據(jù)處理方法,具體流程如下:
步驟100:在ETL系統(tǒng)包括的所有節(jié)點中,確定符合下述條件的節(jié)點:
所述節(jié)點為多輸入節(jié)點、且所述多輸入節(jié)點接收的多個數(shù)據(jù)源包括阻塞數(shù)據(jù)源和非阻塞數(shù)據(jù)源;
所述多輸入節(jié)點接收的多個數(shù)據(jù)源是從同一個同源節(jié)點輸出的;
所述多輸入節(jié)點接收的非阻塞數(shù)據(jù)源所經(jīng)過的傳輸路徑上存在的所有單輸入節(jié)點均為非阻塞節(jié)點,所述傳輸路徑為所述同源節(jié)點至所述多輸入節(jié)點之間的傳輸路徑。
其中,步驟100可以在所述ETL系統(tǒng)對數(shù)據(jù)進行分析處理出現(xiàn)故障告警之前執(zhí)行,也可以在所述ETL系統(tǒng)對數(shù)據(jù)進行分析處理出現(xiàn)故障告警之后執(zhí)行,當然本發(fā)明實施例優(yōu)選在出現(xiàn)故障告警之后執(zhí)行步驟100。
具體的,在確定一ETL系統(tǒng)對數(shù)據(jù)處理是否會出現(xiàn)依賴死鎖問題時,需要確定該ETL系統(tǒng)中是否存在符合上述條件的節(jié)點,若存在符合上述條件的節(jié)點,則確定該ETL系統(tǒng)對數(shù)據(jù)處理時會出現(xiàn)依賴死鎖問題;若不存在符合上述條件的節(jié)點,則確定該ETL系統(tǒng)對數(shù)據(jù)處理時不會出現(xiàn)依賴死鎖問題,較佳的,在確定該ETL系統(tǒng)中是否存在符合上述條件的節(jié)點時,可以采用下述實施方式。
由于ETL系統(tǒng)中的各節(jié)點間通過連線代表具體的數(shù)據(jù)流向,因此,可以將ETL系統(tǒng)中各節(jié)點之間傳輸?shù)臄?shù)據(jù)稱為ETL數(shù)據(jù)流。由于ETL系統(tǒng)中每個 節(jié)點都是將輸入的數(shù)據(jù)進行處理后流向下一個節(jié)點,而流向下一節(jié)點的數(shù)據(jù)不會再流回處理過該數(shù)據(jù)的節(jié)點,因此ETL數(shù)據(jù)流可以抽象為一個無回路有向(Directed Acyclic Graph,DAG)圖。
以圖2的一個ETL系統(tǒng)形成的DAG圖為例,在確定該ETL系統(tǒng)中是否存在符合上述條件的節(jié)點時,具體執(zhí)行下述操作:
首先,從H001節(jié)點(文本抽取節(jié)點)開始對該DAG圖進行廣度優(yōu)先遍歷,對該DAG圖中依次加入的每個節(jié)點,分別執(zhí)行:
判斷該加入的節(jié)點是否為多輸入節(jié)點,即H001節(jié)點加入時,如果確定該H001節(jié)點不是多輸入節(jié)點,則繼續(xù)遍歷該DAG圖,接著H002節(jié)點加入,若確定該H002節(jié)點依然不是多輸入節(jié)點時,則繼續(xù)遍歷該DAG圖,接著H003節(jié)點加入,確定該H003節(jié)點依然不是多輸入節(jié)點時,繼續(xù)遍歷該DAG圖,接著H004節(jié)點加入,確定該H004節(jié)點還不是多輸入節(jié)點時,繼續(xù)遍歷該DAG圖,接著H005節(jié)點加入,這里以確定出該H005節(jié)點是多輸入節(jié)點為例進行說明。
再次,從該H005節(jié)點反向遞歸,確認圖2中是否存在H005節(jié)點對應的同源節(jié)點,從圖2中可以看出,H005節(jié)點的多個輸入數(shù)據(jù)源可以從同一個H001節(jié)點輸出,因此H001節(jié)點即為H005節(jié)點的同源節(jié)點。
進一步的,H005節(jié)點存在兩個輸入數(shù)據(jù)源,其中一個數(shù)據(jù)源是經(jīng)歷H001節(jié)點、H002節(jié)點和H004節(jié)點流向H005節(jié)點的數(shù)據(jù)源,另一個數(shù)據(jù)源是經(jīng)歷H001節(jié)點和H003節(jié)點流向H005節(jié)點的數(shù)據(jù)源。接下來確定兩個數(shù)據(jù)源中是否既包括阻塞數(shù)據(jù)源又包括非阻塞數(shù)據(jù)源,具體實現(xiàn)方式可以為:
由于H005節(jié)點是連接節(jié)點,由于連接節(jié)點功能限制,要求連接節(jié)點的主數(shù)據(jù)源為非阻塞數(shù)據(jù)源,從數(shù)據(jù)源為阻塞數(shù)據(jù)源,其中,節(jié)點的主數(shù)據(jù)源和從數(shù)據(jù)源是根據(jù)實際應用場景來預先具體配置的。圖2中,H005節(jié)點的主數(shù)據(jù)源為H004節(jié)點輸出的數(shù)據(jù),H005節(jié)點的從數(shù)據(jù)源為H003節(jié)點輸出的數(shù)據(jù),因此受限于H005節(jié)點的功能限制,要求因此H004節(jié)點與H005節(jié)點之間的傳 輸路徑上傳輸?shù)谋仨毷欠亲枞麛?shù)據(jù)源;要求H003節(jié)點與H005節(jié)點之間的傳輸路徑上傳輸?shù)谋仨毷亲枞麛?shù)據(jù)源。
接下來,確定H005節(jié)點接收到的非阻塞數(shù)據(jù)源從同源節(jié)點H001流經(jīng)H005節(jié)點所經(jīng)過的傳輸路徑上包括H002節(jié)點和H004節(jié)點,進一步判斷H002節(jié)點和H004節(jié)點是否均為非阻塞節(jié)點,通過查詢節(jié)點的類型則可以確定節(jié)點具體為阻塞節(jié)點還是非阻塞節(jié)點,由于H002節(jié)點為過濾節(jié)點、H004節(jié)點為路由節(jié)點,這兩種類型的節(jié)點都為非阻塞節(jié)點,則最終確定H005節(jié)點接收到的非阻塞數(shù)據(jù)源從同源節(jié)點H001節(jié)點到達H005節(jié)點所經(jīng)過的傳輸路徑上包括的H002節(jié)點和H004節(jié)點都為非阻塞節(jié)點。
綜上可以確定H005節(jié)點為符合條件的節(jié)點,即H005節(jié)點的存在可能或已經(jīng)導致ETL系統(tǒng)處理數(shù)據(jù)出現(xiàn)依賴死鎖狀態(tài)。
繼續(xù)遍歷該DAG圖,依次類推,確定H006節(jié)點、H007節(jié)點、H008節(jié)點和H009節(jié)點都不符合上述條件。
步驟101:針對確定出的每個符合上述條件的節(jié)點,執(zhí)行:
在該節(jié)點接收的非阻塞數(shù)據(jù)源所經(jīng)過的傳輸路徑上存在的所有非阻塞節(jié)點中,選擇部分非阻塞節(jié)點,將選擇的非阻塞節(jié)點更改為阻塞節(jié)點;和/或
將該節(jié)點接收的非阻塞數(shù)據(jù)源存儲到該節(jié)點本地。
具體的,在該節(jié)點接收的非阻塞數(shù)據(jù)源所經(jīng)過的傳輸路徑上存在的所有非阻塞節(jié)點,選擇部分非阻塞節(jié)點時,較佳的選擇方式為:在該節(jié)點接收的非阻塞數(shù)據(jù)源所經(jīng)過的傳輸路徑上存在的所有非阻塞節(jié)點中,任意選擇一個非阻塞節(jié)點,這樣能夠更加降低磁盤或內(nèi)存的IO讀寫操作次數(shù),提升大數(shù)據(jù)分析性能。
例如,針對上述圖2中的例子,基于確定的符合上述條件的節(jié)點,即針對H005節(jié)點執(zhí)行下述方式的任意一種方式,都能避免該ETL系統(tǒng)出現(xiàn)的依賴死鎖狀態(tài),或者對該ETL系統(tǒng)已經(jīng)出現(xiàn)的依賴死鎖狀態(tài)進行解鎖,這里以對H005節(jié)點進行操作為例:
第一種方式為,在節(jié)點H005接收的非阻塞數(shù)據(jù)源所經(jīng)過的傳輸路徑上(即H001-H002-H004-H005的路徑上)存在的所有非阻塞節(jié)點中,任意選擇一個非阻塞節(jié)點,可以選擇H002節(jié)點也可以選擇H004節(jié)點,將選擇的非阻塞節(jié)點更改為阻塞節(jié)點,例如,這里選擇的非阻塞節(jié)點為H002節(jié)點,即將H002節(jié)點接收的數(shù)據(jù)源存儲到H002節(jié)點本地,再對本地存儲的數(shù)據(jù)進行計算后流向H005節(jié)點,或者將H002節(jié)點接收的數(shù)據(jù)源計算后存儲到H002節(jié)點本地,再將本地存儲的數(shù)據(jù)流向H005節(jié)點。
第二種方式為,將H005節(jié)點接收的非阻塞數(shù)據(jù)源存儲到節(jié)點H005本地,即將H004與H005之間傳輸?shù)臄?shù)據(jù)存儲到節(jié)點H005本地。
上述第一種方式和第二種方式可以組合使用,也可以擇一使用。
本發(fā)明實施例提供一種數(shù)據(jù)處理方法,具體通過在ETL系統(tǒng)包括的所有節(jié)點中,找出符合相應條件的節(jié)點(即ETL系統(tǒng)對大數(shù)據(jù)分析處理時容易出現(xiàn)依賴死鎖狀態(tài)的節(jié)點);針對確定出的每個符合所述條件的節(jié)點,在該節(jié)點接收的非阻塞數(shù)據(jù)源所經(jīng)過的傳輸路徑上存在的所有非阻塞節(jié)點中,選擇部分非阻塞節(jié)點,將選擇的非阻塞節(jié)點更改為阻塞節(jié)點,和/或將該節(jié)點接收的非阻塞數(shù)據(jù)源存儲到該節(jié)點本地。本發(fā)明實施例可以在基于ETL系統(tǒng)進行大數(shù)據(jù)分析出現(xiàn)故障告警之前實施,也可以在出現(xiàn)故障告警之后實施。若在出現(xiàn)故障告警之前實施,則可以提前找出符合這樣條件的節(jié)點,根據(jù)符合這樣條件的節(jié)點提前對ETL系統(tǒng)中的相關節(jié)點進行設置,以提前避免基于ETL系統(tǒng)對數(shù)據(jù)分析處理出現(xiàn)的依賴死鎖狀態(tài);若在出現(xiàn)故障告警之后實施,則也可以快速找出符合這樣條件的節(jié)點,根據(jù)符合這樣條件的節(jié)點及時對ETL系統(tǒng)中的相關節(jié)點進行設置,以解決基于ETL系統(tǒng)對數(shù)據(jù)分析處理出現(xiàn)的依賴死鎖狀態(tài),避免了現(xiàn)有技術中基于ETL技術對大數(shù)據(jù)進行分析處理時出現(xiàn)依賴死鎖問題后,需要將ETL系統(tǒng)中的所有非阻塞節(jié)點接收的數(shù)據(jù)均儲存在本地,而使得磁盤或內(nèi)存的IO讀寫操作過于頻繁,造成大數(shù)據(jù)分析性能降低的問題。
參閱圖3所示,圖3為本發(fā)明實施例中數(shù)據(jù)處理裝置結構示意圖,本發(fā)明實 施例提供的數(shù)據(jù)處理裝置300,包括:
確定模塊301:用于在ETL系統(tǒng)包括的所有節(jié)點中,確定符合下述條件的節(jié)點:
所述節(jié)點為多輸入節(jié)點、且所述多輸入節(jié)點接收的多個數(shù)據(jù)源包括阻塞數(shù)據(jù)源和非阻塞數(shù)據(jù)源;
所述多輸入節(jié)點接收的多個數(shù)據(jù)源是從同一個同源節(jié)點輸出的;
所述多輸入節(jié)點接收的非阻塞數(shù)據(jù)源所經(jīng)過的傳輸路徑上存在的所有單輸入節(jié)點均為非阻塞節(jié)點,所述傳輸路徑為所述同源節(jié)點至所述多輸入節(jié)點之間的傳輸路徑;
處理模塊302:用于針對確定出的每個符合所述條件的節(jié)點,執(zhí)行:
在該節(jié)點接收的非阻塞數(shù)據(jù)源所經(jīng)過的傳輸路徑上存在的所有非阻塞節(jié)點中,選擇部分非阻塞節(jié)點,將選擇的非阻塞節(jié)點更改為阻塞節(jié)點;和/或
將該節(jié)點接收的非阻塞數(shù)據(jù)源存儲到該節(jié)點本地。
可選的,所述處理模塊302在該節(jié)點接收的非阻塞數(shù)據(jù)源所經(jīng)過的傳輸路徑上存在的所有非阻塞節(jié)點中,選擇部分非阻塞節(jié)點時,具體用于:
在該節(jié)點接收的非阻塞數(shù)據(jù)源所經(jīng)過的傳輸路徑上存在的所有非阻塞節(jié)點中,任意選擇一個非阻塞節(jié)點。
可選的,所述確定模塊301還用于:
在ETL系統(tǒng)包括的所有節(jié)點中,確定符合所述條件的節(jié)點之前,確定所述ETL系統(tǒng)對數(shù)據(jù)進行分析處理出現(xiàn)故障告警或未出現(xiàn)故障告警。
需要說明的是,本發(fā)明實施例中對各個模塊的劃分是示意性的,僅僅為一種邏輯功能的劃分,實際實現(xiàn)時可以有另外的劃分方式,另外,在本申請各個實施例中的各功能模塊可以集成在一個處理模塊中,也可以是各個模塊單獨物理存在,也可以兩個或兩個以上模塊集成在一個模塊中。上述集成的模塊既可以采用硬件的形式實現(xiàn),也可以采用軟件功能模塊的形式實現(xiàn)。
所述集成的模塊如果以軟件功能模塊的形式實現(xiàn)并作為獨立的產(chǎn)品銷售 或使用時,可以存儲在一個計算機可讀取存儲介質中?;谶@樣的理解,本申請的技術方案本質上或者說對現(xiàn)有技術做出貢獻的部分或者該技術方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網(wǎng)絡設備等)或處理器(processor)執(zhí)行本申請各個實施例所述方法的全部或部分步驟。而前述的存儲介質包括:U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質。
本發(fā)明實施例還提供了一種數(shù)據(jù)處理設備,如圖4所示,圖4為本發(fā)明實施例中數(shù)據(jù)處理設備的結構示意圖,該設備包括處理器401和存儲器402。其中,處理器401和存儲器402相連接。本發(fā)明實施例中不限定上述部件之間的具體連接介質。本發(fā)明實施例選擇在圖4中處理器401和存儲器402之間通過總線403連接,總線在圖4中以粗線表示,其它部件之間的連接方式,僅是進行示意性說明,并不引以為限。所述總線可以分為地址總線、數(shù)據(jù)總線、控制總線等。為便于表示,圖4中僅用一條粗線表示,但并不表示僅有一根總線或一種類型的總線。
本發(fā)明實施例中存儲器402,用于存儲處理器401執(zhí)行的程序代碼,存儲器402可以是易失性存儲器(英文:volatile memory),例如隨機存取存儲器(英文:random-access memory,縮寫:RAM);存儲器402也可以是非易失性存儲器(英文:non-volatile memory),例如只讀存儲器(英文:read-only memory,縮寫:ROM),快閃存儲器(英文:flash memory),硬盤(英文:hard disk drive,縮寫:HDD)或固態(tài)硬盤(英文:solid-state drive,縮寫:SSD)、或者存儲器402是能夠用于攜帶或存儲具有指令或數(shù)據(jù)結構形式的期望程序代碼并能夠由計算機存取的任何其他存儲器,但不限于此。此外,存儲器402還可以是上述任意存儲器的組合。
本發(fā)明實施例中,處理器401,用于通過總線調用存儲器402中存儲的程 序代碼,并通過執(zhí)行調用的程序代碼執(zhí)行:
在ETL系統(tǒng)包括的所有節(jié)點中,確定符合下述條件的節(jié)點:所述節(jié)點為多輸入節(jié)點、且所述多輸入節(jié)點接收的多個數(shù)據(jù)源包括阻塞數(shù)據(jù)源和非阻塞數(shù)據(jù)源;所述多輸入節(jié)點接收的多個數(shù)據(jù)源是從同一個同源節(jié)點輸出的;所述多輸入節(jié)點接收的非阻塞數(shù)據(jù)源所經(jīng)過的傳輸路徑上存在的所有單輸入節(jié)點均為非阻塞節(jié)點,所述傳輸路徑為所述同源節(jié)點至所述多輸入節(jié)點之間的傳輸路徑;并針對確定出的每個符合所述條件的節(jié)點,在該節(jié)點接收的非阻塞數(shù)據(jù)源所經(jīng)過的傳輸路徑上存在的所有非阻塞節(jié)點中,選擇部分非阻塞節(jié)點,將選擇的非阻塞節(jié)點更改為阻塞節(jié)點;和/或,將該節(jié)點接收的非阻塞數(shù)據(jù)源存儲到該節(jié)點本地。
本發(fā)明實施例中的處理器401,可以是一個中央處理單元(英文:central processing unit,簡稱CPU)。
本發(fā)明實施例還提供了一種數(shù)據(jù)處理系統(tǒng),如圖5所示,圖5為本發(fā)明實施例中數(shù)據(jù)處理系統(tǒng)的結構示意圖,該系統(tǒng)包括ETL系統(tǒng)501和數(shù)據(jù)處理裝置502。其中,ETL系統(tǒng)501和數(shù)據(jù)處理裝置502相連接。本發(fā)明實施例中不限定上述部件之間的具體連接介質,其中:
所述ETL系統(tǒng)501包括多個節(jié)點;
所述數(shù)據(jù)處理裝置502,用于在所述ETL系統(tǒng)501包括的所有節(jié)點中,確定符合下述條件的節(jié)點:所述節(jié)點為多輸入節(jié)點、且所述多輸入節(jié)點接收的多個數(shù)據(jù)源包括阻塞數(shù)據(jù)源和非阻塞數(shù)據(jù)源;所述多輸入節(jié)點接收的多個數(shù)據(jù)源是從同一個同源節(jié)點輸出的;所述多輸入節(jié)點接收的非阻塞數(shù)據(jù)源所經(jīng)過的傳輸路徑上存在的所有單輸入節(jié)點均為非阻塞節(jié)點,所述傳輸路徑為所述同源節(jié)點至所述多輸入節(jié)點之間的傳輸路徑;以及
針對確定出的每個符合所述條件的節(jié)點,執(zhí)行:在該節(jié)點接收的非阻塞數(shù)據(jù)源所經(jīng)過的傳輸路徑上存在的所有非阻塞節(jié)點中,選擇部分非阻塞節(jié)點,將選擇的非阻塞節(jié)點更改為阻塞節(jié)點;和/或將該節(jié)點接收的非阻塞數(shù)據(jù)源存儲到 該節(jié)點本地。
可選的,所述數(shù)據(jù)處理裝置502在該節(jié)點接收的非阻塞數(shù)據(jù)源所經(jīng)過的傳輸路徑上存在的所有非阻塞節(jié)點中,選擇部分非阻塞節(jié)點時,具體用于:
在該節(jié)點接收的非阻塞數(shù)據(jù)源所經(jīng)過的傳輸路徑上存在的所有非阻塞節(jié)點中,任意選擇一個非阻塞節(jié)點。
可選的,所述數(shù)據(jù)處理裝置502還用于:
在ETL系統(tǒng)包括的所有節(jié)點中,確定符合所述條件的節(jié)點之前,確定所述ETL系統(tǒng)對數(shù)據(jù)進行分析處理出現(xiàn)故障告警或未出現(xiàn)故障告警。
綜上所述,本發(fā)明實施例中提供的數(shù)據(jù)處理方案若在基于ETL系統(tǒng)進行大數(shù)據(jù)分析出現(xiàn)故障告警之前實施,則可以提前找出符合這樣條件的節(jié)點,根據(jù)符合這樣條件的節(jié)點提前對ETL系統(tǒng)中的相關節(jié)點進行設置,可以避免基于ETL系統(tǒng)對數(shù)據(jù)分析處理出現(xiàn)的依賴死鎖狀態(tài);本發(fā)明實施例若在基于ETL系統(tǒng)進行大數(shù)據(jù)分析出現(xiàn)故障告警之后實施,則也可以快速找出符合這樣條件的節(jié)點,根據(jù)符合這樣條件的節(jié)點及時對ETL系統(tǒng)中的相關節(jié)點進行設置,以解決基于ETL系統(tǒng)對數(shù)據(jù)分析處理出現(xiàn)的依賴死鎖狀態(tài)。從而可以避免現(xiàn)有技術中基于ETL技術對大數(shù)據(jù)進行分析處理時出現(xiàn)依賴死鎖問題后,需要將ETL系統(tǒng)中的所有非阻塞節(jié)點接收的數(shù)據(jù)均儲存在本地,而使得磁盤或內(nèi)存的IO讀寫操作過于頻繁,造成大數(shù)據(jù)分析性能大幅降低的問題。
本領域內(nèi)的技術人員應明白,本發(fā)明的實施例可提供為方法、系統(tǒng)、或計算機程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實施例、完全軟件實施例、或結合軟件和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限于磁盤存儲器、CD-ROM、光學存儲器等)上實施的計算機程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實施例的方法、設備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/ 或方框的結合??商峁┻@些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些計算機程序指令也可存儲在能引導計算機或其他可編程數(shù)據(jù)處理設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設備上,使得在計算機或其他可編程設備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
盡管已描述了本發(fā)明的優(yōu)選實施例,但本領域內(nèi)的技術人員一旦得知了基本創(chuàng)造性概念,則可對這些實施例作出另外的變更和修改。所以,所附權利要求意欲解釋為包括優(yōu)選實施例以及落入本發(fā)明范圍的所有變更和修改。
顯然,本領域的技術人員可以對本發(fā)明實施例進行各種改動和變型而不脫離本發(fā)明實施例的精神和范圍。這樣,倘若本發(fā)明實施例的這些修改和變型屬于本發(fā)明權利要求及其等同技術的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。