本發(fā)明屬于大數(shù)據(jù)處理,具體涉及一種基于antlr?4的數(shù)據(jù)處理架構(gòu)方法。
背景技術(shù):
1、大數(shù)據(jù)是指大小超出了傳統(tǒng)數(shù)據(jù)庫軟件工具的抓取、存儲、管理和分析能力的數(shù)據(jù)群,因此對大數(shù)據(jù)的處理往往會用到分布式的多臺計(jì)算機(jī)資源,而統(tǒng)籌分布式計(jì)算資源進(jìn)行大數(shù)據(jù)處理相關(guān)的技術(shù)就是大數(shù)據(jù)處理技術(shù)。當(dāng)前主流的大數(shù)據(jù)處理框架和技術(shù)包括hadoop、spark、flink、storm、hive、hbase和kafka等,這些框架或者技術(shù)平臺可以統(tǒng)籌利用分布式的計(jì)算機(jī)資源進(jìn)行大數(shù)據(jù)的分析處理和存儲操作。而大數(shù)據(jù)開發(fā)人員可以利用上述大數(shù)據(jù)處理框架、平臺來構(gòu)建大數(shù)據(jù)處理應(yīng)用程序,從而實(shí)現(xiàn)對海量數(shù)據(jù)的處理、分析工作。
2、語法分析(syntactic?analysis)是根據(jù)某種給定的形式文法對由單詞序列構(gòu)成的輸入文本(比如程序代碼)進(jìn)行分析并確定其語法結(jié)構(gòu)的一種過程。而語法分析器(parser)通常是作為編譯器或解釋器的組件出現(xiàn)的,它的作用是進(jìn)行語法檢查、分析、并構(gòu)建由輸入的單詞組成的數(shù)據(jù)結(jié)構(gòu)(比如抽象語法樹ast)。antlr(another?tool?forlanguage?recognition)是java領(lǐng)域一個(gè)常見的開源語法分析器,開發(fā)人員可以基于antlr構(gòu)建自己的領(lǐng)域語言,從而幫助非研發(fā)背景的業(yè)務(wù)人員更加靈活便捷構(gòu)建地業(yè)務(wù)處理邏輯。
3、在《大數(shù)據(jù)背景下基于動態(tài)可配置規(guī)則的數(shù)據(jù)清洗框架》中,開發(fā)人員提出了一種將動態(tài)可配置規(guī)則與數(shù)據(jù)清洗相結(jié)合的數(shù)據(jù)處理框架。該技術(shù)方案將規(guī)則類型分為drools規(guī)則、正則表達(dá)式規(guī)則和函數(shù)規(guī)則三種,并實(shí)現(xiàn)了對應(yīng)的規(guī)則引擎用來解析規(guī)則的邏輯表達(dá)式,然后基于規(guī)則類型調(diào)用三種規(guī)則的接口來進(jìn)行數(shù)據(jù)處理。
4、該技術(shù)方案存在以下幾個(gè)方面的不足:
5、1、在該技術(shù)方案中,對于數(shù)據(jù)處理規(guī)則配置的靈活性存在不足,因?yàn)樵摪l(fā)明實(shí)現(xiàn)的規(guī)則引擎支持的語法規(guī)則較少;
6、2、在該技術(shù)方案中,數(shù)據(jù)處理規(guī)則的生效機(jī)制不夠及時(shí)便捷,修改數(shù)據(jù)處理規(guī)則后需要重新啟動程序,因?yàn)樵摲桨覆捎昧伺渲梦募姆绞竭M(jìn)行數(shù)據(jù)處理規(guī)則的編排和調(diào)用;
7、3、該技術(shù)方案中,數(shù)據(jù)處理規(guī)則的編寫不夠簡便,因?yàn)槌诵枰渲脭?shù)據(jù)的匹配計(jì)算規(guī)則外還需要額外配置數(shù)據(jù)處理方式(如修改或者丟棄)。
8、現(xiàn)有的基于可配置規(guī)則的大數(shù)據(jù)處理技術(shù)方案中,對運(yùn)行時(shí)數(shù)據(jù)處理邏輯的修改缺乏靈活性和便捷性,比如:1、數(shù)據(jù)處理規(guī)則配置的靈活性存在不足,支持語法規(guī)則較少;2、數(shù)據(jù)處理規(guī)則的生效不夠及時(shí)便捷,比如修改數(shù)據(jù)處理規(guī)則后需要重新編譯部署代碼或者需要重啟程序;3、數(shù)據(jù)處理規(guī)則的編寫不夠簡便等。
技術(shù)實(shí)現(xiàn)思路
1、為了克服現(xiàn)有技術(shù)的不足,本發(fā)明提供了一種基于antlr?4的數(shù)據(jù)處理架構(gòu)方法,該方法支持更加豐富的規(guī)則語法并提供了多種預(yù)置的數(shù)據(jù)計(jì)算規(guī)則,同時(shí)融入了周期更新數(shù)據(jù)處理規(guī)則的熱加載機(jī)制,可以為實(shí)時(shí)和離線大數(shù)據(jù)的處理邏輯編排提供靈活配置、免編譯和熱加載的技術(shù)方案,在大數(shù)據(jù)處理過程中臨時(shí)修改數(shù)據(jù)處理邏輯后并不需要重新編譯部署或者重啟運(yùn)行程序就能及時(shí)便捷地使規(guī)則生效并得到最新數(shù)據(jù)加工邏輯的處理結(jié)果。
2、本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案如下:
3、步驟1:語法規(guī)則定義與配置;
4、根據(jù)領(lǐng)域業(yè)務(wù)需求定義語法和關(guān)鍵詞,然后創(chuàng)建語法規(guī)則文件xlogic.g和關(guān)鍵詞文件xlogic.tokens,并通過antlr生成語法解析相關(guān)的工具類;
5、步驟2:編寫數(shù)據(jù)處理的業(yè)務(wù)表達(dá)式;
6、基于步驟1的語法規(guī)則文件編寫數(shù)據(jù)處理表達(dá)式,并對需要進(jìn)行處理的數(shù)據(jù)配置編寫好的規(guī)則;
7、步驟3:構(gòu)建表達(dá)式輸入流;
8、從數(shù)據(jù)庫中周期讀取步驟2中編寫的數(shù)據(jù)處理表達(dá)式,針對發(fā)生變動的表達(dá)式創(chuàng)建antlrinputstream流;
9、步驟4:詞法分析;
10、處理antlrinputstream流,識別并切分表達(dá)式中的關(guān)鍵詞,然后基于識別結(jié)果創(chuàng)建詞法分析結(jié)果commontokenstream流;
11、步驟5:語法分析;
12、處理步驟4中的詞法分析結(jié)果commontokenstream流,然后基于語法分析結(jié)果構(gòu)建語法樹;
13、步驟6:構(gòu)建表達(dá)式樹;
14、遍歷步驟5中生成的語法樹并構(gòu)建能進(jìn)行數(shù)據(jù)加工處理的表達(dá)式樹xnode;
15、步驟7:數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換;
16、使用spark?stream?api從kafka中讀取實(shí)時(shí)或者離線的大數(shù)據(jù),并將數(shù)據(jù)轉(zhuǎn)換為kmessage結(jié)構(gòu);
17、步驟8:創(chuàng)建數(shù)據(jù)處理上下文;
18、使用步驟7中構(gòu)建的kmessage結(jié)構(gòu)的數(shù)據(jù)和預(yù)置的數(shù)據(jù)處理函數(shù)構(gòu)建數(shù)據(jù)處理上下文context;
19、步驟9:數(shù)據(jù)加工處理;
20、采用遍歷算法對步驟6中構(gòu)建的表達(dá)式樹xnode進(jìn)行遍歷并對步驟8中構(gòu)建的數(shù)據(jù)處理上下文context進(jìn)行加工處理,最終得到數(shù)據(jù)處理結(jié)果;
21、步驟10:數(shù)據(jù)輸出;
22、將處理完成的數(shù)據(jù)轉(zhuǎn)化為字節(jié)流,然后把最終結(jié)果輸出到kafka。
23、優(yōu)選地,所述步驟3中從數(shù)據(jù)庫中周期讀取步驟2中編寫的數(shù)據(jù)處理表達(dá)式是通過表達(dá)式配置與解析模塊完成。
24、優(yōu)選地,所述步驟4中處理antlrinputstream流是通過基于自定義規(guī)則生成的詞法分析器xlogiclexer進(jìn)行。
25、優(yōu)選地,所述步驟5中處理步驟4中的詞法分析結(jié)果commontokenstream流是通過基于自定義規(guī)則生成的語法分析器xlogicparser進(jìn)行。
26、優(yōu)選地,所述步驟6中遍歷步驟5中生成的語法樹是使用自定義的語法樹遍歷器xlogicvisitorimpl通過訪問者模式進(jìn)行。
27、本發(fā)明的有益效果如下:
28、本發(fā)明克服了傳統(tǒng)大數(shù)據(jù)處理業(yè)務(wù)中,對數(shù)據(jù)處理邏輯的配置不夠靈活,數(shù)據(jù)處理邏輯修改后難以及時(shí)便捷地生效的缺點(diǎn),提供了更加豐富語法規(guī)則,使用者可以基于自定義的動態(tài)領(lǐng)域語言和當(dāng)前數(shù)據(jù)處理的業(yè)務(wù)需求來構(gòu)建數(shù)據(jù)處理規(guī)則。本發(fā)明還采用了周期加載數(shù)據(jù)處理規(guī)則的熱加載機(jī)制來調(diào)用構(gòu)建好的數(shù)據(jù)處理規(guī)則而不需要重新編譯部署程序或是重啟程序,從而大大提升了大數(shù)據(jù)處理規(guī)則生效的及時(shí)性和便捷性。
1.一種基于antlr?4的數(shù)據(jù)處理架構(gòu)方法,其特征在于,包括如下步驟:
2.根據(jù)權(quán)利要求1所述的一種基于antlr?4的數(shù)據(jù)處理架構(gòu)方法,其特征在于,所述步驟3中從數(shù)據(jù)庫中周期讀取步驟2中編寫的數(shù)據(jù)處理表達(dá)式是通過表達(dá)式配置與解析模塊完成。
3.根據(jù)權(quán)利要求2所述的一種基于antlr?4的數(shù)據(jù)處理架構(gòu)方法,其特征在于,所述步驟4中處理antlrinputstream流是通過基于自定義規(guī)則生成的詞法分析器xlogiclexer進(jìn)行。
4.根據(jù)權(quán)利要求3所述的一種基于antlr?4的數(shù)據(jù)處理架構(gòu)方法,其特征在于,所述步驟5中處理步驟4中的詞法分析結(jié)果commontokenstream流是通過基于自定義規(guī)則生成的語法分析器xlogicparser進(jìn)行。
5.根據(jù)權(quán)利要求4所述的一種基于antlr?4的數(shù)據(jù)處理架構(gòu)方法,其特征在于,所述步驟6中遍歷步驟5中生成的語法樹是使用自定義的語法樹遍歷器xlogicvisitorimpl通過訪問者模式進(jìn)行。