陳盛榮,劉廣鐘
(上海海事大學(xué)信息工程學(xué)院計(jì)算機(jī)系,上海201306)
分布式環(huán)境下ETL系統(tǒng)的優(yōu)化策略研究
陳盛榮,劉廣鐘
(上海海事大學(xué)信息工程學(xué)院計(jì)算機(jī)系,上海201306)
ETL是將數(shù)據(jù)由不同數(shù)據(jù)源抽取到數(shù)據(jù)倉(cāng)庫(kù)的重要過(guò)程,ETL的過(guò)程設(shè)計(jì)、維護(hù)和修改直接影響數(shù)據(jù)倉(cāng)庫(kù)中數(shù)據(jù)處理的效率和數(shù)據(jù)的質(zhì)量。通過(guò)分析ETL活動(dòng)的模型特點(diǎn),結(jié)合分布式計(jì)算的思想提出一種新的ETL系統(tǒng)模型,并提出基于該系統(tǒng)架構(gòu)的滿足ETL任務(wù)形態(tài)特征的優(yōu)化方案,詳細(xì)描述數(shù)據(jù)以及調(diào)度信息在系統(tǒng)中的周轉(zhuǎn)過(guò)程。
數(shù)據(jù)倉(cāng)庫(kù);分布式系統(tǒng);抽取轉(zhuǎn)換加載(ETL)
在基于數(shù)據(jù)倉(cāng)庫(kù)的離線數(shù)據(jù)分析任務(wù)中,ETL過(guò)程(抽取-轉(zhuǎn)換-裝載)表示在對(duì)異構(gòu)的數(shù)據(jù)源進(jìn)行清洗、轉(zhuǎn)換等處理后,以一種統(tǒng)一的模式(包括存儲(chǔ)結(jié)構(gòu)層面和邏輯語(yǔ)義層面)集中存儲(chǔ)于數(shù)據(jù)倉(cāng)庫(kù)。作為商業(yè)智能BI、機(jī)器學(xué)習(xí)等數(shù)據(jù)分析任務(wù)的基石,ETL需要兼顧可靠性和性能,才能保證高效地將高質(zhì)量的數(shù)據(jù)按時(shí)匯總到數(shù)據(jù)平臺(tái)。據(jù)統(tǒng)計(jì),ETL占據(jù)了總?cè)蝿?wù)成本60%以上,且由于數(shù)據(jù)源多來(lái)自于數(shù)據(jù)庫(kù)等基于實(shí)時(shí)更新的數(shù)據(jù)平臺(tái)。考慮到ETL任務(wù)的特性(大數(shù)據(jù)量、可并行性),可以引入分布式計(jì)算的思想,通過(guò)合理均衡地調(diào)度集群計(jì)算資源,減少空置提升并行,來(lái)縮小運(yùn)行ETL任務(wù)的時(shí)間成本。
1.1ETL邏輯建模
ETL的任務(wù)滿足“多源單目標(biāo)”的形態(tài)特征。如圖1所示,將ETL的整體流程建模為有向無(wú)環(huán)圖G(V,E),描述了ETL過(guò)程中涉及的各種實(shí)體以及任務(wù)流程之間的關(guān)系。節(jié)點(diǎn)集V表示與數(shù)據(jù)加載/轉(zhuǎn)換相關(guān)的各種活動(dòng)或存儲(chǔ)模式,邊E描述各節(jié)點(diǎn)的數(shù)據(jù)傳遞/依賴(lài)關(guān)系。ETL過(guò)程的邏輯建模包括如下要素:

