據(jù)查詢方法的流程圖;
[0053]圖3為查詢?nèi)蝿?wù)1在Hive系統(tǒng)中對(duì)應(yīng)的多種操作算子的示意圖;
[0054] 圖4為本發(fā)明實(shí)施例中將Mapl節(jié)點(diǎn)中的Filter和Select發(fā)送給硬件處理器件的示 意圖;
[0055] 圖5為本發(fā)明實(shí)施例中以Hive系統(tǒng)為例,將第一映射節(jié)點(diǎn)中的操作算子發(fā)送給 FPGA執(zhí)行的整體架構(gòu)示意圖;
[0056] 圖6為本發(fā)明實(shí)施例中根據(jù)Q個(gè)查詢條件生成真值表的流程圖;
[0057] 圖7為本發(fā)明實(shí)施例中數(shù)據(jù)查詢裝置的結(jié)構(gòu)框圖;
[0058] 圖8為本發(fā)明實(shí)施例中數(shù)據(jù)查詢裝置的結(jié)構(gòu)示意圖;
[0059] 圖9為本發(fā)明實(shí)施例中數(shù)據(jù)查詢裝置還包括存儲(chǔ)器的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0060] 為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例 中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是 本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員 在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0061] 本發(fā)明實(shí)施例所提供的數(shù)據(jù)查詢方法適用于數(shù)據(jù)查詢系統(tǒng),該數(shù)據(jù)查詢系統(tǒng)可以 在數(shù)據(jù)查詢裝置中運(yùn)行以執(zhí)行用戶的查詢操作,也就是說,本發(fā)明實(shí)施例中的數(shù)據(jù)查詢方 法可以應(yīng)用于數(shù)據(jù)查詢裝置(例如服務(wù)器),其中,數(shù)據(jù)查詢系統(tǒng)例如是Hi ve(-種數(shù)據(jù)倉庫 工具)系統(tǒng),等等。
[0062] 在現(xiàn)有技術(shù)中,通過上述數(shù)據(jù)查詢系統(tǒng)執(zhí)行數(shù)據(jù)查詢?nèi)蝿?wù)的整個(gè)查詢流程一般都 是通過數(shù)據(jù)查詢裝置的CPU對(duì)軟件調(diào)度完成,然而,在CPU的時(shí)鐘頻率為定值的前提下,隨著 待查詢數(shù)據(jù)的數(shù)據(jù)量的逐漸增大,查詢所花費(fèi)的時(shí)間相應(yīng)地也會(huì)越來越長(zhǎng),進(jìn)而導(dǎo)致數(shù)據(jù) 查詢的效率也越來越低,無法滿足用戶對(duì)于查詢效率的需求,本發(fā)明實(shí)施例所提供的數(shù)據(jù) 查詢方法,就是為了解決目前在進(jìn)行數(shù)據(jù)查詢時(shí)的查詢效率較低的技術(shù)問題。
[0063]進(jìn)一步地,硬件處理器件在工作過程中無需通過軟件頻繁調(diào)度,占用CPU的資源較 少,對(duì)CPU的消耗也較低,同時(shí),對(duì)于同等數(shù)據(jù)量的數(shù)據(jù)來說,通過硬件處理器件進(jìn)行查詢處 理處理所花費(fèi)的時(shí)間要少于全部通過CPU調(diào)度軟件進(jìn)行查詢處理所花費(fèi)的時(shí)間,也就是說, 硬件處理器件由于其自身較快的運(yùn)算能力,相對(duì)于全部通過CPU調(diào)度軟件對(duì)數(shù)據(jù)進(jìn)行查詢 處理的效率可以更高,那么如果通過硬件處理器件對(duì)原本全部由CPU通過對(duì)軟件進(jìn)行調(diào)度 以進(jìn)行的查詢操作進(jìn)行分擔(dān)和協(xié)同處理的話,自然也就可以在一定程度上縮短查詢時(shí)間, 進(jìn)而提尚查詢效率。
[0064] 基于上述思想,本發(fā)明實(shí)施例利用硬件處理器件對(duì)原本全部由CPU通過對(duì)軟件進(jìn) 行調(diào)度執(zhí)行的查詢?nèi)蝿?wù)進(jìn)行分擔(dān)和協(xié)同處理的技術(shù)方案,提供一種數(shù)據(jù)查詢方法。
[0065] 本發(fā)明實(shí)施例中,硬件處理器件可以是指具有邏輯運(yùn)算能力的某些特定的硬件處 理器件,例如可以是??6六、6?1]、05?,等等。另外,硬件處理器件可以是數(shù)據(jù)查詢裝置中原本 設(shè)置的器件,或者也可以是通過數(shù)據(jù)查詢裝置上設(shè)置的例如PCIE插槽等接口新接入的器 件,等等,本發(fā)明對(duì)于硬件處理器件與數(shù)據(jù)處理裝置之間的接入方式不做具體限定。
[0066] 在實(shí)際中,不同的數(shù)據(jù)查詢系統(tǒng)一般具有不同的查詢機(jī)制和查詢算法,并且通過 硬件處理器件進(jìn)行輔助查詢的具體方式也可能不同,又由于Hive系統(tǒng)可利用集群處理大數(shù) 據(jù)的SQL(Structured Query Language,結(jié)構(gòu)化查詢語言)操作任務(wù),目前已被業(yè)界普遍用 于對(duì)海量數(shù)據(jù)進(jìn)行分析和處理,所以,為了便于本領(lǐng)域技術(shù)人員對(duì)本發(fā)明實(shí)施例中的技術(shù) 方案進(jìn)行理解,本申請(qǐng)人在后續(xù)將以Hive系統(tǒng)為例對(duì)本發(fā)明實(shí)施例中的數(shù)據(jù)查詢方法進(jìn)行 說明。
[0067]為了便于閱讀者后續(xù)的理解,以下對(duì)Hive系統(tǒng)進(jìn)行簡(jiǎn)單介紹。
[0068] Hive系統(tǒng)是基于Hadoop(-種軟件框架)的數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文 件映射為一張數(shù)據(jù)庫表,并提供完整的SQL查詢功能,可以將SQL語句轉(zhuǎn)換為Map/Reduce (映 射/歸約)任務(wù)進(jìn)行運(yùn)行,Hive系統(tǒng)是一種可以存儲(chǔ)、查詢和分析大規(guī)模數(shù)據(jù)的機(jī)制。Hive系 統(tǒng)主要包括用戶接口組件、元數(shù)據(jù)存儲(chǔ)組件、驅(qū)動(dòng)組件和Hadoop,請(qǐng)參考圖1,圖1為Hive系 統(tǒng)的架構(gòu)示意圖。
[0069]其中,用戶接口組件是Hive系統(tǒng)中用于與用戶進(jìn)行交互的接口,一般主要有三個(gè), 其中比較常用的是CLI(Command Line Interface,命令行界面)。
[0070]元數(shù)據(jù)存儲(chǔ)組件,,Hive系統(tǒng)通過元數(shù)據(jù)存儲(chǔ)組件將元數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫中,Hive 系統(tǒng)中的元數(shù)據(jù)包括表的名字,表的列和分區(qū)及其屬性、表的屬性、表的數(shù)據(jù)所在目錄,等 等。
[0071 ] 驅(qū)動(dòng)組件,主要可以包括Compiler (編譯器)、Optimizer (優(yōu)化器)和Executor (執(zhí) 行器),用于完成SQL查詢語句從詞法分析、語法分析、編譯、優(yōu)化以及查詢計(jì)劃的生成,生成 的查詢計(jì)劃存儲(chǔ)在HDFS(Hadoop Distributed File System,Hadoop的分布式文件系統(tǒng)) 中,并由Map/Reduce(映射/歸約)調(diào)用執(zhí)行。
[0072] Hadoop是能夠?qū)Υ罅繑?shù)據(jù)進(jìn)行分布式處理的軟件框架,Hadoop的核心設(shè)計(jì)是便是 HDFS和Map/Reduce。
[0073]其中,HDFS位于Hadoop的底層,用于存儲(chǔ)Hadoop集群中所有存儲(chǔ)節(jié)點(diǎn)上的文件,至 于文件的存儲(chǔ)格式可以具有多種,例如Hive系統(tǒng)的表數(shù)據(jù)一般是以0RC(0ptimiZed Row Co lumnar,優(yōu)化行列)格式存儲(chǔ)在HDFS中的。而在HDFS的上一層是Map/Reduce,Map/Reduce 用于對(duì)大規(guī)模數(shù)據(jù)集進(jìn)行并行運(yùn)算,也就是說,在Hive系統(tǒng)中,HDFS用于存儲(chǔ)海量數(shù)據(jù), Map/Reduce用于對(duì)海量數(shù)據(jù)進(jìn)行計(jì)算和處理。
[0074] Map/Reduce是一種編程模型,在分布式計(jì)算中,Map/Reduce負(fù)責(zé)處理并行編程中 分布式存儲(chǔ)、工作調(diào)度、負(fù)載均衡、容錯(cuò)均衡、容錯(cuò)處理以及網(wǎng)絡(luò)通信等復(fù)雜問題,可以把 Map/Reduce的處理過程高度抽象為兩個(gè)函數(shù),即Map(映射)和Reduce(歸約),Map負(fù)責(zé)把任 務(wù)分解成多個(gè)任務(wù),Reduce負(fù)責(zé)把分解后的多任務(wù)處理的結(jié)果進(jìn)行匯總。
[0075]通過Map/Reduce進(jìn)行并行運(yùn)算,可以認(rèn)為是一臺(tái)服務(wù)器(即數(shù)據(jù)查詢裝置)將多塊 數(shù)據(jù)進(jìn)行并行處理,其中,可以將一臺(tái)服務(wù)器看作是一個(gè)物理主節(jié)點(diǎn),將Map節(jié)點(diǎn)和Reduce 節(jié)點(diǎn)看作是設(shè)置在物理主節(jié)點(diǎn)中的邏輯節(jié)點(diǎn),當(dāng)然,一個(gè)物理主節(jié)點(diǎn)可以同時(shí)管理多個(gè)Map 節(jié)點(diǎn)和多個(gè)Reduce節(jié)點(diǎn),而對(duì)于整個(gè)Hive系統(tǒng)來說,可以包括多個(gè)物理主節(jié)點(diǎn),而多個(gè)物理 主節(jié)點(diǎn)分別管理的多個(gè)邏輯節(jié)點(diǎn)(例如多個(gè)Map節(jié)點(diǎn)和多個(gè)Reduc e節(jié)點(diǎn))之間可以跨物理主 節(jié)點(diǎn)執(zhí)行任務(wù)。可以這樣理解,Map/Reduce采用"分而治之"的思想,把對(duì)大規(guī)模數(shù)據(jù)集的操 作,分發(fā)給每個(gè)物理主節(jié)點(diǎn)管理下的各個(gè)分邏輯節(jié)點(diǎn)共同完成,然后通過整合各個(gè)節(jié)點(diǎn)的 中間結(jié)果,得到最終結(jié)果,簡(jiǎn)單地說,Map/Reduce就是"任務(wù)的分解與結(jié)果的匯總"。
[0076] 綜上可以看出,Hive系統(tǒng)主要是利用Hadoop平臺(tái)的Map/Reduce分布并行的處理能 力,把SQL操作分配到多個(gè)Map節(jié)點(diǎn)和多個(gè)Reduce節(jié)點(diǎn)上進(jìn)行處理,以實(shí)現(xiàn)使用SQL對(duì)超大數(shù) 據(jù)庫的查詢處理。
[0077]另外,本文中術(shù)語"和/或",僅僅是一種描述關(guān)聯(lián)對(duì)象的關(guān)聯(lián)關(guān)系,表示可以存在 三種關(guān)系,例如,A和/或B,可以表示:?jiǎn)为?dú)存在A,同時(shí)存在A和B,單獨(dú)存在B這三種情況。另 外,本文中字符7",如無特殊說明,一般表示前后關(guān)聯(lián)對(duì)象是一種"或"的關(guān)系。
[0078]下面結(jié)合附圖對(duì)本發(fā)明實(shí)施例作進(jìn)一步詳細(xì)的描述。
[0079] 請(qǐng)參見圖2,本發(fā)明實(shí)施例提供一種數(shù)據(jù)查詢方法,該方法可以應(yīng)用于數(shù)據(jù)查詢裝 置,該數(shù)據(jù)查詢裝置中運(yùn)行有數(shù)據(jù)查詢系統(tǒng)。該方法的流程描述如下。
[0080] 步驟201:獲取用于指示查詢?nèi)蝿?wù)的查詢命令。
[0081] 當(dāng)用戶具有查詢需求時(shí),可以通過數(shù)據(jù)查詢裝置輸入查詢語句,具體來說,可以通 過數(shù)據(jù)查詢裝置中運(yùn)行的數(shù)據(jù)查詢系統(tǒng)所提供的用戶接口組件輸入查詢語句,以Hive系統(tǒng) 為例,用戶可以通過Hive系統(tǒng)中的CLI輸入查詢語句,在獲得查詢語句之后,數(shù)據(jù)查詢裝置 可以對(duì)查詢語句進(jìn)行解析,確定出能夠通過數(shù)據(jù)查詢裝置直接識(shí)別的查詢命令,實(shí)現(xiàn)將用 戶的查詢語句翻譯為查詢命令的過程,同時(shí)可以確定出用以指示數(shù)據(jù)查詢裝置具體需要執(zhí) 行的查詢?nèi)蝿?wù)。
[0082] 對(duì)于用戶輸入的查詢語句的具體類型,可以根據(jù)數(shù)據(jù)查詢系統(tǒng)所支持的語言而 定,例如對(duì)于Hive系統(tǒng)來說,可以支持SQL或HQL(Hibernate Query Language,類SQL)查詢 語句的查詢。
[0083] 步驟202:根據(jù)查詢命令確定執(zhí)行查詢?nèi)蝿?wù)所需要的操作算子,操作算子用于指示 執(zhí)行查詢?nèi)蝿?wù)所需進(jìn)行的操作。
[0084] 例如一般來說,用于執(zhí)行查詢?nèi)蝿?wù)所需要的操作算子可以只包括一種,或者也可 以包括多種,為了便于描述,本發(fā)明中例如將執(zhí)行查詢?nèi)蝿?wù)所需要的操作算子稱作Μ種操作 算子,那么Μ的值例如可以是1,5,7,等等,Μ的具體取值例如一般隨數(shù)據(jù)查詢系統(tǒng)的查詢機(jī) 制和查詢?nèi)蝿?wù)的不同而不同。
[0085]以Hive系統(tǒng)為例,請(qǐng)參見圖3,圖3是在Hive系統(tǒng)中的一個(gè)查詢?nèi)蝿?wù)(例如為查詢?nèi)?務(wù)1)所對(duì)應(yīng)的多種操作算子的示意圖,即用于執(zhí)行查詢?nèi)蝿?wù)1所需要的多種操作算子的示 意圖,具體來說,是以一個(gè)Map(即映射1,例如稱作Map 1)節(jié)點(diǎn)和一個(gè)Reduce(即歸約1,例如 稱作Reducel)節(jié)點(diǎn)為例進(jìn)行說明,其它Map節(jié)點(diǎn)和其它Reduce節(jié)點(diǎn)與示出的Mapl節(jié)點(diǎn)和 Reducel節(jié)點(diǎn)所執(zhí)行的操作算子可以相同,所以在圖3中就沒有將其它Map節(jié)點(diǎn)和Reduce節(jié) 點(diǎn) 不出了。
[0086] 可見,對(duì)于查詢?nèi)蝿?wù)1來說,需要先執(zhí)行RecordReader(文件解析),以從HDFS中讀 取待查詢數(shù)據(jù),再通過Mapl節(jié)點(diǎn)執(zhí)行5種操作算子,以及通過Reducel節(jié)點(diǎn)執(zhí)行3種操作算 子,可見,根據(jù)圖3所示,用于執(zhí)行查詢?nèi)蝿?wù)1所需要的操作算子有9種,而9種操作算子具體 包括RecordReader、Map 1節(jié)點(diǎn)中的5種操作算子和Reduce 1節(jié)點(diǎn)中的3種操作算子。
[0087]另外,從圖3可以看出,示出的Mapl節(jié)點(diǎn)和Reducel節(jié)點(diǎn)中存在名稱相同的操作算 子,即Groupby (分組),在具體實(shí)施過程中,雖然名稱相同,但是由于是在Mapl節(jié)點(diǎn)和 Reducel節(jié)點(diǎn)中分別執(zhí)行的操作算子,所以可以將其看作是兩種不同的操作算子。
[0088]步驟203:從需要的操作算子中確定需要硬件處理器件執(zhí)行的操作算子。
[0089]由于硬件處理器件的硬件運(yùn)算速度快于通過調(diào)度軟件對(duì)數(shù)據(jù)進(jìn)行處理的速度,所 以當(dāng)采用硬件處理器件協(xié)同處理或者替代處理的方式,對(duì)于同等數(shù)據(jù)量來說,通過硬件處 理器件處理的話,可以在一定程度上縮短查詢的時(shí)間,進(jìn)而提高查詢效率,所以在確定執(zhí)行 查詢?nèi)蝿?wù)所需要的操作算子之后,即在確定Μ種操作算子之后,進(jìn)一步可以從中確定需要由 硬件處理器件執(zhí)行的操作算子,以便通過硬件處理器件執(zhí)行。
[0090] 在具體實(shí)施過程中,例如可以根據(jù)Μ的具體取值、數(shù)據(jù)查詢系統(tǒng)的查詢機(jī)制、硬件 處理器件的實(shí)際運(yùn)算能力和用戶的實(shí)際查詢需求等因素綜合考慮是將Μ種操作算子中的部 分操作算子或全部操作算子以及具體將Μ種操作算子中的哪些操作算子下發(fā)給硬件處理器 件執(zhí)行。
[0091] 可選的,例如可以按照以下幾種確定方式從Μ種操作算子中確定出需要硬件處理 器件執(zhí)行的操作算子。
[0092]第一種確定方式:
[0093] 可選的,從需要的操作算子中確定需要硬件處理器件執(zhí)行的操作算子,包括:確定 查詢?nèi)蝿?wù)包括的至少一個(gè)子任務(wù)中執(zhí)行時(shí)間大于第一閾值的子任務(wù);確定執(zhí)行時(shí)間大于第 一閾值的子任務(wù)所需要的操作算子為需要硬件處理器件執(zhí)行的操作算子。
[0094] 對(duì)于某些數(shù)據(jù)查詢系統(tǒng)而言,在執(zhí)行查詢?nèi)蝿?wù)時(shí),一般可以先將查詢?nèi)蝿?wù)分解為 至少一個(gè)子任務(wù),例如分解為至少一個(gè)邏輯任務(wù),并通過至少一個(gè)邏輯節(jié)點(diǎn)分別對(duì)應(yīng)執(zhí)行 至少一個(gè)邏輯任務(wù),以實(shí)現(xiàn)對(duì)查詢?nèi)蝿?wù)的并行執(zhí)行。
[0095]以Hive系統(tǒng)為例,可以將查詢?nèi)蝿?wù)分解為由多個(gè)Map節(jié)點(diǎn)執(zhí)行的多個(gè)Map任務(wù)和由 多個(gè)Reduce節(jié)點(diǎn)執(zhí)行的多個(gè)Reduce任務(wù),此時(shí)可以將多個(gè)Map任務(wù)和多個(gè)Reduce任務(wù)的總 和理解為是本發(fā)明實(shí)施例中的至少一個(gè)子任務(wù),繼續(xù)參見圖3,以Mapl節(jié)點(diǎn)和Reduce 1節(jié)點(diǎn) 為例,假設(shè)由Mapl節(jié)點(diǎn)執(zhí)行的子任務(wù)是Map任務(wù)1,由Reducel節(jié)點(diǎn)執(zhí)行的子任務(wù)是Reduce任 務(wù)1,且第一閾值是300ys(微秒),也就是說,可以只從特定邏輯節(jié)點(diǎn)執(zhí)行的操作算子中確定 需要發(fā)送給硬件處理器件執(zhí)行的操作算子。
[0096] 若確定Mapl節(jié)點(diǎn)執(zhí)行Map任務(wù)1所花費(fèi)的時(shí)間大于300ys,則可以將通過Mapl節(jié)點(diǎn) 執(zhí)行的TableScan(表掃描)、Fi Iter (過濾)、Select (投影)、Groupby (Map中分組)和 ReduceSink(歸并準(zhǔn)備)這5種操作算子中的部分操作算子或全部操作算子確定為需要由硬 件處理器件執(zhí)行的操作算子。
[0097] 若確定Reducel節(jié)點(diǎn)執(zhí)行Reduce任務(wù)1所花費(fèi)的時(shí)間大于300ys,則可以將通過 Reducel節(jié)點(diǎn)執(zhí)行的Reduce(歸約)、Groupby(Reduce中分組)和FileSink(文件整理)這3種 操作算子中的部分操作算子或全部操作算子確定為需要由硬件處理器件執(zhí)行的操作算子。
[0098 ] 若確定Map 1節(jié)點(diǎn)執(zhí)行Map任務(wù)1所花費(fèi)的時(shí)間和Re du c e 1節(jié)點(diǎn)執(zhí)行Re du c e任務(wù)1所 花費(fèi)均大于300ys,則可以同時(shí)將與Mapl節(jié)點(diǎn)對(duì)應(yīng)的5種操作算子和與Reducel節(jié)點(diǎn)對(duì)應(yīng)的3 種操作算子中的部分操作算子或全部操作算子發(fā)送給硬件處理器件執(zhí)行。
[00"] 在具體實(shí)施過程中,其它Map節(jié)點(diǎn)和Reduce節(jié)點(diǎn)可以采用與Mapl節(jié)點(diǎn)和Reducel節(jié) 點(diǎn)相同的處理方式。另外,根據(jù)Hive系統(tǒng)的特性可知,在Map節(jié)點(diǎn)所花費(fèi)的時(shí)間一般要遠(yuǎn)大 于在Reduce節(jié)點(diǎn)處所花費(fèi)的時(shí)間,所以在具體實(shí)施時(shí),可選的,可以只考慮將Map節(jié)點(diǎn)中的 部分操作算子或全部操作算子作為需要由硬件處理器件執(zhí)行的操作算子,這樣也可以在較 大程度上提高查詢效率。
[0100]由于第一閾值可以隨意設(shè)置,通過將多個(gè)子任務(wù)的執(zhí)行時(shí)間與第一閾值進(jìn)行比較 的方式,可以確定出操作相對(duì)比較耗時(shí)的一些子任務(wù),而操作比較耗時(shí)的子任務(wù)說明占用 CPU的資源越多,所以可以將執(zhí)行這些子任務(wù)所需要的操作算子中的部分操作算子或全部 操作確定為需要由硬件處理器件執(zhí)行的操作算子,進(jìn)而可以下發(fā)給硬件處理器件執(zhí)行,這 樣可以在較大程度上縮短查詢?nèi)蝿?wù)的執(zhí)行總時(shí)間,達(dá)到提高查詢效率的目的。
[0101]第二種確定方式:
[0102] 可選的,在執(zhí)行時(shí)間大于第一閾值的子任務(wù)所需要的操作算子為至少兩種操作算 子時(shí),確定執(zhí)行時(shí)間大于第一閾值的子任務(wù)所需要的操作算子為需要硬件處理器件執(zhí)行的 操作算子,包括:確定至少兩種操作算子中操作耗時(shí)比值大于或等于第一比值的操作算子 為需要硬件處理器件執(zhí)行的操作算子,至少兩種操作算子中任一操作算子的操作耗時(shí)比值 為執(zhí)行任一操作算子所花費(fèi)的時(shí)長(zhǎng)與執(zhí)行至少兩種操作算子所花費(fèi)的總時(shí)長(zhǎng)的比值。
[0103] 第二種確定方式是在第一種確定方式的基礎(chǔ)上進(jìn)一步細(xì)化的確定方式。
[01