本發(fā)明涉及一種在多文件格式存儲系統(tǒng)中自動識別文件格式關(guān)聯(lián)統(tǒng)計(jì)的技術(shù),特別是涉及一種利用統(tǒng)一sql(structuredquerylanguage,結(jié)構(gòu)化查詢語言)入口實(shí)現(xiàn)多文件格式自動識別并支持跨地域關(guān)聯(lián)統(tǒng)計(jì)的方法,屬于大數(shù)據(jù)檢索領(lǐng)域。
背景技術(shù):
近幾年來,隨著計(jì)算機(jī)和信息技術(shù)的迅猛發(fā)展和普及應(yīng)用,行業(yè)應(yīng)用系統(tǒng)的規(guī)模迅速擴(kuò)大,行業(yè)應(yīng)用所產(chǎn)生的數(shù)據(jù)呈爆炸性增長。動輒達(dá)到數(shù)百tb甚至數(shù)十至數(shù)百pb規(guī)模的行業(yè)/企業(yè)大數(shù)據(jù)已遠(yuǎn)遠(yuǎn)超出了現(xiàn)有傳統(tǒng)的計(jì)算技術(shù)和信息系統(tǒng)的處理能力,因此,尋求有效的大數(shù)據(jù)處理技術(shù)、方法和手段已經(jīng)成為現(xiàn)實(shí)世界的迫切需求。
隨著需要處理數(shù)據(jù)量越來越多,在單一服務(wù)器系統(tǒng)管轄下根本無法滿足目前的數(shù)據(jù)存儲和數(shù)據(jù)計(jì)算分析的需求,因此產(chǎn)生了分布式文件管理系統(tǒng)和基于分布式文件管理系統(tǒng)的檢索引擎。
分布式文件系統(tǒng)英文名成為dfs(distributedfilesystem),即一種允許文件通過網(wǎng)絡(luò)在多臺主機(jī)上分享的文件系統(tǒng),可以讓多個(gè)機(jī)器上的多個(gè)用戶分享文件和存儲空間。它最大的特點(diǎn)是“通透性”,dfs實(shí)際上是通過網(wǎng)絡(luò)來訪問文件,在用戶和程序看來,就像是訪問本地的磁盤一般。目前應(yīng)用最廣泛的分布式文件系統(tǒng)是hadoop分布式文件系統(tǒng)(hdfs),hdfs是運(yùn)行在通用硬件上的分布式文件系統(tǒng)。hdfs提供了一個(gè)高容錯(cuò)性和高吞吐量的海量數(shù)據(jù)存儲解決方案,已經(jīng)成為在線/離線的海量存儲事實(shí)標(biāo)準(zhǔn),多年來在各種應(yīng)用場景提供了可靠高效的服務(wù)。hdfs中的文件格式大致上分為面向行和面向列兩類。面向行存儲:同一行的數(shù)據(jù)存儲在一起,即連續(xù)存儲,包括sequencefile,mapfile,avro,datafile等。采用這種方式,如果只需要訪問每行的一小部分?jǐn)?shù)據(jù),亦需要將整行讀入內(nèi)存,推遲序列化一定程度上可以緩解這個(gè)問題,但是從磁盤讀取整行數(shù)據(jù)的開銷卻無法避免。面向行的存儲適合于整行數(shù)據(jù)需要同時(shí)處理的情況。面向列存儲:整個(gè)文件被切割為若干列數(shù)據(jù),每一列數(shù)據(jù)一起存儲,包括parquet,rcfile,orcfile等。面向列的格式使得讀取數(shù)據(jù)時(shí),可以跳過不需要的列,適合于只處理每行的一小部分字段的情況。在處理大數(shù)據(jù)檢索時(shí)為了有效地節(jié)省時(shí)間和空間,更適合選用parquet文件格式。在數(shù)據(jù)壓縮方面,parquet文件中數(shù)據(jù)以列的形式存儲,所以能將完全不同的值一起存儲在內(nèi)存中,為存儲的數(shù)據(jù)提供了更高的壓縮率;在i/o操作方面,parquet文件只需掃描部分列,大大減少了i/o操作;在編碼模式方面,列式存儲在壓縮選項(xiàng)外提供了一種高效方式來存儲數(shù)據(jù)。
hbase是一個(gè)構(gòu)建在hdfs上的分布式列存儲系統(tǒng),是典型的key/value系統(tǒng)。主要用于海量非結(jié)構(gòu)化數(shù)據(jù)存儲,hbase將數(shù)據(jù)按照表、行和列進(jìn)行存儲。在存儲結(jié)構(gòu)方面,hbase支持無模式存儲,每行都有一個(gè)可排序的主鍵和任意多的列,列可以根據(jù)需要?jiǎng)討B(tài)的增加,同一張表中不同的行可以有截然不同的列;在數(shù)據(jù)類型方面,hbase中的數(shù)據(jù)都是字符串,沒有類型區(qū)別;在數(shù)據(jù)一致性方面,每個(gè)單元中的數(shù)據(jù)可以有多個(gè)版本,默認(rèn)情況下版本號自動分配,是單元格插入時(shí)的時(shí)間戳;在存儲空間方面,表中的空列并不占用存儲空間,表可以設(shè)計(jì)的非常稀疏;在系統(tǒng)擴(kuò)展方面,hbase依靠橫向擴(kuò)展,通過不斷增加廉價(jià)的商用服務(wù)器,來增加計(jì)算和存儲能力。
lucene是一個(gè)高效的,基于java的全文檢索引擎工具包,它的全文檢索技術(shù)是信息檢索領(lǐng)域廣泛使用的基本技術(shù),具有訪問索引時(shí)間快,多用戶訪問,跨平臺使用的特點(diǎn)。lucene的檢索算法屬于索引檢索,即用空間來換取時(shí)間,主要適用于文檔集的全文檢索,以及海量數(shù)據(jù)庫的模糊檢索,同時(shí)支持單個(gè)和多個(gè)詞匯的查詢,短語查詢,通配符,結(jié)果分級以及排序功能。在建立索引方面,lucene支持多種分詞器對不同的文本進(jìn)行分詞及建立索引;在存儲方面,支持多種壓縮格式,降低數(shù)據(jù)的存儲成本;在存儲方面,lucene具有多種合并索引策略,通過將多個(gè)小文件合并成一個(gè)大文件,提高檢索效率。
綜上所述,在大數(shù)據(jù)存儲系統(tǒng)中,針對不同的應(yīng)用場景通常采用多種存儲模式,在不同存儲模式中進(jìn)行統(tǒng)一關(guān)聯(lián)統(tǒng)計(jì)的需求也越來越大。在關(guān)聯(lián)統(tǒng)計(jì)中統(tǒng)一檢索入口和標(biāo)準(zhǔn),自動識別檢索場景以及解決跨地域的技術(shù)逐漸成為大數(shù)據(jù)分析領(lǐng)域的關(guān)鍵問題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的主要目的是提供在多地域多文件格式存儲系統(tǒng)下進(jìn)行跨地域關(guān)聯(lián)統(tǒng)計(jì)的技術(shù),統(tǒng)一檢索入口,兼容多種數(shù)據(jù)存儲格式,支持多種文件系統(tǒng),優(yōu)化檢索,提升關(guān)聯(lián)統(tǒng)計(jì)效率,有效解決多地域多文件格式下大數(shù)據(jù)關(guān)聯(lián)統(tǒng)計(jì)問題。
本發(fā)明采用的技術(shù)方案如下:
一種基于多文件格式自動識別的跨地域關(guān)聯(lián)統(tǒng)計(jì)方法,其步驟包括:
1)通過統(tǒng)一sql查詢?nèi)肟诮邮誷ql查詢請求;
2)對sql查詢請求進(jìn)行解析,以識別查詢的不同文件格式;
3)全局節(jié)點(diǎn)將解析成功后的查詢請求發(fā)送到對應(yīng)的分節(jié)點(diǎn);
4)各分節(jié)點(diǎn)進(jìn)行相應(yīng)的查詢操作,并將查詢結(jié)果回傳給全局節(jié)點(diǎn);
5)全局節(jié)點(diǎn)對各分節(jié)點(diǎn)回傳的數(shù)據(jù)進(jìn)行關(guān)聯(lián)統(tǒng)計(jì),并輸出統(tǒng)計(jì)結(jié)果。
進(jìn)一步地,步驟1)所述統(tǒng)一sql查詢?nèi)肟谥С侄喾N過濾條件,包括數(shù)值類型的判定、邏輯表達(dá)式、模糊匹配、正則匹配,并且這些過濾條件能夠任意組合。
進(jìn)一步地,步驟2)通過庫表信息獲取系統(tǒng)內(nèi)庫表唯一標(biāo)識,通過標(biāo)識符獲取文件存儲屬性,從而識別不同的文件格式。
進(jìn)一步地,步驟2)所述不同文件格式包括hdfs中的parquet文件;本地磁盤中l(wèi)ucene索引文件;hbase中hfile文件;其中,parquet文件提供離線統(tǒng)計(jì)分析功能,parquet格式支持多層嵌套和多種格式壓縮;lucene文件提供在線系統(tǒng)的實(shí)時(shí)統(tǒng)計(jì)功能和海量數(shù)據(jù)的索引查找,lucene文件本身包含內(nèi)部索引文件并記錄數(shù)據(jù)在文件中的位置信息,加快檢索速度,lucene文件默認(rèn)采用壓縮存儲以有效降低存儲空間;hfile文件提供精確查詢功能,通過key/value存儲模式實(shí)現(xiàn)實(shí)時(shí)查詢,通過mapreduce進(jìn)行離線處理或者批處理。
進(jìn)一步地,步驟2)中若解析失敗,則返回語法錯(cuò)誤。
進(jìn)一步地,步驟4)中若各分節(jié)點(diǎn)查詢成功則將數(shù)據(jù)返回給全局節(jié)點(diǎn),若查詢失敗且沒有超過重查次數(shù),則進(jìn)行重查,若超過重查次數(shù),則返回查詢失敗。
進(jìn)一步地,步驟4)中若數(shù)據(jù)傳輸成功,則結(jié)束本次查詢,若傳輸失敗且沒有超過重傳次數(shù),則進(jìn)行重傳,否則返回傳輸失敗。
進(jìn)一步地,步驟5)中若全局節(jié)點(diǎn)在規(guī)定時(shí)間內(nèi)接收到所有分節(jié)點(diǎn)回傳的數(shù)據(jù),則進(jìn)行下一步關(guān)聯(lián)統(tǒng)計(jì),否則返回查詢錯(cuò)誤。
本發(fā)明的創(chuàng)新點(diǎn)和有益效果如下:
1)在sql統(tǒng)一入口方面,將傳統(tǒng)標(biāo)準(zhǔn)sql與新型全文檢索sql相結(jié)合(lucene文件支持全文檢索),既兼容sql92標(biāo)準(zhǔn),又加入全文檢索和跨地域功能關(guān)聯(lián)統(tǒng)計(jì)功能。保證了語法相對穩(wěn)定的情況下,提高系統(tǒng)的可靠性。
2)在多文件格式自動識別方面,本發(fā)明屏蔽了底層文件格式的差異,使用戶或上層應(yīng)用程序與底層文件系統(tǒng)解耦合,提高了程序和系統(tǒng)的健壯性。
3)在跨地域方面,既保證各數(shù)據(jù)分中心的相對獨(dú)立性,又能將數(shù)據(jù)進(jìn)行全局統(tǒng)計(jì),提高了數(shù)據(jù)的實(shí)際價(jià)值。
附圖說明
圖1為多文件格式系統(tǒng)架構(gòu)模型示意圖;
圖2為場景自動識別模型示意圖;
圖3為關(guān)聯(lián)統(tǒng)計(jì)流程圖;
圖4-1為跨地域關(guān)聯(lián)統(tǒng)計(jì)全局節(jié)點(diǎn)查詢流程圖;
圖4-2為跨地域關(guān)聯(lián)統(tǒng)計(jì)數(shù)據(jù)分節(jié)點(diǎn)查詢流程圖。
具體實(shí)施方式
下面通過具體實(shí)施例和附圖,對本發(fā)明做進(jìn)一步說明。
本發(fā)明的內(nèi)容主要包括以下幾個(gè)方面。
第一,在多文件格式支持上,本發(fā)明使用統(tǒng)一的檢索引擎實(shí)現(xiàn)了針對不同文件格式和檢索引擎的統(tǒng)一調(diào)度和管理。具體來講,支持hdfs中的parquet文件;支持本地磁盤中l(wèi)ucene索引文件;支持hbase中hfile文件。離線數(shù)據(jù)采用hdfs中的parquet文件存儲,在線數(shù)據(jù)采用lucene索引文件存儲,同時(shí)支持模糊檢索,精確檢索數(shù)據(jù)由hbase中的hfile文件存儲。其中,parquet文件提供離線統(tǒng)計(jì)分析功能,如海量數(shù)據(jù)的分組、排序等,parquet格式支持多層嵌套,支持多種格式壓縮,減少磁盤存儲空間,同時(shí)提高文件傳輸速率;lucene文件可提供在線系統(tǒng)的實(shí)時(shí)統(tǒng)計(jì)功能和海量數(shù)據(jù)的索引查找,lucene文件本身包含內(nèi)部索引文件并記錄數(shù)據(jù)在文件中的位置信息,加快檢索速度,lucene文件默認(rèn)采用壓縮存儲,有效降低存儲空間;hfile文件可提供精確查詢功能,通過key/value存儲模式實(shí)現(xiàn)實(shí)時(shí)查詢,通過mapreduce進(jìn)行離線處理或者批處理。因此,可以突破文件格式的限制,應(yīng)用場景更加廣闊。
第二,場景自動識別,本發(fā)明提供統(tǒng)一sql查詢?nèi)肟?,針對不同查詢條件自動判斷并優(yōu)化。本查詢系統(tǒng)支持多種過濾條件,如數(shù)值類型的判定(相等、不等、范圍判定)、邏輯表達(dá)式、模糊匹配、正則匹配等,而且可以將不同文件格式中的數(shù)據(jù)進(jìn)行關(guān)聯(lián)。在過濾條件中可以任意組合,不必指定條件對應(yīng)的文件格式,在sql語句解析中,本發(fā)明會自動識別各種場景對應(yīng)的文件格式,例如對離線數(shù)據(jù)進(jìn)行每日統(tǒng)計(jì),對在線和離線數(shù)據(jù)中同一業(yè)務(wù)對象進(jìn)行關(guān)聯(lián)分組統(tǒng)計(jì)等。這樣可以簡化sql查詢語句,使查詢更加靈活。具體地,sql解析組件通過庫表信息獲取系統(tǒng)內(nèi)庫表唯一標(biāo)識,通過標(biāo)識符獲取文件存儲屬性,從而實(shí)現(xiàn)了此處所說的場景自動識別。另外,sql還可以通過檢索的具體語句來進(jìn)行優(yōu)化,在保證返回值的正確的情況下,優(yōu)先選擇更合適的文件格式。比如,統(tǒng)計(jì)場景會選擇parquet,簡單檢索會選擇lucene,精確查找會選擇hfile等。
第三,關(guān)聯(lián)統(tǒng)計(jì),本發(fā)明通過關(guān)聯(lián)條件并優(yōu)化執(zhí)行流程將相關(guān)數(shù)據(jù)進(jìn)行高效快速的關(guān)聯(lián)統(tǒng)計(jì),支持多表關(guān)聯(lián),分組,排序等。其中,關(guān)聯(lián)包括全關(guān)聯(lián)、左關(guān)聯(lián)、右關(guān)聯(lián)。在執(zhí)行關(guān)聯(lián)統(tǒng)計(jì)時(shí),優(yōu)化查詢計(jì)劃,優(yōu)先進(jìn)行條件過濾,避免傳輸和計(jì)算大量無效數(shù)據(jù)。所述多表關(guān)聯(lián)、分組、排序、全關(guān)聯(lián)、左關(guān)聯(lián)、右關(guān)聯(lián)來自標(biāo)準(zhǔn)sql定義,多表關(guān)聯(lián)指的是sql的join語法、分組是指groupby語法、排序是指orderby語法、全關(guān)聯(lián)是指fulljoin、左關(guān)聯(lián)leftjoin、右關(guān)聯(lián)是rightjoin。
第四,跨地域。目前,在實(shí)際應(yīng)用中單一數(shù)據(jù)中心已經(jīng)無法滿足需求,更多的系統(tǒng)采用多數(shù)據(jù)中心模式,即一個(gè)全局點(diǎn)(國家中心點(diǎn)),多個(gè)數(shù)據(jù)分節(jié)點(diǎn)(省點(diǎn))模式。為了能夠?qū)⒍鄠€(gè)數(shù)據(jù)中心的數(shù)據(jù)進(jìn)行統(tǒng)一關(guān)聯(lián)查詢,本發(fā)明支持由全局點(diǎn)下發(fā)跨地域查詢?nèi)蝿?wù),由全局點(diǎn)進(jìn)行sql解析,并將查詢?nèi)蝿?wù)下發(fā)到各個(gè)分節(jié)點(diǎn),將各個(gè)數(shù)據(jù)中心的相關(guān)數(shù)據(jù)拉取到本地,再進(jìn)行關(guān)聯(lián)統(tǒng)計(jì)。在拉取各分中心數(shù)據(jù)時(shí),采用多種優(yōu)化方式,包括將sql查詢語句中的過濾條件下發(fā)到所有數(shù)據(jù)中心,只傳輸符合條件的數(shù)據(jù),大大降低傳輸?shù)臄?shù)據(jù)量,加快查詢效率。
在基于多文件格式自動識別多跨地域關(guān)聯(lián)統(tǒng)計(jì)技術(shù)的設(shè)計(jì)上,本發(fā)明將多種sql語句進(jìn)行統(tǒng)一定制,兼容sql92標(biāo)準(zhǔn),在查詢不同文件格式時(shí),采用統(tǒng)一sql入口,自動識別查詢場景,同時(shí)支持跨地域關(guān)聯(lián)統(tǒng)計(jì)。
圖1給出了多文件系統(tǒng)架構(gòu)模型,包括接口層、解析層、分發(fā)層和存儲層。其中接口層提供統(tǒng)一sql查詢?nèi)肟?;解析層包含sql解析組件,用于解析sql查詢請求,自動識別各種場景對應(yīng)的文件格式;分發(fā)層包含數(shù)據(jù)傳輸組件,在sql查詢請求解析成功后,全局節(jié)點(diǎn)通過數(shù)據(jù)傳輸組件將相應(yīng)請求發(fā)送到對應(yīng)的分節(jié)點(diǎn);底層的存儲層是多種存儲引擎和檢索引擎,其中包含多種文件格式。底層存儲引擎和檢索引擎的數(shù)量和規(guī)模可根據(jù)實(shí)際應(yīng)用做不同調(diào)整,本發(fā)明為上層應(yīng)用屏蔽底層的文件格式差異,實(shí)現(xiàn)透明查詢和透明傳輸。此處的接口層、解析層、分發(fā)層和存儲層是一個(gè)抽象,在全局點(diǎn)部署接口層、解析層、分發(fā)層;在分節(jié)點(diǎn)部署解析層、分發(fā)層和存儲層。雖然有交叉,但是交叉部分在不同的地點(diǎn)的作用是不同的。解析層在全局點(diǎn)是處理全局語句的解析;在分節(jié)點(diǎn)則只是處理本地語句的解析。分發(fā)層在全局點(diǎn)用于數(shù)據(jù)的匯集,在分節(jié)點(diǎn)則是用于收集本地的數(shù)據(jù),并發(fā)送至全局點(diǎn)。
圖2給出了自動識別模型結(jié)構(gòu)。本發(fā)明具有自動識別文件格式功能,因此采用統(tǒng)一sql入口,最大程度上減少系統(tǒng)復(fù)雜性。系統(tǒng)中的sql解析組件通過庫表信息獲取系統(tǒng)內(nèi)庫表唯一標(biāo)識,通過標(biāo)識符獲取文件存儲屬性,并進(jìn)行相應(yīng)查詢。圖2中tbl_id表示一個(gè)表的唯一標(biāo)識,store屬性表示該表的存儲方式。
圖3給出了關(guān)聯(lián)統(tǒng)計(jì)查詢流程圖,如圖所示,主要包括以下核心步驟:
(1)全局節(jié)點(diǎn)在接收所有分節(jié)點(diǎn)(即數(shù)據(jù)分中心,如圖3中的數(shù)據(jù)中心1、2、3)返回的數(shù)據(jù)后,將數(shù)據(jù)存入存儲引擎;
(2)調(diào)用檢索引擎進(jìn)行關(guān)聯(lián)統(tǒng)計(jì);
(3)若查詢成功則將數(shù)據(jù)返回結(jié)果,若查詢失敗且沒有超過重查次數(shù),則進(jìn)行重查,若超過重查次數(shù),則返回查詢失敗。
圖4-1給出了跨區(qū)域關(guān)聯(lián)統(tǒng)計(jì)全局節(jié)點(diǎn)查詢流程圖,如圖所示,全局節(jié)點(diǎn)主要包括以下核心步驟:
(1)全局節(jié)點(diǎn)在接收sql查詢請求后,由sql解析組件進(jìn)行解析。
(2)若解析成功,則將相應(yīng)請求發(fā)送到對應(yīng)的分節(jié)點(diǎn),并等待回傳數(shù)據(jù)。若解析失敗,則返回語法錯(cuò)誤。
(3)若在規(guī)定時(shí)間內(nèi)接收到所有分節(jié)點(diǎn)回傳的數(shù)據(jù),則進(jìn)行下一步關(guān)聯(lián)統(tǒng)計(jì),否則返回查詢錯(cuò)誤。
(4)在正確接收到所需數(shù)據(jù)后,根據(jù)關(guān)聯(lián)條件,對數(shù)據(jù)進(jìn)行關(guān)聯(lián)統(tǒng)計(jì),并返回統(tǒng)計(jì)結(jié)果。此處的關(guān)聯(lián)統(tǒng)計(jì)主要是指通過sql的方式由用戶撰寫并提交,只要符合sql92的關(guān)聯(lián)統(tǒng)計(jì)語法都是支持的。本發(fā)明的重點(diǎn)不是對關(guān)聯(lián)統(tǒng)計(jì)進(jìn)行優(yōu)化,而是關(guān)注于使用多種文件格式,并在多種文件格式之間支持關(guān)聯(lián)統(tǒng)計(jì)的操作。
下面提供一個(gè)關(guān)聯(lián)統(tǒng)計(jì)的例子:
用戶提交一個(gè)sql語句:selectt1.id,count(t1.income)fromtest1t1jointest2t2ont1.id=t2.idwheret1.id>10;
本案例中,支持針對上述語句在多個(gè)數(shù)據(jù)中心的統(tǒng)一執(zhí)行,并支持將各個(gè)分中心的統(tǒng)計(jì)結(jié)果返回,在全局點(diǎn)統(tǒng)一匯總。
本程序會識別出表test1和test2的存儲類型,如果一個(gè)是parquet、一個(gè)是lucene和parquet都有,則優(yōu)先選擇parquet進(jìn)行join操作(關(guān)聯(lián)操作);如果一個(gè)表的parquet文件損壞或異常,依然可以使用lucene進(jìn)行join操作(關(guān)聯(lián)操作)。
圖4-2給出了跨區(qū)域關(guān)聯(lián)統(tǒng)計(jì)數(shù)據(jù)分節(jié)點(diǎn)查詢流程圖,如圖所示,數(shù)據(jù)分節(jié)點(diǎn)主要包括以下核心步驟:
(1)在接受全局節(jié)點(diǎn)的查詢請求后,進(jìn)行查詢操作。
(2)由sql解析組件解析sql語句,可以自動識別文件格式,并進(jìn)行相應(yīng)查詢。
(3)若查詢成功則將數(shù)據(jù)返回給全局節(jié)點(diǎn),若查詢失敗且沒有超過重查次數(shù),則進(jìn)行重查,若超過重查次數(shù),則返回查詢失敗。
(4)若數(shù)據(jù)傳輸成功,則結(jié)束本次查詢,若傳輸失敗且沒有超過重傳次數(shù),則進(jìn)行重傳,否則返回傳輸失敗。
本發(fā)明中重查次數(shù)、重傳次數(shù)可以使用配置文件設(shè)定,即在配置文件中預(yù)先設(shè)定合適的值。
以上實(shí)施例僅用以說明本發(fā)明的技術(shù)方案而非對其進(jìn)行限制,本領(lǐng)域的普通技術(shù)人員可以對本發(fā)明的技術(shù)方案進(jìn)行修改或者等同替換,而不脫離本發(fā)明的精神和范圍,本發(fā)明的保護(hù)范圍應(yīng)以權(quán)利要求書所述為準(zhǔn)。