圖1 ETL工作流圖
記錄集RS:由圓柱形表示,表示具有固定模式,并以結(jié)構(gòu)化的方式存儲(chǔ)于非易失性設(shè)備中的數(shù)據(jù)集。在ETL任務(wù)里作為數(shù)據(jù)源或目標(biāo)集,表示源數(shù)據(jù)集或存儲(chǔ)結(jié)果數(shù)據(jù)的數(shù)據(jù)倉(cāng)庫(kù),例如表示關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)表或數(shù)據(jù)倉(cāng)庫(kù)中的維度表和事實(shí)表等。
屬性:由橢圓表示。在ETL場(chǎng)景中,若只對(duì)數(shù)據(jù)集中的某幾列元素感興趣,可以使用橢圓表示從數(shù)據(jù)集中抽取需要的列數(shù)據(jù),稱(chēng)為屬性。
活動(dòng):由三角形表示,ETL過(guò)程包含了對(duì)數(shù)據(jù)的不同操作,如選擇、連接、投影、排序、拆分、合并等,還包括空值檢查、外鍵約束檢查、鍵值轉(zhuǎn)換、格式轉(zhuǎn)換等。依據(jù)輸入輸出模式不同,將活動(dòng)分為一元活動(dòng)和二元活動(dòng)。一元活動(dòng)具有一個(gè)輸入模式和一個(gè)輸出模式,這種簡(jiǎn)單的線性結(jié)構(gòu)通常表示某種轉(zhuǎn)換活動(dòng),用以修改數(shù)據(jù)格式或執(zhí)行某種函數(shù)操作。二元活動(dòng)涉及兩個(gè)輸入模式和一個(gè)輸出模式,這種活動(dòng)需要對(duì)來(lái)自各個(gè)數(shù)據(jù)源的數(shù)據(jù)進(jìn)行匯總及預(yù)處理,只有當(dāng)所有依賴(lài)的數(shù)據(jù)源都輸出完畢才進(jìn)行后續(xù)的處理過(guò)程。諸如Join、Union等都屬于這一類(lèi)活動(dòng)。二元活動(dòng)具有阻塞式特征,即需要等待兩個(gè)輸入模式的數(shù)據(jù)都傳達(dá)后才能執(zhí)行該活動(dòng),容易成為阻礙ETL工作流的整體流程中的瓶頸節(jié)點(diǎn),可以將此類(lèi)活動(dòng)視作整個(gè)工作流的邊界節(jié)點(diǎn),從而將整個(gè)工作流分割為多個(gè)互不存在依賴(lài)關(guān)系的子工作流,運(yùn)用并行思想提升ETL過(guò)程的整體性能。
1.2分布式ETL系統(tǒng)架構(gòu)
分布式系統(tǒng)能充分利用計(jì)算資源,將不同的任務(wù)分配到不同的計(jì)算節(jié)點(diǎn),從而將的ETL任務(wù)邏輯轉(zhuǎn)化為多個(gè)并行處理的數(shù)據(jù)流。如圖2所示,本節(jié)提出一種基于分布式系統(tǒng)設(shè)計(jì)的ETL框架模型,包括如下模塊:客戶端模塊、語(yǔ)義解析模塊、元數(shù)據(jù)庫(kù)、調(diào)度單元模塊和計(jì)算集群。

