一種基于storm的數(shù)據(jù)ETL系統(tǒng)及處理方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明公開一種基于storm的數(shù)據(jù)ETL系統(tǒng)及處理方法,屬于數(shù)據(jù)ETL管理技術(shù)領(lǐng)域。
【背景技術(shù)】
[0002]數(shù)據(jù)集成是把不同來源、格式和特點(diǎn)的數(shù)據(jù)在邏輯上或物理上有機(jī)地集中,從而提供全面的數(shù)據(jù)共享,是企業(yè)商務(wù)智能、數(shù)據(jù)倉(cāng)庫系統(tǒng)的重要組成部分。ETL是企業(yè)數(shù)據(jù)集成的主要解決方案。ETL中三個(gè)字母分別代表的是Extract、Transform、Load,即抽取、轉(zhuǎn)換、加載。數(shù)據(jù)抽取是從數(shù)據(jù)源中抽取數(shù)據(jù)的過程。隨著企業(yè)數(shù)據(jù)量的不斷增加,原始關(guān)系型數(shù)據(jù)庫已經(jīng)無法滿足用戶的需求,需要往能夠橫向擴(kuò)展的數(shù)據(jù)倉(cāng)庫,例如hadoop或者M(jìn)PP架構(gòu)的平臺(tái)上進(jìn)行數(shù)據(jù)迀移。從數(shù)據(jù)庫中抽取數(shù)據(jù)的方式一般為直接導(dǎo)出備份數(shù)據(jù)和通過JDBC (Java Data Base Connectivity)等接口讀數(shù)據(jù)等方式。其中通過JDBC等接口讀取的方式比較靈活,但是通過JDBC等接口抽取數(shù)據(jù)的方式如果不采用多線程并行的話效率會(huì)很低,特別是大數(shù)據(jù)時(shí)代經(jīng)常需要抽取上億條數(shù)據(jù)的數(shù)據(jù)庫表的情況,導(dǎo)致JDBC效率不高。目前從經(jīng)濟(jì)和效率綜合考慮,主流的大數(shù)據(jù)平臺(tái)利用ETL工具進(jìn)行數(shù)據(jù)的迀移,但是基于流數(shù)據(jù)處理框架的ETL工具目前還沒有成型的產(chǎn)品。本發(fā)明提供一種基于storm的數(shù)據(jù)ETL系統(tǒng)及處理方法,利用storm作為數(shù)據(jù)ETL的計(jì)算引擎,并且利用控制器與用戶交互,用戶無需編寫代碼,只需輸入命令就可實(shí)現(xiàn)利用storm進(jìn)行數(shù)據(jù)的ETL操作,并且自動(dòng)設(shè)置storm并發(fā)起ETL任務(wù);將所有可支持的數(shù)據(jù)源和目標(biāo)數(shù)據(jù)存儲(chǔ)的連接驅(qū)動(dòng)都封裝在連接器中,供控制器自動(dòng)選擇調(diào)用,本發(fā)明系統(tǒng)及處理方法應(yīng)用于利用流數(shù)據(jù)框架將關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)集成到數(shù)據(jù)倉(cāng)庫中具有很強(qiáng)的實(shí)用性。
【發(fā)明內(nèi)容】
[0003]本發(fā)明針對(duì)基于流數(shù)據(jù)處理框架的ETL工具目前還沒有成型的產(chǎn)品,不能很好的解決大量流數(shù)據(jù)迀移的問題,提供一種基于storm的數(shù)據(jù)ETL系統(tǒng)及處理方法,應(yīng)用于利用流數(shù)據(jù)框架將關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)集成到數(shù)據(jù)倉(cāng)庫中具有很強(qiáng)的實(shí)用性。
[0004]本發(fā)明提出的具體方案是:
一種基于storm的數(shù)據(jù)ETL系統(tǒng),包括控制器模塊、連接器模塊和分布式計(jì)算引擎;控制器模塊負(fù)責(zé)接收用戶輸入信息,替分布式計(jì)算引擎選擇數(shù)據(jù)源和目標(biāo)數(shù)據(jù)存儲(chǔ)的連接器,設(shè)置分布式計(jì)算引擎的ETL拓?fù)浣Y(jié)構(gòu),設(shè)置完成后調(diào)用分布式計(jì)算引擎發(fā)起ETL任務(wù);
連接器模塊內(nèi)置關(guān)系型數(shù)據(jù)庫、Hbase數(shù)據(jù)庫和HDFS的連接驅(qū)動(dòng),供分布式計(jì)算引擎在連接數(shù)據(jù)源和目標(biāo)數(shù)據(jù)存儲(chǔ)時(shí)調(diào)用;
分布式計(jì)算引擎采用分布式的流數(shù)據(jù)處理框架storm進(jìn)行ETL處理,由控制器模塊配置并發(fā)起任務(wù),負(fù)責(zé)數(shù)據(jù)的抽取、清洗和加載任務(wù),將數(shù)據(jù)寫入目標(biāo)數(shù)據(jù)存儲(chǔ)。
[0005]所述拓?fù)浣Y(jié)構(gòu)包括執(zhí)行的線程數(shù)、每個(gè)線程需要抽取的數(shù)據(jù)源劃分、需要清洗的數(shù)據(jù)字段等。
[0006]一種基于storm的數(shù)據(jù)ETL處理方法,利用所述一種基于storm的數(shù)據(jù)ETL系統(tǒng),控制器模塊解析用戶輸入信息,從連接器模塊中選擇數(shù)據(jù)源和目標(biāo)存儲(chǔ)的連接驅(qū)動(dòng),控制器模塊配置分布式計(jì)算引擎的拓?fù)浣Y(jié)構(gòu),分配連接驅(qū)動(dòng)并啟動(dòng)ETL任務(wù);分布式計(jì)算引擎從數(shù)據(jù)源抽取數(shù)據(jù),進(jìn)行數(shù)據(jù)清洗,然后將數(shù)據(jù)寫入目標(biāo)數(shù)據(jù)存儲(chǔ)。
[0007]所述的用戶輸入信息包括sql語句、數(shù)據(jù)源表名、數(shù)據(jù)源連接字符串、目標(biāo)數(shù)據(jù)存儲(chǔ)的連接字符串、執(zhí)行ETL的線程數(shù)、目標(biāo)數(shù)據(jù)的字段分隔符和換行符等。
[0008]所述的控制器模塊配置分布式計(jì)算引擎的拓?fù)浣Y(jié)構(gòu)的過程為:控制器模塊查詢數(shù)據(jù)源表的總條數(shù),對(duì)sql語句進(jìn)行改寫,根據(jù)用戶輸入的線程數(shù)設(shè)置每個(gè)ETL線程的數(shù)據(jù)邊界,控制器模塊從關(guān)系型數(shù)據(jù)庫中抽取數(shù)據(jù)的spout、負(fù)責(zé)清洗數(shù)據(jù)的bolt和往目標(biāo)數(shù)據(jù)存儲(chǔ)寫數(shù)據(jù)的bolt,將連接驅(qū)動(dòng)分別賦給spout和寫目標(biāo)數(shù)據(jù)的bolt,完成storm的spout和bolt的拓?fù)浣Y(jié)構(gòu)的配置。
[0009]本發(fā)明的有益之處是:
本發(fā)明提供了一種基于storm的數(shù)據(jù)ETL系統(tǒng)及處理方法,系統(tǒng)分為控制器模塊、連接器模塊和分布式計(jì)算引擎;控制器模塊負(fù)責(zé)接收用戶命令,解析命令設(shè)置并啟動(dòng)數(shù)據(jù)ETL任務(wù);連接器模塊內(nèi)置關(guān)系型數(shù)據(jù)庫、Hbase數(shù)據(jù)庫和HDFS的連接驅(qū)動(dòng),供分布式計(jì)算引擎在連接數(shù)據(jù)源和目標(biāo)數(shù)據(jù)存儲(chǔ)的時(shí)候調(diào)用;采用storm作為分布式計(jì)算引擎,接收控制模塊設(shè)置的參數(shù),進(jìn)行數(shù)據(jù)ETL任務(wù)。實(shí)現(xiàn)用戶無需編寫storm代碼,只需輸入命令,控制器模塊負(fù)責(zé)解析用戶命令,并且自動(dòng)設(shè)置storm并發(fā)起ETL任務(wù);將所有可支持的數(shù)據(jù)源和目標(biāo)數(shù)據(jù)存儲(chǔ)的連接驅(qū)動(dòng)都封裝在連接器中,供控制器自動(dòng)選擇調(diào)用。本系統(tǒng)配合處理方法應(yīng)用于利用流數(shù)據(jù)框架將關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)集成到數(shù)據(jù)倉(cāng)庫中具有很強(qiáng)的實(shí)用性。
【附圖說明】
[0010]圖1本發(fā)明系統(tǒng)架構(gòu)示意圖。
【具體實(shí)施方式】
[0011]結(jié)合附圖對(duì)本發(fā)明做進(jìn)一步說明。
[0012]一種基于storm的數(shù)據(jù)ETL系統(tǒng),包括控制器模塊、連接器模塊和分布式計(jì)算引擎;
控制器模塊負(fù)責(zé)接收用戶輸入信息,替分布式計(jì)算引擎選擇數(shù)據(jù)源和目標(biāo)數(shù)據(jù)存儲(chǔ)的連接器,設(shè)置分布式計(jì)算引擎的ETL拓?fù)浣Y(jié)構(gòu),設(shè)置完成后調(diào)用分布式計(jì)算引擎發(fā)起ETL任務(wù);
拓?fù)浣Y(jié)構(gòu)包括執(zhí)行的線程數(shù)、每個(gè)線程需要抽取的數(shù)據(jù)源劃分、需要清洗的數(shù)據(jù)字段等。
[0013]連接器模塊內(nèi)置關(guān)系型數(shù)據(jù)庫、Hbase數(shù)據(jù)庫和HDFS的連接驅(qū)動(dòng),供分布式計(jì)算引擎在連接數(shù)據(jù)源和目標(biāo)數(shù)據(jù)存儲(chǔ)時(shí)調(diào)用;
分布式計(jì)算引擎采用分布式的流數(shù)據(jù)處理框架storm進(jìn)行ETL處理,由控制器模塊配置并發(fā)起任務(wù),負(fù)責(zé)數(shù)據(jù)的抽取、清洗和加載任務(wù),將數(shù)據(jù)寫入目標(biāo)數(shù)據(jù)存儲(chǔ)。storm框架中,一個(gè)storm任務(wù)的拓?fù)浣Y(jié)構(gòu)由spout和bolt組成,spout用來接收數(shù)據(jù)流,并把數(shù)據(jù)流傳送給bolt,bolt負(fù)責(zé)清洗數(shù)據(jù),并發(fā)數(shù)據(jù)寫入下一個(gè)bolt或者目標(biāo)數(shù)據(jù)存儲(chǔ)。spout和bolt可以設(shè)置多個(gè)并組成復(fù)雜的DAG圖。spout和bolt組成storm任務(wù)的拓?fù)浣Y(jié)構(gòu),這些可以由控制器模塊根據(jù)用戶的命令自動(dòng)生成。
[0014]一種基于storm的數(shù)據(jù)ETL處理方法,利用上述系統(tǒng),控制器模塊解析用戶輸入信息,用戶輸入信息包括sql語句、數(shù)據(jù)源表名、數(shù)據(jù)源連接字符串、目標(biāo)數(shù)據(jù)存儲(chǔ)的連接字符串、執(zhí)行ETL的線程數(shù)、目標(biāo)數(shù)據(jù)的字段分隔符和換行符等;
控制器模塊從連接器模塊中選擇數(shù)據(jù)源和目標(biāo)存儲(chǔ)的連接驅(qū)動(dòng);
控制器模塊配置分布式計(jì)算引擎的拓?fù)浣Y(jié)構(gòu),分配連接驅(qū)動(dòng)并啟動(dòng)ETL任務(wù);
控制器模塊配置分布式計(jì)算引擎的拓?fù)浣Y(jié)構(gòu)的過程為:控制器模塊查詢數(shù)據(jù)源表的總條數(shù),對(duì)sql語句進(jìn)行改寫,根據(jù)用戶輸入的線程數(shù)設(shè)置每個(gè)ETL線程的數(shù)據(jù)邊界,控制器模塊從關(guān)系型數(shù)據(jù)庫中抽取數(shù)據(jù)的spout、負(fù)責(zé)清洗數(shù)據(jù)的bolt和往目標(biāo)數(shù)據(jù)存儲(chǔ)寫數(shù)據(jù)的bolt,將連接驅(qū)動(dòng)分別賦給spout和寫目標(biāo)數(shù)據(jù)的bolt,完成storm的spout和bolt的拓?fù)浣Y(jié)構(gòu)的配置。
[0015]控制器啟動(dòng)storm的任務(wù),storm開始執(zhí)行數(shù)據(jù)的ETL操作:分布式計(jì)算引擎從數(shù)據(jù)源抽取數(shù)據(jù),進(jìn)行數(shù)據(jù)清洗,然后將數(shù)據(jù)寫入目標(biāo)數(shù)據(jù)存儲(chǔ)。
【主權(quán)項(xiàng)】
1.一種基于Storm的數(shù)據(jù)ETL系統(tǒng),其特征是包括控制器模塊、連接器模塊和分布式計(jì)算引擎; 控制器模塊負(fù)責(zé)接收用戶輸入信息,替分布式計(jì)算引擎選擇數(shù)據(jù)源和目標(biāo)數(shù)據(jù)存儲(chǔ)的連接器,設(shè)置分布式計(jì)算引擎的ETL拓?fù)浣Y(jié)構(gòu),設(shè)置完成后調(diào)用分布式計(jì)算引擎發(fā)起ETL任務(wù); 連接器模塊內(nèi)置關(guān)系型數(shù)據(jù)庫、Hbase數(shù)據(jù)庫和HDFS的連接驅(qū)動(dòng),供分布式計(jì)算引擎在連接數(shù)據(jù)源和目標(biāo)數(shù)據(jù)存儲(chǔ)時(shí)調(diào)用; 分布式計(jì)算引擎采用分布式的流數(shù)據(jù)處理框架storm進(jìn)行ETL處理,由控制器模塊配置并發(fā)起任務(wù),負(fù)責(zé)數(shù)據(jù)的抽取、清洗和加載任務(wù),將數(shù)據(jù)寫入目標(biāo)數(shù)據(jù)存儲(chǔ)。2.根據(jù)權(quán)利要求1所述的一種基于storm的數(shù)據(jù)ETL系統(tǒng),其特征是所述拓?fù)浣Y(jié)構(gòu)包括執(zhí)行的線程數(shù)、每個(gè)線程需要抽取的數(shù)據(jù)源劃分、需要清洗的數(shù)據(jù)字段。3.—種基于storm的數(shù)據(jù)ETL處理方法,其特征是利用權(quán)利要求1或2所述一種基于storm的數(shù)據(jù)ETL系統(tǒng),控制器模塊解析用戶輸入信息,從連接器模塊中選擇數(shù)據(jù)源和目標(biāo)存儲(chǔ)的連接驅(qū)動(dòng),控制器模塊配置分布式計(jì)算引擎的拓?fù)浣Y(jié)構(gòu),分配連接驅(qū)動(dòng)并啟動(dòng)ETL任務(wù);分布式計(jì)算引擎從數(shù)據(jù)源抽取數(shù)據(jù),進(jìn)行數(shù)據(jù)清洗,然后將數(shù)據(jù)寫入目標(biāo)數(shù)據(jù)存儲(chǔ)。4.據(jù)權(quán)利要求3所述的一種基于storm的數(shù)據(jù)ETL處理方法,其特征是所述的用戶輸入信息包括sql語句、數(shù)據(jù)源表名、數(shù)據(jù)源連接字符串、目標(biāo)數(shù)據(jù)存儲(chǔ)的連接字符串、執(zhí)行ETL的線程數(shù)、目標(biāo)數(shù)據(jù)的字段分隔符和換行符。5.據(jù)權(quán)利要求4所述的一種基于storm的數(shù)據(jù)ETL處理方法,其特征是所述的控制器模塊配置分布式計(jì)算引擎的拓?fù)浣Y(jié)構(gòu)的過程為:控制器模塊查詢數(shù)據(jù)源表的總條數(shù),對(duì)sql語句進(jìn)行改寫,根據(jù)用戶輸入的線程數(shù)設(shè)置每個(gè)ETL線程的數(shù)據(jù)邊界,控制器模塊從關(guān)系型數(shù)據(jù)庫中抽取數(shù)據(jù)的spout、負(fù)責(zé)清洗數(shù)據(jù)的bolt和往目標(biāo)數(shù)據(jù)存儲(chǔ)寫數(shù)據(jù)的bolt,將連接驅(qū)動(dòng)分別賦給spout和寫目標(biāo)數(shù)據(jù)的bolt,完成storm的spout和bolt的拓?fù)浣Y(jié)構(gòu)的配置。
【專利摘要】本發(fā)明公開一種基于storm的數(shù)據(jù)ETL系統(tǒng)及處理方法,屬于數(shù)據(jù)ETL管理技術(shù)領(lǐng)域;本發(fā)明系統(tǒng)分為控制器模塊、連接器模塊和分布式計(jì)算引擎;控制器模塊負(fù)責(zé)接收用戶命令,解析命令設(shè)置并啟動(dòng)數(shù)據(jù)ETL任務(wù);連接器模塊內(nèi)置關(guān)系型數(shù)據(jù)庫、Hbase數(shù)據(jù)庫和HDFS的連接驅(qū)動(dòng),供分布式計(jì)算引擎在連接數(shù)據(jù)源和目標(biāo)數(shù)據(jù)存儲(chǔ)的時(shí)候調(diào)用;采用storm作為分布式計(jì)算引擎,接收控制模塊設(shè)置的參數(shù),進(jìn)行數(shù)據(jù)ETL任務(wù)。實(shí)現(xiàn)用戶無需編寫storm代碼,只需輸入命令,控制器模塊負(fù)責(zé)解析用戶命令,并且自動(dòng)設(shè)置storm并發(fā)起ETL任務(wù);將所有可支持的數(shù)據(jù)源和目標(biāo)數(shù)據(jù)存儲(chǔ)的連接驅(qū)動(dòng)都封裝在連接器中,供控制器自動(dòng)選擇調(diào)用。
【IPC分類】G06F17/30
【公開號(hào)】CN105205105
【申請(qǐng)?zhí)枴緾N201510533323
【發(fā)明人】曹連超, 盧軍佐, 亓開元
【申請(qǐng)人】浪潮集團(tuán)有限公司
【公開日】2015年12月30日
【申請(qǐng)日】2015年8月27日