一種面向混合型大數(shù)據(jù)處理系統(tǒng)的分區(qū)連接方法【專(zhuān)利摘要】本發(fā)明提供一種面向混合型大數(shù)據(jù)處理系統(tǒng)的分區(qū)連接方法,本發(fā)明提出的面向混合型大數(shù)據(jù)處理系統(tǒng)的分區(qū)連接方法,能夠滿足行業(yè)大數(shù)據(jù)針對(duì)不同處理系統(tǒng)的交互分析業(yè)務(wù)應(yīng)用需求,并且通過(guò)分區(qū)、coprocessr和mapjoin,大大提高了此類(lèi)分析的性能,并可以進(jìn)一步應(yīng)用于基于join的分組、統(tǒng)計(jì)、排序等交互分析。通過(guò)確定Hive查詢(xún)分區(qū),減少參與傳輸、緩存和join過(guò)程的數(shù)據(jù)量,并且充分利用分布式架構(gòu)優(yōu)勢(shì),使所有節(jié)點(diǎn)的緩存過(guò)程并行執(zhí)行,通過(guò)在各節(jié)點(diǎn)緩存數(shù)據(jù),能夠加快join執(zhí)行效率,并且HBase表的數(shù)據(jù)量和節(jié)點(diǎn)數(shù)量能夠按需擴(kuò)展?!緦?zhuān)利說(shuō)明】一種面向混合型大數(shù)據(jù)處理系統(tǒng)的分區(qū)連接方法【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明涉及大數(shù)據(jù)【
技術(shù)領(lǐng)域:
】,具體地說(shuō)是一種面向混合型大數(shù)據(jù)處理系統(tǒng)的分區(qū)連接方法?!?br>背景技術(shù):
】[0002]針對(duì)行業(yè)大數(shù)據(jù)業(yè)務(wù)應(yīng)用需求,面向數(shù)據(jù)密集型應(yīng)用的計(jì)算框架和系統(tǒng)不斷出現(xiàn),這些系統(tǒng)僅針對(duì)各自的問(wèn)題域提供解決方案。為了應(yīng)對(duì)行業(yè)日益復(fù)雜的業(yè)務(wù)需求,需要在大規(guī)模集群或數(shù)據(jù)中心中綜合運(yùn)用多種處理架構(gòu)來(lái)存儲(chǔ)和處理海量數(shù)據(jù)。因此,當(dāng)前出現(xiàn)了混合型大數(shù)據(jù)處理系統(tǒng),融合了批處理、內(nèi)存計(jì)算、流處理、NoSQL數(shù)據(jù)庫(kù)等多種處理模式,如YARN架構(gòu),滿足行業(yè)大數(shù)據(jù)的實(shí)時(shí)處理、交互處理、高效檢索、深入數(shù)據(jù)挖掘和商業(yè)智能等多樣性和多維度需求,在實(shí)現(xiàn)資源調(diào)度和作業(yè)管理分離的基礎(chǔ)上,提供對(duì)計(jì)算、存儲(chǔ)和網(wǎng)絡(luò)等集群資源的統(tǒng)一監(jiān)控和分配,并解決當(dāng)前單一數(shù)據(jù)處理系統(tǒng)普遍存在的管理節(jié)點(diǎn)單點(diǎn)失效和安裝部署困難等問(wèn)題,在提高資源利用率的同時(shí)促進(jìn)對(duì)大數(shù)據(jù)技術(shù)的全方位有效利用。[0003]在混合型大數(shù)據(jù)處理系統(tǒng)支持的處理模式中,由于MapReduce、Spark、HBase等都引入了新的編程模型,學(xué)習(xí)成本較大,因此,基于各類(lèi)大數(shù)據(jù)處理系統(tǒng)構(gòu)建的交互分析應(yīng)用最為廣泛。交互分析的模式和效果與傳統(tǒng)數(shù)據(jù)庫(kù)應(yīng)用非常相似的,數(shù)據(jù)以表的形式存儲(chǔ),應(yīng)用層采用標(biāo)準(zhǔn)的SQL語(yǔ)句發(fā)起各種數(shù)據(jù)請(qǐng)求,支持對(duì)數(shù)據(jù)掃描、統(tǒng)計(jì)、聚合、多表關(guān)聯(lián)等操作的高并發(fā)、低延遲的處理。當(dāng)前出現(xiàn)的基于MapReduce的Hive、基于Spark的Shark都屬于這一類(lèi)交互分析引擎。然而,現(xiàn)有混合型大數(shù)據(jù)架構(gòu)中的交互分析引擎,還僅是針對(duì)單一的大數(shù)據(jù)系統(tǒng),無(wú)法實(shí)現(xiàn)跨系統(tǒng)的數(shù)據(jù)處理。例如,當(dāng)前Hive與HBase中的數(shù)據(jù)無(wú)法直接建立關(guān)聯(lián),通常的做法是將進(jìn)行一次數(shù)據(jù)遷移,在Hive或HBase單一系統(tǒng)中進(jìn)行,在大量數(shù)據(jù)情況下造成的數(shù)據(jù)冗余以及傳輸延遲都是不可容忍的。為了實(shí)現(xiàn)混合型大數(shù)據(jù)架構(gòu)中各類(lèi)處理系統(tǒng)的真正融合,需要研究跨異構(gòu)系統(tǒng)間的數(shù)據(jù)交互分析方法,其中比較重要的一種就是關(guān)聯(lián)join分析?!?br/>發(fā)明內(nèi)容】[0004]本發(fā)明的目的是提供一種面向混合型大數(shù)據(jù)處理系統(tǒng)的分區(qū)連接方法。[0005]本發(fā)明的目的是按以下方式實(shí)現(xiàn)的,本發(fā)明提出的面向混合型大數(shù)據(jù)處理系統(tǒng)的分區(qū)連接方法,通過(guò)分區(qū)、coprocessr和mapjoin方法,大大提高了跨Hive和HBase系統(tǒng)的關(guān)聯(lián)分析性能,能夠滿足行業(yè)大數(shù)據(jù)針對(duì)混合處理系統(tǒng)的交互分析業(yè)務(wù)應(yīng)用需求。[0006]面向混合型大數(shù)據(jù)處理系統(tǒng)基于HBase數(shù)據(jù)庫(kù)及基于內(nèi)存計(jì)算引擎的Hive系統(tǒng)構(gòu)建,交互查詢(xún)sql語(yǔ)句由客戶端發(fā)出,包括針對(duì)Hive表和HBase表的join操作,以及針對(duì)Hive表某個(gè)字段的過(guò)濾where條件。分區(qū)連接方法包括數(shù)據(jù)準(zhǔn)備過(guò)程和運(yùn)行時(shí)執(zhí)行過(guò)程。[0007]在數(shù)據(jù)準(zhǔn)備階段,建立Hive表并按過(guò)濾字段分區(qū),按分區(qū)導(dǎo)入數(shù)據(jù);建立HBase表,將HBase表主鍵設(shè)計(jì)為同Hive表一直,并導(dǎo)入數(shù)據(jù)。[0008]在查詢(xún)執(zhí)行階段客戶端Driver解釋sql語(yǔ)句,編譯執(zhí)行計(jì)劃,在客戶端構(gòu)造內(nèi)存空間、線程池等用于驅(qū)動(dòng)執(zhí)行的運(yùn)行時(shí)環(huán)境。[0009]利用HBase的coprocessor引擎實(shí)現(xiàn)分區(qū)連接。Coprocessor是一個(gè)可構(gòu)建分布式服務(wù)編程模型,在HBaseMaster和Reg1nServer進(jìn)程內(nèi)的運(yùn)行時(shí)框架執(zhí)行用戶代碼,在HBase內(nèi)實(shí)現(xiàn)靈活、輕量級(jí)的分布式數(shù)據(jù)處理功能,并可以隨HBase自動(dòng)擴(kuò)展和負(fù)載均衡等。Coprocessor分為Observer和EndPoint,Observer可以監(jiān)聽(tīng)HBaseGet,Put,Delete,Scan等數(shù)據(jù)操作,以及元數(shù)據(jù)和日志操作,可實(shí)現(xiàn)類(lèi)似數(shù)據(jù)庫(kù)驅(qū)動(dòng)器的功能;EndPoint屬于遠(yuǎn)過(guò)程調(diào)用RPC類(lèi)型的Coprocessor,客戶端通過(guò)調(diào)用PRC接口可按每個(gè)row/range的位置自動(dòng)分片為多個(gè)并行的RPC調(diào)用,實(shí)現(xiàn)類(lèi)似數(shù)據(jù)庫(kù)中存儲(chǔ)過(guò)程的功能。[0010]在分區(qū)連接方法中,客戶端調(diào)用HBase的Endpoint類(lèi)型coprocessorServerCachingProtocal進(jìn)行數(shù)據(jù)緩存。在ServerCachingProtocal的實(shí)現(xiàn)中,每個(gè)Reg1nServer調(diào)用Hive驅(qū)動(dòng)查詢(xún)分區(qū)數(shù)據(jù),Hive引擎僅僅針對(duì)所需分區(qū)執(zhí)行查詢(xún)操作,返回結(jié)果后,以HashMap形式緩存在內(nèi)存cache中,并通知客戶端。[0011]客戶端Driver調(diào)用設(shè)定scan的類(lèi)型為join,發(fā)出scan調(diào)用原語(yǔ);每個(gè)Reg1nServer的Obesever型coprocessorreg1nseverScanObserver攔截該join請(qǐng)求,調(diào)用MapJoinScanner;MapJoinScanner執(zhí)行Hashjoin算法。針對(duì)在本Reg1nSever上掃描結(jié)果result中的每個(gè)tuple,判斷是否在cache中存在相同key的數(shù)據(jù),如有,貝U進(jìn)行j1n處理;各個(gè)Reg1nServer將join結(jié)果返回客戶端。[0012]上述方法通過(guò)確定Hive查詢(xún)分區(qū),能夠大大減少參與數(shù)據(jù)傳輸、數(shù)據(jù)緩存和join過(guò)程的數(shù)據(jù)量,并且充分利用大數(shù)據(jù)系統(tǒng)的分布式架構(gòu)使所有節(jié)點(diǎn)的緩存過(guò)程同時(shí)并行執(zhí)行,減少處理延遲、避免緩存溢出。此外,通過(guò)在各節(jié)點(diǎn)緩存數(shù)據(jù),能夠加快join執(zhí)行效率,并且HBase表的數(shù)據(jù)量和節(jié)點(diǎn)數(shù)量能夠按需擴(kuò)展。[0013]本發(fā)明的目的有益效果是:本發(fā)明提出的面向混合型大數(shù)據(jù)處理系統(tǒng)的分區(qū)連接方法,能夠滿足行業(yè)大數(shù)據(jù)針對(duì)不同處理系統(tǒng)的交互分析業(yè)務(wù)應(yīng)用需求,并且通過(guò)分區(qū)、coprocessr和mapjoin,大大提高了此類(lèi)分析的性能,并可以進(jìn)一步應(yīng)用于基于join的分組、統(tǒng)計(jì)、排序等交互分析?!緦?zhuān)利附圖】【附圖說(shuō)明】[0014]圖1是分區(qū)連接運(yùn)行機(jī)制和處理過(guò)程圖?!揪唧w實(shí)施方式】[0015]參照說(shuō)明書(shū)附圖對(duì)本發(fā)明的作以下詳細(xì)地說(shuō)明。[0016]以下將結(jié)合附圖及實(shí)施例來(lái)詳細(xì)說(shuō)明本發(fā)明的實(shí)施方式,借此對(duì)本發(fā)明如何應(yīng)用技術(shù)手段來(lái)解決技術(shù)問(wèn)題,并達(dá)成技術(shù)效果的實(shí)現(xiàn)過(guò)程能充分理解并據(jù)以實(shí)施。需要說(shuō)明的是,如果不沖突,本發(fā)明實(shí)施例以及實(shí)施例中的各個(gè)特征的相互均在本發(fā)明的保護(hù)范圍之內(nèi)。[0017]本發(fā)明以一個(gè)具體的執(zhí)行過(guò)程為例說(shuō)明本系統(tǒng)的運(yùn)行機(jī)制和處理過(guò)程。[0018]設(shè)有Hive系統(tǒng)的表hive_table,包括主鍵id,分區(qū)字段part,內(nèi)容字段value,HBase系統(tǒng)中表hbase—table,包括主鍵id,內(nèi)容字段value。對(duì)此執(zhí)行如下join查詢(xún);selectid,a.value,b.valuefromhive_tableasajoinhbase_tableasbona.1d=b.1dwherea.part=’2,1.數(shù)據(jù)準(zhǔn)備過(guò)程(1)建立Hive表并分區(qū),按分區(qū)導(dǎo)入數(shù)據(jù)。[0019]createtablehive—table(idint,valuestring)partit1nedby(partstring)storedasrcfile;fromdatasourcesinsertoverwritetablehive_tablepartit1n(part=“I,,)selectid,valuewherepart=“I,,insertoverwritetablehive_tablepartit1n(part=“2,,)selectid,valuewherepart=“2,,insertoverwritetablehive_tablepartit1n(part=“3,,)selectid,valuewherepart=“3,,;(2)建立hbase表并導(dǎo)入數(shù)據(jù);create‘hbase—table’,‘Cf’put^hbase—table’,’001’^cf:value^,’vf2.分區(qū)連接方法selectid,a.value,b.valuefromhive_tableasajoinhbase_tableasbona.1d=b.1dwherea.part=’2,分區(qū)連接的運(yùn)行機(jī)制和處理過(guò)程,如圖1所示:(1)客戶端Driver解釋sql語(yǔ)句,編譯執(zhí)行計(jì)劃,在客戶端構(gòu)造內(nèi)存空間、線程池等用于驅(qū)動(dòng)執(zhí)行的運(yùn)行時(shí)環(huán)境;(2)客戶端調(diào)用ServerCachingProtocal進(jìn)行數(shù)據(jù)緩存,在ServerCachingProtocal的實(shí)現(xiàn)中,每個(gè)Reg1nServer調(diào)用hive驅(qū)動(dòng)查詢(xún)分區(qū)數(shù)據(jù),Hive引擎僅僅針對(duì)所需分區(qū)執(zhí)行查詢(xún)操作,返回結(jié)果后,以HashMap形式緩存在內(nèi)存cache中,并通知客戶端ServerCachecache=hashClient.addHashCache(“Hive,,,,,selectid,a.valuefromhive_tableasawherea.part=’2”,)(3)客戶端Driver調(diào)用設(shè)定scan的類(lèi)型為join,發(fā)出scan調(diào)用原語(yǔ)(4)每個(gè)Reg1nServer的reg1nseverScanObserver攔截請(qǐng)求,判斷為join,調(diào)用MapJoinScanner,(5)MapJoinScanner執(zhí)行Hashjoin算法。即針對(duì)在本Reg1nSever上掃描結(jié)果result中的每個(gè)tuple,判斷是否在cache中存在相同key的數(shù)據(jù),如有,貝丨j進(jìn)行j1n處理。[0020]for(TupletupleA:result)key=getkey(tupleA)tupleB=cache.get(key)!if(tupleB!=null)join(tupleA,tupleB)(6)各個(gè)Reg1nServer將join結(jié)果返回客戶端。[0021]上例partit1n方法與完全mapjoin方式相比,減少了數(shù)據(jù)傳輸量和參與join的數(shù)據(jù)量,避免了HBase端緩存溢出的可能性,處理性能提高1/3以上。[0022]除說(shuō)明書(shū)所述的技術(shù)特征外,均為本專(zhuān)業(yè)技術(shù)人員的已知技術(shù)?!緳?quán)利要求】1.一種面向混合型大數(shù)據(jù)處理系統(tǒng)的分區(qū)連接方法,其特征在于,通過(guò)確定Hive查詢(xún)分區(qū),減少參與傳輸、緩存和join過(guò)程的數(shù)據(jù)量,并且充分利用分布式架構(gòu)優(yōu)勢(shì),使所有節(jié)點(diǎn)的緩存過(guò)程并行執(zhí)行,通過(guò)在各節(jié)點(diǎn)緩存數(shù)據(jù),能夠加快join執(zhí)行效率,并且HBase表的數(shù)據(jù)量和節(jié)點(diǎn)數(shù)量能夠按需擴(kuò)展,其中:1)在數(shù)據(jù)準(zhǔn)備階段,建立Hive表并按過(guò)濾字段分區(qū),按分區(qū)導(dǎo)入數(shù)據(jù);建立HBase表,將HBase表主鍵設(shè)計(jì)為同Hive表一致,并導(dǎo)入數(shù)據(jù);2)在查詢(xún)執(zhí)行階段,客戶端Driver解釋sql語(yǔ)句,編譯執(zhí)行計(jì)劃,在客戶端構(gòu)造內(nèi)存空間、線程池用于驅(qū)動(dòng)執(zhí)行的運(yùn)行時(shí)環(huán)境;3)在分區(qū)連接方法中,客戶端調(diào)用HBase的Endpoint類(lèi)型coprocessorServerCachingProtocal進(jìn)行數(shù)據(jù)緩存,在ServerCachingProtocal的實(shí)現(xiàn)中,每個(gè)Reg1nServer調(diào)用Hive驅(qū)動(dòng)查詢(xún)分區(qū)數(shù)據(jù),Hive引擎僅僅針對(duì)所需分區(qū)執(zhí)行查詢(xún)操作,返回結(jié)果后,以HashMap形式緩存在內(nèi)存cache中,并通知客戶端;4)客戶端Driver調(diào)用設(shè)定scan的類(lèi)型為join,發(fā)出scan調(diào)用原語(yǔ);每個(gè)Reg1nServer的Obesever型coprocessorreg1nseverScanObserver攔截該join請(qǐng)求,調(diào)用MapJoinScanner;MapJoinScanner執(zhí)行Hashjoin算法,針對(duì)在本Reg1nSever上掃描結(jié)果result中的每個(gè)tuple,判斷是否在cache中存在相同key的數(shù)據(jù),如有,貝U進(jìn)行j1n處理;各個(gè)Reg1nServer將join結(jié)果返回客戶端;系統(tǒng)的運(yùn)行機(jī)制和處理過(guò)程如下:設(shè)有Hive系統(tǒng)的表hive_table,包括主鍵id,分區(qū)字段part,內(nèi)容字段value,HBase系統(tǒng)中表hbase_table,包括主鍵id,內(nèi)容字段value,對(duì)此執(zhí)行如下join查詢(xún);selectid,a.value,b.valuefromhive_tableasajoinhbase_tableasbona.1d=b.1dwherea.part=’2’1.數(shù)據(jù)準(zhǔn)備過(guò)程(1)建立Hive表并分區(qū),按分區(qū)導(dǎo)入數(shù)據(jù);createtablehive_table(idint,valuestring)partit1nedby(partstring)storedasrcfile;fromdatasourcesinsertoverwritetablehive_tablepartit1n(part=“I,,)selectid,valuewherepart=“I,,insertoverwritetablehive_tablepartit1n(part=“2,,)selectid,valuewherepart=“2,,insertoverwritetablehive_tablepartit1n(part=“3,,)selectid,valuewherepart=“3,,;(2)建立hbase表并導(dǎo)入數(shù)據(jù)create‘hbase—table’,‘Cf’put^hbase—table’,’001’^cf:value^,’vf2.分區(qū)連接方法selectid,a.value,b.valuefromhive_tableasajoinhbase_tableasbona.1d=b.1dwherea.part=’2,分區(qū)連接的運(yùn)行機(jī)制和處理過(guò)程:(1)客戶端Driver解釋sql語(yǔ)句,編譯執(zhí)行計(jì)劃,在客戶端構(gòu)造內(nèi)存空間、線程池等用于驅(qū)動(dòng)執(zhí)行的運(yùn)行時(shí)環(huán)境;(2)客戶端調(diào)用ServerCachingProtocal進(jìn)行數(shù)據(jù)緩存,在ServerCachingProtocal的實(shí)現(xiàn)中,每個(gè)Reg1nServer調(diào)用hive驅(qū)動(dòng)查詢(xún)分區(qū)數(shù)據(jù),Hive引擎僅僅針對(duì)所需分區(qū)執(zhí)行查詢(xún)操作,返回結(jié)果后,以HashMap形式緩存在內(nèi)存cache中,并通知客戶端;ServerCachecache=hashClient.addHashCache(“Hive,,,”selectid,a.valuefromhive_tableasawherea.part=’2”,)(3)客戶端Driver調(diào)用設(shè)定scan的類(lèi)型為join,發(fā)出scan調(diào)用原語(yǔ);(4)每個(gè)Reg1nServer的reg1nseverScanObserver攔截請(qǐng)求,判斷為join,調(diào)用MapJoinScanner;(5)MapJoinScanner執(zhí)行Hashjoin算法,即針對(duì)在本Reg1nSever上掃描結(jié)果result中的每個(gè)tuple,判斷是否在cache中存在相同key的數(shù)據(jù),如有,貝丨j進(jìn)行j1n處理:for(TupletupleA:result)key=getkey(tupleA)tupleB=cache.get(key)!if(tupleB!=null)join(tupleA,tupleB)(6)各個(gè)Reg1nServer將join結(jié)果返回客戶端。【文檔編號(hào)】G06F17/30GK104346447SQ201410585204【公開(kāi)日】2015年2月11日申請(qǐng)日期:2014年10月28日優(yōu)先權(quán)日:2014年10月28日【發(fā)明者】亓開(kāi)元,盧軍佐,楊勇,辛國(guó)茂申請(qǐng)人:浪潮電子信息產(chǎn)業(yè)股份有限公司