圖2 基于分布式計(jì)算的ETL系統(tǒng)結(jié)構(gòu)
客戶端:接收來(lái)自用戶的ETL任務(wù)。由于來(lái)自客戶端的ETL需求可能遵循了不同的語(yǔ)義格式寫(xiě)成。客戶端負(fù)責(zé)將ETL任務(wù)解析為滿足統(tǒng)一格式的有向無(wú)環(huán)圖結(jié)構(gòu)的工作流圖,由于客戶端的ETL語(yǔ)義在執(zhí)行邏輯上通常不是最優(yōu)的,需要交由語(yǔ)義解析模塊完成優(yōu)化工作。
語(yǔ)義解析模塊:對(duì)經(jīng)由客戶端格式化的ETL工作流圖進(jìn)行分析和優(yōu)化,通過(guò)遍歷圖中的各節(jié)點(diǎn),確定工作流中的活動(dòng)屬性,對(duì)工作流圖進(jìn)行轉(zhuǎn)換,最后將優(yōu)化后的工作流圖送至調(diào)度單元執(zhí)行。具體流程如下:①循環(huán)遍歷工作流圖的各節(jié)點(diǎn)。對(duì)入度為0的節(jié)點(diǎn)(數(shù)據(jù)源),確定數(shù)據(jù)源的數(shù)據(jù)量,將相關(guān)信息記錄到元數(shù)據(jù)庫(kù)中;對(duì)于出度為0的節(jié)點(diǎn)(目標(biāo)數(shù)據(jù)集),記錄相關(guān)的元數(shù)據(jù)到元數(shù)據(jù)庫(kù);對(duì)于出度和入度都大于0的節(jié)點(diǎn)(活動(dòng)節(jié)點(diǎn)),判斷其活動(dòng)類(lèi)型,對(duì)于用作分割工作流的二元活動(dòng)節(jié)點(diǎn),記錄該活動(dòng)的屬性及所處位置。②遍歷節(jié)點(diǎn)后,對(duì)工作流中的節(jié)點(diǎn)進(jìn)行對(duì)調(diào)轉(zhuǎn)換等優(yōu)化操作,旨在減少活動(dòng)節(jié)點(diǎn)間的數(shù)據(jù)交換。③將經(jīng)過(guò)優(yōu)化的工作流以二元活動(dòng)為界分割為多個(gè)子工作流,將子工作流中的多個(gè)一元活動(dòng)歸為一組傳送至調(diào)度單元準(zhǔn)備執(zhí)行,并標(biāo)明組別,為調(diào)度單元?jiǎng)討B(tài)優(yōu)化工作流程提供參考。
調(diào)度單元:細(xì)分為動(dòng)態(tài)規(guī)劃模塊和調(diào)度執(zhí)行模塊。在分布式環(huán)境下,因?yàn)榧汗?jié)點(diǎn)的計(jì)算性能存在差異,可以將數(shù)據(jù)進(jìn)行分割從而充分利用現(xiàn)有資源發(fā)揮并行計(jì)算的性能優(yōu)勢(shì)。動(dòng)態(tài)規(guī)劃模塊按照劃分規(guī)則水平地將數(shù)據(jù)分割為多個(gè)數(shù)據(jù)流。調(diào)度執(zhí)行模塊則將對(duì)應(yīng)的ETL活動(dòng)打包分配至各執(zhí)行單元執(zhí)行。調(diào)度單元接收來(lái)自執(zhí)行單元的執(zhí)行信息以實(shí)時(shí)跟進(jìn)ETL活動(dòng)節(jié)點(diǎn)的執(zhí)行進(jìn)度。動(dòng)態(tài)規(guī)劃模塊與調(diào)度執(zhí)行模塊協(xié)調(diào)執(zhí)行,前者對(duì)來(lái)自執(zhí)行單元的執(zhí)行信息進(jìn)行匯總分析,從而得到最優(yōu)化的數(shù)據(jù)分割策略;后者依據(jù)得到的實(shí)時(shí)最優(yōu)化結(jié)果,將任務(wù)分配到執(zhí)行單元。
元數(shù)據(jù)庫(kù):元數(shù)據(jù)是記錄數(shù)據(jù)的數(shù)據(jù),維護(hù)數(shù)據(jù)模式的完整性和正確性。系統(tǒng)執(zhí)行流程中涉及的各模塊都會(huì)與之發(fā)生交互。
執(zhí)行單元:ETL任務(wù)的執(zhí)行體,在分布式計(jì)算環(huán)境中執(zhí)行經(jīng)由調(diào)度單元分配的計(jì)算作業(yè)包。由于網(wǎng)絡(luò)帶寬的性能相對(duì)薄弱,執(zhí)行模塊通常將ETL中間結(jié)果緩存于本地。只有在需要匯集多個(gè)節(jié)點(diǎn)的輸出數(shù)據(jù)時(shí)才動(dòng)用網(wǎng)絡(luò)帶寬資源進(jìn)行數(shù)據(jù)傳輸。
2.1基于語(yǔ)義邏輯的優(yōu)化策略
基于語(yǔ)義邏輯的優(yōu)化在語(yǔ)義解析階段完成,當(dāng)遍歷ETL工作流的所有轉(zhuǎn)換活動(dòng)節(jié)點(diǎn)后,語(yǔ)義解析模塊會(huì)根據(jù)不同活動(dòng)節(jié)點(diǎn)的屬性,運(yùn)用交換活動(dòng)執(zhí)行順序、合并語(yǔ)義重復(fù)的活動(dòng)等策略在不改變ETL工作流的執(zhí)行結(jié)果的前提下修改ETL工作流程。經(jīng)過(guò)優(yōu)化的工作流減少了數(shù)據(jù)在不同節(jié)點(diǎn)間的周轉(zhuǎn)量,從而減輕了單機(jī)/集群的I/O負(fù)載。例如對(duì)基于SQL腳本描述的ETL任務(wù),ETL執(zhí)行框架可以運(yùn)用多種基于關(guān)系型數(shù)據(jù)庫(kù)的優(yōu)化策略。此外,這種優(yōu)化策略是基于語(yǔ)義的靜態(tài)優(yōu)化,是從理論上減少工作流的數(shù)據(jù)量,而不會(huì)與下文數(shù)據(jù)動(dòng)態(tài)分割的優(yōu)化方式產(chǎn)生沖突。
2.2基于分組的優(yōu)化策略
ETL工作流存在不同類(lèi)型的活動(dòng)節(jié)點(diǎn),其中存在依賴(lài)允許并行的一元活動(dòng),定義為:
將數(shù)據(jù)源T水平分成T1和T2,則T=T1∪T2,將ETL過(guò)程的每一個(gè)活動(dòng)Acti(1≤i≤m)看作對(duì)T的函數(shù)映射,那么如果Actm(Actm-1(…(Act1(T))))={F1,D1,D2,…,Dp},則應(yīng)滿足Actm(Actm-1(…(Act1(T1))))∪Actm(Actm-1(…(Act1(T2))))={F1,D1,D2,…,Dp}。即設(shè)M是對(duì)T的關(guān)系操作,須滿足M(T)=M(T1)∪M(T2)。
如圖3所示,若工作流中存在此類(lèi)活動(dòng)的串行序列,可以合并為一組。這樣做的好處在于:①簡(jiǎn)化ETL活動(dòng)的邏輯結(jié)構(gòu)。②減少調(diào)度單元向執(zhí)行單元分發(fā)計(jì)算任務(wù)的頻率,執(zhí)行單元在完成前一個(gè)轉(zhuǎn)換任務(wù)后可以直接進(jìn)入到下一個(gè)轉(zhuǎn)換任務(wù)的執(zhí)行過(guò)程中,不需要向調(diào)度單元再次申請(qǐng)計(jì)算任務(wù),避免了申請(qǐng)任務(wù)產(chǎn)生的等待延時(shí),保證了任務(wù)執(zhí)行的連續(xù)性。③由于每個(gè)分組都是由可并行的一元活動(dòng)組成,可以通過(guò)分割數(shù)據(jù)的方式將活動(dòng)組分配到不同的執(zhí)行單元異步執(zhí)行,各執(zhí)行單元的計(jì)算結(jié)果互不干擾,從而形成流水線的效果以提升ETL的性能。
以圖3所述的活動(dòng)組為例,由此會(huì)得到分組前后的工作流視圖,前者從一個(gè)較細(xì)的粒度描述了工作流的任務(wù)邏輯,后者以粗粒度描述了工作流在分布式集群中的任務(wù)分配情況。

