本發(fā)明涉及大數(shù)據(jù)傳輸技術(shù)領(lǐng)域,特別涉及一種基于多級存儲的大數(shù)據(jù)傳輸完整性保護(hù)機(jī)制。
背景技術(shù):
在信息技術(shù)中,大數(shù)據(jù)是指無法在一定時(shí)間內(nèi),用常規(guī)的工具軟件(如現(xiàn)有數(shù)據(jù)庫管理工具或數(shù)據(jù)處理應(yīng)用)對其內(nèi)容進(jìn)行抓取、管理、存儲、搜索、共享、分析和可視化處理的由數(shù)量巨大、結(jié)構(gòu)復(fù)雜、類型眾多數(shù)據(jù)構(gòu)成的大型復(fù)雜數(shù)據(jù)集合。大數(shù)據(jù)具有四大特點(diǎn),即高容量(Volume)、快速性(Velocity)、多樣性(Variety)和價(jià)值密度低(Value)。大數(shù)據(jù)帶來的挑戰(zhàn)在于它的實(shí)時(shí)處理,而數(shù)據(jù)本身也從結(jié)構(gòu)性數(shù)據(jù)轉(zhuǎn)向了非結(jié)構(gòu)性數(shù)據(jù),因此使用關(guān)系數(shù)據(jù)庫對大數(shù)據(jù)進(jìn)行處理是非常困難的。
在這種情況下,基于Hadoop的大數(shù)據(jù)存儲和處理平臺成為這種存儲和處理多源異構(gòu)大數(shù)據(jù)的理想工具。大數(shù)據(jù)處理的流程一般包括數(shù)據(jù)采集與預(yù)處理、數(shù)據(jù)存儲和管理、數(shù)據(jù)分析和挖掘等幾個(gè)方面。
在大數(shù)據(jù)的采集和預(yù)處理方面,當(dāng)前普遍采用的是Sqoop或者Flume等開源的分布式數(shù)據(jù)導(dǎo)入導(dǎo)出工具,以及基于R語言來編寫數(shù)據(jù)的預(yù)處理程序,經(jīng)過預(yù)處理之后的數(shù)據(jù)再導(dǎo)入到分布式文件系統(tǒng)和分布式數(shù)據(jù)庫中。由于大數(shù)據(jù)處理的多樣性和復(fù)雜性,導(dǎo)致大數(shù)據(jù)平臺不能夠及時(shí)存儲并處理實(shí)時(shí)的海量復(fù)雜異構(gòu)數(shù)據(jù)。
此外,在使用sqoop等開源工具進(jìn)行數(shù)據(jù)導(dǎo)入導(dǎo)出時(shí),從數(shù)據(jù)源到大數(shù)據(jù)平臺發(fā)送數(shù)據(jù)時(shí),往往會出現(xiàn)網(wǎng)絡(luò)不穩(wěn)定的情況,這就導(dǎo)致了網(wǎng)絡(luò)傳輸錯(cuò)誤,數(shù)據(jù)的完整性為了解決網(wǎng)絡(luò)中斷或者傳輸錯(cuò)誤的情況,CloudCanyon通過重傳的機(jī)制來保證數(shù)據(jù)接入的完整性。但對于實(shí)時(shí)/近實(shí)時(shí)采集的數(shù)據(jù)來講,一旦網(wǎng)絡(luò)中斷或者傳輸錯(cuò)誤,數(shù)據(jù)重傳機(jī)制啟動時(shí),丟失的數(shù)據(jù)往往已經(jīng)丟失或者在數(shù)據(jù)源中被更新,這就會導(dǎo)致數(shù)據(jù)的丟失。
基于上述情況,本發(fā)明提出了一種基于多級存儲的大數(shù)據(jù)傳輸完整性保護(hù)機(jī)制。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明為了彌補(bǔ)現(xiàn)有技術(shù)的缺陷,提供了一種簡單高效的基于多級存儲的大數(shù)據(jù)傳輸完整性保護(hù)機(jī)制。
本發(fā)明是通過如下技術(shù)方案實(shí)現(xiàn)的:
一種基于多級存儲的大數(shù)據(jù)傳輸完整性保護(hù)機(jī)制,其特征在于:在多源異構(gòu)大數(shù)據(jù)的數(shù)據(jù)源導(dǎo)入大數(shù)據(jù)平臺時(shí),在數(shù)據(jù)源與大數(shù)據(jù)平臺之間加入一個(gè)分布式數(shù)據(jù)緩存集群,大數(shù)據(jù)平臺不直接從數(shù)據(jù)源取數(shù)據(jù)而是從分布式數(shù)據(jù)緩存集群中讀??;同時(shí),分布式數(shù)據(jù)緩存集群采用Memory Cache、SSD以及Hard Disk的三級存儲架構(gòu);各級存儲之間采用基于策略和事件觸發(fā)的調(diào)度機(jī)制,保證大數(shù)據(jù)平臺能夠快速地從分布式數(shù)據(jù)緩存集群中讀取數(shù)據(jù)。
所述分布式數(shù)據(jù)緩存集群的數(shù)據(jù)結(jié)構(gòu)和存儲方式與數(shù)據(jù)源服務(wù)器保持一致,分布式數(shù)據(jù)緩存集群以流水化、并行方式傳輸,支持多任務(wù)并發(fā),能夠滿足了高吞吐量的需求;支持訂閱和輪詢兩種工作模式,不同類型的數(shù)據(jù)源設(shè)有不同的接口和組件來滿足數(shù)據(jù)導(dǎo)入的需求;
對于結(jié)構(gòu)化的數(shù)據(jù),在分布式數(shù)據(jù)緩存集群與數(shù)據(jù)源之間通過JDBC或者ODBC進(jìn)行連接,從數(shù)據(jù)源讀取數(shù)據(jù)后,直接插入分布式數(shù)據(jù)緩存集群中對應(yīng)的數(shù)據(jù)庫文件中;對于半結(jié)構(gòu)化格式的數(shù)據(jù),則通過FTP、Http協(xié)議直接進(jìn)行讀??;對于圖像、視頻格式的文件,直接通過FTP進(jìn)行文件傳輸。
所述分布式數(shù)據(jù)緩存集群的邏輯存儲架構(gòu)是消息隊(duì)列,分布式數(shù)據(jù)緩存集群在數(shù)據(jù)存儲方面的應(yīng)用包括數(shù)據(jù)源寫入,大數(shù)據(jù)集群讀取,元數(shù)據(jù)管理和消息隊(duì)列設(shè)置四部分。
所述數(shù)據(jù)源寫入分布式數(shù)據(jù)緩存集群,包括以下步驟:
(1)數(shù)據(jù)通過輪詢或者訂閱的方式由數(shù)據(jù)源發(fā)送到分布式數(shù)據(jù)緩存集群,當(dāng)數(shù)據(jù)到達(dá)分布式數(shù)據(jù)緩存集群時(shí),最新的數(shù)據(jù)將首先存儲到Memory Cache中;為了保證數(shù)據(jù)的安全性,最開始往Memory Cache中寫時(shí),數(shù)據(jù)按照3副本的模式進(jìn)行寫入,同時(shí)保證數(shù)據(jù)的3個(gè)副本在不同的物理機(jī)器上,該機(jī)制通過hash算法來實(shí)現(xiàn);
(2)當(dāng)某個(gè)消息隊(duì)列在Memory Cache中數(shù)據(jù)量到達(dá)閾值時(shí),按照隊(duì)列FIFO的規(guī)則,則將最先存入Memory Cache的m%的數(shù)據(jù)往SSD中寫,由于此時(shí)m%的數(shù)據(jù)是以三副本的形式存在于Memory Cache中,在將m%的數(shù)據(jù)flush到SSD時(shí),將其中1個(gè)副本的數(shù)據(jù)flush到SSD中,然后將對應(yīng)的副本數(shù)據(jù)在內(nèi)存中刪除;
(3)當(dāng)SSD中存儲的數(shù)據(jù)量到達(dá)閾值時(shí),同樣按照FIFO的規(guī)則,將最先寫入到SSD的m%的數(shù)據(jù)寫入到Hard Disk中,寫入時(shí),將一份數(shù)據(jù)的一份副本寫入到hard disk中。
所述大數(shù)據(jù)集群從分布式數(shù)據(jù)緩存集群讀,包括以下步驟:
(1)大數(shù)據(jù)集群會向數(shù)據(jù)源發(fā)送一個(gè)數(shù)據(jù)讀的請求,請求中包括請求的id,請求的格式需求;數(shù)據(jù)源根據(jù)大數(shù)據(jù)集群讀的請求,生成一份按照請求id和格式的數(shù)據(jù),推送到分布式數(shù)據(jù)緩存集群中,在分布式數(shù)據(jù)緩存集群中則根據(jù)請求id生成一個(gè)消息隊(duì)列,消息隊(duì)列來存儲數(shù)據(jù)源推送的數(shù)據(jù),大數(shù)據(jù)集群一直保持對消息隊(duì)列的監(jiān)聽;
(2)根據(jù)元數(shù)據(jù)信息,大數(shù)據(jù)集群首先查詢某個(gè)請求下一個(gè)要讀的數(shù)據(jù)在Memory Cache中是否存在,如果Memory Cache中存在,則從內(nèi)存中讀取;如果Memory Cache中不存在,則查詢是否存在于SSD中,如果存在于SSD中,則從SSD中讀??;如果SSD中不存在,則查詢是否在Hard Disk中,如果數(shù)據(jù)三個(gè)副本僅僅存在于Hard Disk中,則從Hard Disk中讀取;
(3)數(shù)據(jù)一旦讀取成功,將數(shù)據(jù)從消息隊(duì)列中刪除。
所述元數(shù)據(jù)管理是由于分布式數(shù)據(jù)緩存集群中一份數(shù)據(jù)的邏輯存儲是在消息隊(duì)列系統(tǒng)中,而實(shí)際的物理存儲是三級存儲的架構(gòu),因此,設(shè)置了一臺元數(shù)據(jù)服務(wù)器NameNode來對分布式集群中的數(shù)據(jù)進(jìn)行管理,記錄每一份數(shù)據(jù)的位置信息和狀態(tài)。
所述消息隊(duì)列設(shè)置是每個(gè)消息隊(duì)列的大小在不同級別的存儲中有不同的限制,一般Memory Cache中消息隊(duì)列的大小小于SSD中,SSD中消息隊(duì)列的大小小于hard Disk中,可根據(jù)分布式數(shù)據(jù)緩存集群的配置進(jìn)行設(shè)置。
本發(fā)明的有益效果是:該基于多級存儲的大數(shù)據(jù)傳輸完整性保護(hù)機(jī)制,能夠保證數(shù)據(jù)平臺及時(shí)存儲并處理實(shí)時(shí)的海量復(fù)雜異構(gòu)數(shù)據(jù),同時(shí)避免網(wǎng)絡(luò)不穩(wěn)定或者網(wǎng)絡(luò)傳輸錯(cuò)誤造成的數(shù)據(jù)丟失,保障了數(shù)據(jù)傳輸?shù)耐暾浴?/p>
附圖說明
附圖1為本發(fā)明分布式數(shù)據(jù)緩存集群構(gòu)架示意圖。
附圖2為本發(fā)明基于多級存儲的大數(shù)據(jù)傳輸完整性保護(hù)機(jī)制數(shù)據(jù)流向示意圖。
具體實(shí)施方式
為了使本發(fā)明所要解決的技術(shù)問題、技術(shù)方案及有益效果更加清楚明白,以下結(jié)合附圖和實(shí)施例,對本發(fā)明進(jìn)行詳細(xì)的說明。應(yīng)當(dāng)說明的是,此處所描述的具體實(shí)施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
該基于多級存儲的大數(shù)據(jù)傳輸完整性保護(hù)機(jī)制,在多源異構(gòu)大數(shù)據(jù)的數(shù)據(jù)源導(dǎo)入大數(shù)據(jù)平臺時(shí),在數(shù)據(jù)源與大數(shù)據(jù)平臺之間加入一個(gè)分布式數(shù)據(jù)緩存集群(Distributed Cache Cluster,簡稱DCC),大數(shù)據(jù)平臺不直接從數(shù)據(jù)源取數(shù)據(jù)而是從分布式數(shù)據(jù)緩存集群中讀取;同時(shí),分布式數(shù)據(jù)緩存集群采用Memory Cache、SSD以及Hard Disk的三級存儲架構(gòu);各級存儲之間采用基于策略和事件觸發(fā)的調(diào)度機(jī)制,保證大數(shù)據(jù)平臺能夠快速地從分布式數(shù)據(jù)緩存集群中讀取數(shù)據(jù)。
所述分布式數(shù)據(jù)緩存集群的數(shù)據(jù)結(jié)構(gòu)和存儲方式與數(shù)據(jù)源服務(wù)器保持一致,分布式數(shù)據(jù)緩存集群以流水化、并行方式傳輸,支持多任務(wù)并發(fā),能夠滿足了高吞吐量的需求;支持訂閱和輪詢兩種工作模式,不同類型的數(shù)據(jù)源設(shè)有不同的接口和組件來滿足數(shù)據(jù)導(dǎo)入的需求;
對于結(jié)構(gòu)化的數(shù)據(jù),如oracle、mysql等,在分布式數(shù)據(jù)緩存集群與數(shù)據(jù)源之間通過JDBC或者ODBC進(jìn)行連接,從數(shù)據(jù)源讀取數(shù)據(jù)后,直接插入分布式數(shù)據(jù)緩存集群中對應(yīng)的數(shù)據(jù)庫文件中;對于文本、csv等半結(jié)構(gòu)化格式的數(shù)據(jù),則通過FTP、Http協(xié)議直接進(jìn)行讀?。粚τ趫D像、視頻格式的文件,直接通過FTP進(jìn)行文件傳輸。
所述分布式數(shù)據(jù)緩存集群的邏輯存儲架構(gòu)是消息隊(duì)列,分布式數(shù)據(jù)緩存集群在數(shù)據(jù)存儲方面的應(yīng)用包括數(shù)據(jù)源寫入,大數(shù)據(jù)集群讀取,元數(shù)據(jù)管理和消息隊(duì)列設(shè)置四部分。
所述數(shù)據(jù)源寫入分布式數(shù)據(jù)緩存集群,包括以下步驟:
(1)數(shù)據(jù)通過輪詢或者訂閱的方式由數(shù)據(jù)源發(fā)送到分布式數(shù)據(jù)緩存集群,當(dāng)數(shù)據(jù)到達(dá)分布式數(shù)據(jù)緩存集群時(shí),最新的數(shù)據(jù)將首先存儲到Memory Cache中;為了保證數(shù)據(jù)的安全性,最開始往Memory Cache中寫時(shí),數(shù)據(jù)按照3副本的模式進(jìn)行寫入,同時(shí)保證數(shù)據(jù)的3個(gè)副本在不同的物理機(jī)器上,該機(jī)制通過hash算法來實(shí)現(xiàn);
(2)當(dāng)某個(gè)消息隊(duì)列在Memory Cache中數(shù)據(jù)量到達(dá)閾值時(shí),按照隊(duì)列FIFO的規(guī)則,則將最先存入Memory Cache的m%的數(shù)據(jù)往SSD中寫,由于此時(shí)m%的數(shù)據(jù)是以三副本的形式存在于Memory Cache中,在將m%的數(shù)據(jù)flush到SSD時(shí),將其中1個(gè)副本的數(shù)據(jù)flush到SSD中,然后將對應(yīng)的副本數(shù)據(jù)在內(nèi)存中刪除;
M為大于5小于20的自然數(shù)。
(3)當(dāng)SSD中存儲的數(shù)據(jù)量到達(dá)閾值時(shí),同樣按照FIFO的規(guī)則,將最先寫入到SSD的m%的數(shù)據(jù)寫入到Hard Disk中,寫入時(shí),將一份數(shù)據(jù)的一份副本寫入到hard disk中。
所述大數(shù)據(jù)集群從分布式數(shù)據(jù)緩存集群讀,包括以下步驟:
(1)大數(shù)據(jù)集群會向數(shù)據(jù)源發(fā)送一個(gè)數(shù)據(jù)讀的請求,請求中包括請求的id,請求的格式需求;數(shù)據(jù)源根據(jù)大數(shù)據(jù)集群讀的請求,生成一份按照請求id和格式的數(shù)據(jù),推送到分布式數(shù)據(jù)緩存集群中,在分布式數(shù)據(jù)緩存集群中則根據(jù)請求id生成一個(gè)消息隊(duì)列,消息隊(duì)列來存儲數(shù)據(jù)源推送的數(shù)據(jù),大數(shù)據(jù)集群一直保持對消息隊(duì)列的監(jiān)聽;
(2)根據(jù)元數(shù)據(jù)信息,大數(shù)據(jù)集群首先查詢某個(gè)請求下一個(gè)要讀的數(shù)據(jù)在Memory Cache中是否存在,如果Memory Cache中存在,則從內(nèi)存中讀??;如果Memory Cache中不存在,則查詢是否存在于SSD中,如果存在于SSD中,則從SSD中讀?。蝗绻鸖SD中不存在,則查詢是否在Hard Disk中,如果數(shù)據(jù)三個(gè)副本僅僅存在于Hard Disk中,則從Hard Disk中讀取;
(3)數(shù)據(jù)一旦讀取成功,將數(shù)據(jù)從消息隊(duì)列中刪除。
所述元數(shù)據(jù)管理是由于分布式數(shù)據(jù)緩存集群中一份數(shù)據(jù)的邏輯存儲是在消息隊(duì)列系統(tǒng)中,而實(shí)際的物理存儲是三級存儲的架構(gòu),因此,設(shè)置了一臺元數(shù)據(jù)服務(wù)器NameNode來對分布式集群中的數(shù)據(jù)進(jìn)行管理,記錄每一份數(shù)據(jù)的位置信息和狀態(tài)。
所述消息隊(duì)列設(shè)置是每個(gè)消息隊(duì)列的大小在不同級別的存儲中有不同的限制,一般Memory Cache中消息隊(duì)列的大小小于SSD中,SSD中消息隊(duì)列的大小小于hard Disk中,可根據(jù)分布式數(shù)據(jù)緩存集群的配置進(jìn)行設(shè)置。
以一次實(shí)時(shí)的數(shù)據(jù)讀寫為例,大數(shù)據(jù)集群首先發(fā)送一個(gè)讀數(shù)據(jù)的請求給數(shù)據(jù)源,請求id為1;數(shù)據(jù)源根據(jù)請求的ID,去分布式緩存集群的管理節(jié)點(diǎn)請求創(chuàng)建一個(gè)消息隊(duì)列,隊(duì)列ID為1;創(chuàng)建隊(duì)列成功之后,管理節(jié)點(diǎn)會發(fā)送一個(gè)確認(rèn)信息給數(shù)據(jù)源,信息包括了請求隊(duì)列的位置;這時(shí)候數(shù)據(jù)源根據(jù)請求的內(nèi)容向分布式數(shù)據(jù)緩存集群的數(shù)據(jù)節(jié)點(diǎn)發(fā)送數(shù)據(jù),發(fā)送過程就是寫的過程,按照發(fā)明內(nèi)容中寫數(shù)據(jù)的規(guī)則進(jìn)行寫。大數(shù)據(jù)集群則根據(jù)請求的ID,首先去管理節(jié)點(diǎn)查詢要讀的下一個(gè)數(shù)據(jù)的位置,然后選擇一個(gè)最快的隊(duì)列進(jìn)行讀取,一旦讀取成功,則將隊(duì)列數(shù)據(jù)清空。