一種基于分布式緩存的數(shù)據(jù)處理系統(tǒng)及處理方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,尤其涉及一種基于分布式緩存的數(shù)據(jù)處理系統(tǒng)及處理方法。
【背景技術(shù)】
[0002]Apached hadoop (—般簡(jiǎn)稱hadoop)是一個(gè)開源的分布式數(shù)據(jù)處理平臺(tái),它的核心主要包括兩個(gè)部分,分布式文件系統(tǒng)(HDFS)和mapreduce計(jì)算模型。
[0003]HDFS在大規(guī)模數(shù)據(jù)的存儲(chǔ)方面表現(xiàn)出巨大的優(yōu)勢(shì),然而,它在處理實(shí)時(shí)的數(shù)據(jù)讀取方面存在很大的不足。由于在執(zhí)行mapreduce任務(wù)的過程中需要進(jìn)行大量的數(shù)據(jù)讀取,會(huì)對(duì)網(wǎng)絡(luò)傳輸和磁盤I/O (Input/Output)帶寬造成巨大的壓力,所以要在HDFS的基礎(chǔ)上設(shè)置緩存系統(tǒng),減少數(shù)據(jù)傳數(shù)量,以提高mapreduce的執(zhí)行效率。
[0004]mapreduce數(shù)據(jù)計(jì)算過程可以分為兩個(gè)階段:map和reduce,分別對(duì)應(yīng)于兩個(gè)處理函數(shù)mapper和reducer。在map階段,原始數(shù)據(jù)被輸入mapper進(jìn)行處理和轉(zhuǎn)換為〈key, value)對(duì),獲得的中間處理結(jié)果將作為reducer端的數(shù)據(jù)輸入,最終得到處理結(jié)果。在整個(gè)mapreduce的數(shù)據(jù)處理過程中,從分布式文件系統(tǒng)HDFS中讀取原始數(shù)據(jù)所花費(fèi)的時(shí)間最長(zhǎng),因此,要想提高mapreduce的執(zhí)行效率,需要從原始數(shù)據(jù)的讀取入手。通過建立相應(yīng)的緩存機(jī)制,提高數(shù)據(jù)命中率,使map階段原始數(shù)據(jù)的讀取時(shí)間縮短。
[0005]在現(xiàn)有的分布式緩存系統(tǒng)架構(gòu)中,各業(yè)務(wù)系統(tǒng)與其對(duì)應(yīng)的緩存服務(wù)器,通過該業(yè)務(wù)系統(tǒng)的配置數(shù)據(jù)與緩存服務(wù)器進(jìn)行直接的網(wǎng)絡(luò)連接,這將導(dǎo)致當(dāng)緩存服務(wù)器產(chǎn)生故障,將其切換到另外一套緩存服務(wù)器時(shí),業(yè)務(wù)系統(tǒng)需要寫該相應(yīng)的配置參數(shù),通過重新啟動(dòng)后再與緩存服務(wù)器進(jìn)行連接。就目前的分布式緩存系統(tǒng)架構(gòu)而言,在業(yè)務(wù)系統(tǒng)與緩存服務(wù)器之間的對(duì)應(yīng)關(guān)系管理將分散開來,沒有進(jìn)行集中統(tǒng)一的管理。不僅如此,在緩存服務(wù)器進(jìn)行切換時(shí),也給業(yè)務(wù)系統(tǒng)的配置參數(shù)的修改造成較大的難度,而且人為的操作也可能造成配置參數(shù)的修改錯(cuò)誤。
[0006]memcache是一個(gè)高性能的分布式的內(nèi)存對(duì)象緩存系統(tǒng),采用key-value形式的存儲(chǔ)結(jié)構(gòu)。雖然是分布式的緩存系統(tǒng),但是它的服務(wù)端不存在多個(gè)副本,而分布式是在客戶端實(shí)現(xiàn)的,目前已有成熟的客戶端配置分布式的API (應(yīng)用程序編程接口)。同時(shí)也提供了增刪查改的操作API,使用起來比較方便。通過在內(nèi)存里維護(hù)一個(gè)統(tǒng)一的巨大的hash表,它能夠用來存儲(chǔ)各種格式的數(shù)據(jù)。Memcache簡(jiǎn)單的說就是將數(shù)據(jù)調(diào)用到內(nèi)存中,然后再?gòu)膬?nèi)存中讀取出來,從而在很大的程度上提高數(shù)據(jù)的讀取速度。但memcache也存在缺點(diǎn),文件備份領(lǐng)域的分布式存儲(chǔ)系統(tǒng)很少采用memcache做分布式緩存的。
[0007]這些機(jī)制均面向傳統(tǒng)數(shù)據(jù)中心平臺(tái)架構(gòu),然而在map/reduce平臺(tái)計(jì)算資源與存儲(chǔ)資源的緊耦合部署和數(shù)據(jù)本地化處理的特征,使得在基于數(shù)據(jù)快的數(shù)據(jù)訪問特征統(tǒng)計(jì)結(jié)果受到計(jì)算資源分配策略及實(shí)時(shí)負(fù)載的干擾,難以完整真實(shí)的反映數(shù)據(jù)訪問特征。
[0008]針對(duì)mapreduce任務(wù)執(zhí)行過程中需要讀取大量數(shù)據(jù),中間處理結(jié)果的存儲(chǔ)和傳輸,對(duì)網(wǎng)絡(luò)傳輸和1/0帶寬造成巨大的壓力,現(xiàn)有技術(shù)中沒有很好的解決方法。
【發(fā)明內(nèi)容】
[0009]本發(fā)明所要解決的技術(shù)問題是提供一種基于分布式緩存的數(shù)據(jù)處理系統(tǒng)及處理方法,優(yōu)化map任務(wù)處理數(shù)據(jù),保證map能在最短的時(shí)間內(nèi)找到目標(biāo)數(shù)據(jù),且以最快的速度傳輸中間處理結(jié)果。
[0010]本發(fā)明解決上述技術(shù)問題的技術(shù)方案如下:一種基于分布式緩存的數(shù)據(jù)處理系統(tǒng),包括mapreduce數(shù)據(jù)處理模塊、map任務(wù)內(nèi)存處理模塊和reduce分布式緩存模塊,
[0011]所述mapreduce數(shù)據(jù)處理模塊,用于將提交來的用戶作業(yè)進(jìn)行任務(wù)分解,分解成多個(gè)map任務(wù)和多個(gè)reduce任務(wù),并將map任務(wù)分配至相應(yīng)的datanode本地節(jié)點(diǎn)中;
[0012]所述map任務(wù)內(nèi)存處理模塊,用于判斷map任務(wù)中的目標(biāo)數(shù)據(jù)是否存在于datanode本地節(jié)點(diǎn)的緩存序列中,如果存在則從緩存序列中讀取目標(biāo)數(shù)據(jù),如果不存在則將所述目標(biāo)數(shù)據(jù)緩存到datanode本地節(jié)點(diǎn)所在的緩存序列中;
[0013]所述reduce分布式緩存模塊,用于檢查緩存服務(wù)器中有無緩存空間,如果有則將map任務(wù)的中間處理數(shù)據(jù)處理后存放在緩存服務(wù)器中,再根據(jù)reduce任務(wù)獲取所有map任務(wù)的信息,并將存放在緩存服務(wù)器中的中間處理數(shù)據(jù)拉取到reduce任務(wù)的數(shù)據(jù)節(jié)點(diǎn)中;如果緩存服務(wù)器中無緩存空間,則將map任務(wù)的中間處理數(shù)據(jù)輸出到本地磁盤中。
[0014]本發(fā)明的有益效果是:主要服務(wù)于map任務(wù),優(yōu)化map任務(wù)處理數(shù)據(jù),保證map能在最短的時(shí)間內(nèi)找到目標(biāo)數(shù)據(jù),且以最快的速度傳輸中間處理結(jié)果;能夠減少數(shù)據(jù)傳輸量,完全實(shí)現(xiàn)數(shù)據(jù)本地化處理,提高數(shù)據(jù)命中率,從而提升數(shù)據(jù)處理的執(zhí)行效率。
[0015]在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以做如下改進(jìn)。
[0016]進(jìn)一步,所述mapreduce數(shù)據(jù)處理模塊包括作業(yè)監(jiān)視器調(diào)用單元和任務(wù)監(jiān)視器調(diào)用單元,
[0017]所述作業(yè)監(jiān)視器調(diào)用單元,用于調(diào)用作業(yè)監(jiān)視器從所述用戶作業(yè)中獲得所要處理的數(shù)據(jù)范圍和位置信息,并將用戶作業(yè)分解為多個(gè)map任務(wù)和多個(gè)reduce任務(wù),并根據(jù)每個(gè)map任務(wù)中目標(biāo)數(shù)據(jù),訪問hadoop集群的namenode主節(jié)點(diǎn)中的元數(shù)據(jù),從元數(shù)據(jù)中獲取存放目標(biāo)數(shù)據(jù)的datanode本地節(jié)點(diǎn)的位置;還用于根據(jù)任務(wù)監(jiān)視器發(fā)送來的信號(hào),將map任務(wù)分配到相應(yīng)的datanode本地節(jié)點(diǎn)的位置中;
[0018]所述任務(wù)監(jiān)視器調(diào)用單元,用于定時(shí)檢查任務(wù)監(jiān)視器是否有空閑的情況,如果有空閑則發(fā)送信號(hào)至作業(yè)監(jiān)視器中,否則不發(fā)送。
[0019]采用上述進(jìn)一步方案的有益效果是:map任務(wù)可以直接從datanode本地節(jié)點(diǎn)的磁盤中讀取待處理的數(shù)據(jù),從而減少數(shù)據(jù)在網(wǎng)絡(luò)中的傳輸消耗。
[0020]進(jìn)一步,所述map任務(wù)內(nèi)存處理模塊包括map任務(wù)處理單元201和緩存檢測(cè)單元,
[0021]所述map任務(wù)處理單元,用于在datanode本地節(jié)點(diǎn)所在的緩存序列中讀取數(shù)據(jù)分片,根據(jù)map任務(wù)中目標(biāo)數(shù)據(jù)進(jìn)行判斷,如果數(shù)據(jù)分片中存在目標(biāo)數(shù)據(jù),則從緩存序列中讀取目標(biāo)數(shù)據(jù),如果數(shù)據(jù)分片中不存在目標(biāo)數(shù)據(jù),則將目標(biāo)數(shù)據(jù)緩存到緩存序列中;
[0022]所述緩存檢測(cè)單元,用于實(shí)時(shí)檢測(cè)datanode本地節(jié)點(diǎn)所在的緩存序列是否達(dá)到預(yù)設(shè)的閾值,如果達(dá)到,則根據(jù)最近最久未使用置換算法將緩存序列中已緩存數(shù)據(jù)與待緩存數(shù)據(jù)進(jìn)行替換。
[0023]進(jìn)一步,所述reduce分布式緩存模塊包括中間數(shù)據(jù)處理單元和reduce任務(wù)處理單元,
[0024]所述中間數(shù)據(jù)處理單元,用于檢查緩存服務(wù)器中有無緩存空間,如果有則將map任務(wù)的中間處理數(shù)據(jù)以〈key,value〉鍵值對(duì)的形式存放在緩存服務(wù)器中,其中key為mapID+reducelD,value為map任務(wù)的中間處理數(shù)據(jù);如果緩存服務(wù)器中無緩存空間,則將map任務(wù)的中間處理數(shù)據(jù)輸出到本地磁盤中;
[0025]所述reduce任務(wù)處理單元,用于對(duì)reduce任務(wù)初始化,根據(jù)初始化后的reduce任務(wù)調(diào)用任務(wù)監(jiān)視器,從任務(wù)監(jiān)視器上獲取所有map任務(wù)的信息,并檢查緩存服務(wù)器是否存在中間處理數(shù)據(jù),如果存在則將中間處理數(shù)據(jù)拉取到reduce任務(wù)的數(shù)據(jù)節(jié)點(diǎn)中。
[0026]采用上述進(jìn)一步方案的有益效果是:可以減少reduce任務(wù)從本地磁盤中讀取中間結(jié)果待處理數(shù)據(jù)的時(shí)間。
[0027]進(jìn)一步,所述緩存服務(wù)器中有無緩存空間利用Size彡m*s*(r-ra)進(jìn)行檢查,其中m表示已完成map任務(wù)個(gè)數(shù),s表示map任務(wù)的中間處理數(shù)據(jù)輸出的結(jié)果的平均大小,r表示全部reduce任務(wù)個(gè)數(shù),ra表示已分配的reduce任務(wù)個(gè)數(shù)。
[0028]本發(fā)明解決上述技術(shù)問題的另一技術(shù)方案如下:一種基于分布式緩存的數(shù)據(jù)處理方法,包括如下步驟:
[0029]步驟S1:將提交來的用戶作業(yè)進(jìn)行任務(wù)分解,分解成多個(gè)map任務(wù)和多個(gè)reduce任務(wù),并將map任務(wù)分配至相應(yīng)的datanode本地節(jié)點(diǎn)中;
[0030]步驟S2:判斷map任務(wù)中的目標(biāo)數(shù)據(jù)是否存在于datanode本地節(jié)點(diǎn)的緩存序列中,如果存在,則執(zhí)行步驟S3,如果不存在,則執(zhí)行步驟S4 ;
[0031]步驟S3:從緩存序列中讀取目標(biāo)數(shù)據(jù);
[0032]步驟S4:將所述目標(biāo)數(shù)據(jù)緩存到datanode本地節(jié)點(diǎn)所在的緩存序列中;
[0033]步驟S5:檢查緩存服務(wù)器中有無緩存空間,如果有緩存空間,則執(zhí)行步驟S6,如果無緩存空間,則執(zhí)行步驟S7;
[0034]步驟S6:將map任務(wù)的中間處理數(shù)據(jù)處理后存放在緩存服務(wù)器中,再根據(jù)reduce任務(wù)獲取所有map任務(wù)的信息,并將存放在緩存服務(wù)器中的中間處理數(shù)據(jù)拉取到reduce任務(wù)的數(shù)據(jù)節(jié)點(diǎn)中;所述〈key, value〉鍵值對(duì)中key為mapID+reducelD,value為map任務(wù)的中間處理數(shù)據(jù);
[0035]步驟S7:將map任務(wù)的中間處理數(shù)據(jù)輸出到本地磁盤中。
[0036]在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以做如下改進(jìn)。
[0037]進(jìn)一步,所述步驟S6中還包括實(shí)時(shí)檢測(cè)datanode本地節(jié)點(diǎn)所在的緩存序列是否達(dá)到預(yù)設(shè)的閾值,如果達(dá)到,則根據(jù)最近最久未使用置換算法將緩存序列中已緩存數(shù)據(jù)與待緩存數(shù)據(jù)進(jìn)行替換的步驟。
[0038]進(jìn)一步,實(shí)現(xiàn)所述步驟SI的具體步驟為:
[0039]步驟SlOl:調(diào)用作業(yè)監(jiān)視器從所述用戶作業(yè)中獲得所要處理的數(shù)據(jù)范圍和位置信息,并將用戶作業(yè)分解為多個(gè)map任務(wù)和多