圖3 分組前/后的工作流圖
2.3基于動(dòng)態(tài)數(shù)據(jù)分割的調(diào)度策略
對(duì)于并行執(zhí)行的ETL工作流,可能存在數(shù)據(jù)分配與集群資源不匹配的情況。例如,如果為計(jì)算能力偏弱的節(jié)點(diǎn)分配了過(guò)重的數(shù)據(jù)量,可能出現(xiàn)部分高性能節(jié)點(diǎn)在完成計(jì)算任務(wù)后為了等待其余節(jié)點(diǎn)完成任務(wù)而產(chǎn)生閑置。此外,在大型集群式生產(chǎn)環(huán)境中,新節(jié)點(diǎn)的加入和節(jié)點(diǎn)發(fā)生故障的情況十分常見(jiàn)。事先分割數(shù)據(jù)的調(diào)度方案無(wú)法很好地應(yīng)對(duì)這些場(chǎng)景。本節(jié)提出一種能適應(yīng)上述異構(gòu)集群環(huán)境的動(dòng)態(tài)分割數(shù)據(jù)的ETL調(diào)度策略。
動(dòng)態(tài)指的是數(shù)據(jù)分割發(fā)生在系統(tǒng)開(kāi)始執(zhí)行運(yùn)算任務(wù)后,而非執(zhí)行之前的調(diào)度階段,分割的數(shù)據(jù)對(duì)象是針對(duì)執(zhí)行時(shí)的低效處理機(jī)進(jìn)行的,是否進(jìn)行數(shù)據(jù)分割、分割的數(shù)據(jù)量大小依據(jù)當(dāng)前系統(tǒng)運(yùn)行進(jìn)度計(jì)算得出。當(dāng)集群中出現(xiàn)空閑節(jié)點(diǎn)時(shí)或處理機(jī)開(kāi)始執(zhí)行某個(gè)新的一元活動(dòng)任務(wù)時(shí),將發(fā)生數(shù)據(jù)分割。
該策略的執(zhí)行流程如下:首先訪問(wèn)集群中正在執(zhí)行運(yùn)算任務(wù)的執(zhí)行單元,選擇其中完成時(shí)間最晚的活動(dòng)作為分割數(shù)據(jù)的對(duì)象;之后訪問(wèn)集群中所有空閑的執(zhí)行單元,判斷是否滿足執(zhí)行條件,所謂的執(zhí)行條件是指該處理機(jī)空閑的時(shí)間窗口大于被分割數(shù)據(jù)跨機(jī)傳輸時(shí)間及運(yùn)算時(shí)間之和,否則數(shù)據(jù)分割是沒(méi)有意義的,反而會(huì)增加工作流的總執(zhí)行時(shí)間,將符合條件的執(zhí)行單元記錄下來(lái);最后,系統(tǒng)計(jì)算發(fā)生數(shù)據(jù)分割的數(shù)據(jù)量,使這些數(shù)據(jù)在空閑的執(zhí)行單元上完成傳輸和計(jì)算的時(shí)間跨度最短。

圖4 ETL工作流圖

圖5 應(yīng)用動(dòng)態(tài)數(shù)據(jù)分割策略前后的集群并行情況對(duì)比
當(dāng)集群中出現(xiàn)空閑的執(zhí)行單元或是有一元活動(dòng)被調(diào)度時(shí),系統(tǒng)會(huì)激活數(shù)據(jù)分割算法。二元活動(dòng)本身存在特殊性,只能在某個(gè)執(zhí)行單元以單機(jī)方式完成相關(guān)運(yùn)算任務(wù),不適合數(shù)據(jù)分割執(zhí)行。
假設(shè)在三臺(tái)單機(jī)組建的集群上執(zhí)行圖4所示ETL任務(wù)。由圖5可以看到,P3的性能相對(duì)薄弱,當(dāng)P2完成任務(wù)N2進(jìn)入閑置狀態(tài)后,系統(tǒng)將N3部分?jǐn)?shù)據(jù)分割并傳遞至P2執(zhí)行,灰色部分表示數(shù)據(jù)發(fā)生跨執(zhí)行單元傳輸。類(lèi)似的情況也發(fā)生在N6啟動(dòng)時(shí),系統(tǒng)將數(shù)據(jù)分割并分配至P1和P3。由于集群資源被更合理地使用,ETL活動(dòng)的總執(zhí)行時(shí)間得以明顯縮短。
本文提出了基于分布式系統(tǒng)的ETL活動(dòng)優(yōu)化策略,能很好地適應(yīng)目前被廣泛應(yīng)用的分布式計(jì)算框架。在保證計(jì)算準(zhǔn)確率的同時(shí),合理迅速地調(diào)度集群資源,保證各計(jì)算單元的負(fù)載平衡,提升執(zhí)行復(fù)雜ETL任務(wù)的綜合性能。
[1]徐俊剛,裴瑩.數(shù)據(jù)ETL研究綜述[J].計(jì)算機(jī)科學(xué),2011,38(4):15-20.
[2]許力,牟曉光,馬云存.并行ETL過(guò)程的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與應(yīng)用,2009,45(13):170-172.
[3]尤玉林,張憲民.一種可靠的數(shù)據(jù)倉(cāng)庫(kù)中ETL策略和架構(gòu)設(shè)計(jì)[J].計(jì)算機(jī)工程與應(yīng)用,2005,41(10):172-175,229.
[4]Simitsis A,Vassiliadis P,Sellis T.Optimizing ETL Processes in Data Warehouses:Proceedings of 21st International Conference on Data Engineering(ICDE),2005[C].Tokyo,Japan,2005:564-575.
[5]Vassiliadis P,Simitsis A,Terrovitis M.A Framework for the Design ETL Scenarios:Proceedings of the 15th Conference on Advanced Information Systems Engineering(CAISE'2003),2003[C].Klagenfurt,Austria,2003:520-535.
[6]Vassiliadis P,Vagena Z,Skiadopoulos S,et al.Towards the Modeling,Design,Control and Execution of ETL Processes[J].Information Systems,2001,26(8):537-561.
[7]Vassiliadis P,Simitsis A,Skiadopoulos S.Conceptual Modeling for ETL Processes:Proceeding of the 5th ACM International Workshop on Data Warehousing and OLAP,2002[C],2002:14-21.
CHEN Sheng-rong,LIU Guang-zhong
(College of Information and Engineering,Shanghai Maritime University,Shanghai 201306)
ETL is an important process of extracting data from different data sources to Data Warehouse.Its process design,maintenance and modification directly affect the efficiency of data processing and data quality in the data warehouse.Combined with the concept of distributed computing,presents a new ETL System model,and furthermore puts forward an optimizing method that is based on the system architecture and satisfies the topological characteristics of ETL tasks,describes the data flow and scheduling process of the system in details.
Data Warehouse;Distributed System;Extract-Transform-Load(ETL)
1007-1423(2016)23-0039-05DOI:10.3969/j.issn.1007-1423.2016.23.010
陳盛榮(1992-),男,上海人,上海海事大學(xué)研究生,研究方向?yàn)橛?jì)算機(jī)網(wǎng)絡(luò)開(kāi)發(fā)
2016-05-17
2016-08-10Research on ETL Scheduling Model in Distributed System