本發(fā)明實施例涉及非結構化數(shù)據(jù)存儲技術,尤其涉及一種基于HDFS存儲文件的去重方法及裝置。
背景技術:
Hadoop分布式文件系統(tǒng)(Hadoop Distributed File System,簡稱HDFS)是對超大規(guī)模數(shù)據(jù)集提供可靠存儲功能的系統(tǒng),建立在響應以“一次寫入,多次讀取”任務的基礎上,對用戶應用程序提供高帶寬的輸入輸出數(shù)據(jù)流。HDFS具有高容錯性,可以運行在低廉的硬件集群上。采用MASTER/SLAVES的主從架構,一個HDFS集群由一個Namenode節(jié)點(管理節(jié)點)和多個Datanode節(jié)點(存儲節(jié)點)組成。管理節(jié)點是一個中心服務器,負責管理文件系統(tǒng)的元數(shù)據(jù)和客戶端對文件的訪問。管理節(jié)點存儲著文件的元數(shù)據(jù),因此管理節(jié)點的內存容量限制了文件的數(shù)量。HDFS默認會將文件分割成block(存儲塊),例如64M為1個存儲塊。然后將各存儲塊以鍵值對的形式存儲在HDFS的存儲節(jié)點中,并將鍵值對的映射存到內存中。每個文件、存儲塊以及索引目錄在內存中均以對象的形式存儲,每個對象約占150字節(jié)。舉例來說,如果有1000000個小文件,每個文件占用一個存儲塊,則管理節(jié)點就至少需要300M的內存;如果存儲1億甚至更多的文件時,需要20G甚至更多的內存容量,解決辦法是搭建支持集群的內存數(shù)據(jù)庫,但增加系統(tǒng)成本。如果小文件太多,占用過多的內存資源,影響集群性能,需要對小文件進行合并,減少文件數(shù)量。
然而,在實際互聯(lián)網(wǎng)應用中,存在著海量的小文件,尤其是隨著博客、微博、Facebook等社交網(wǎng)站的興起,改變了互聯(lián)網(wǎng)存儲內容的方式。用戶基本上已經成為互聯(lián)網(wǎng)內容的創(chuàng)造者,其數(shù)據(jù)具有海量、多樣、動態(tài)變化等特點,由此產生了海量小文件,如狀態(tài)文件、用戶資料、頭像等。這些數(shù)據(jù)按照數(shù)據(jù)的存儲格式可以分為結構化數(shù)據(jù)和非結構化數(shù)據(jù)。結構化數(shù)據(jù)具有相同的層次和網(wǎng)格結構,可以用數(shù)字或文字來描述;而有一些信息則無法用數(shù)字或者統(tǒng)一的結構表示,例如,掃描圖像、傳真、照片、計算機生成的報告、字處理文檔、電子表格、演示文稿、語音和視頻等,這些即為非結構化數(shù)據(jù)。非結構化數(shù)據(jù)在經過結構化的提取之后,需要把原始文件進行保存,以供后續(xù)使用。
在很多領域中,非結構化數(shù)據(jù)所占比例遠遠高于結構化數(shù)據(jù)所占比例。非結構化數(shù)據(jù)信息量非常大,如果直接存儲于數(shù)據(jù)庫中,除了大幅度加大數(shù)據(jù)庫的容量外,還會降低維護和應用的效率。尤其是在互聯(lián)網(wǎng)獲得的非結構化數(shù)據(jù)往往具有重復性,熱點事件在短時間內會帶來大量的網(wǎng)民關注,導致少量非結構化數(shù)據(jù)在短時間內被大量重復利用,占用系統(tǒng)存儲空間。現(xiàn)有技術中,采用壓縮技術對數(shù)據(jù)按照一定的比例進行壓縮,但是非結構化數(shù)據(jù)不具備嚴格的結構,較之結構化信息更難以標準化,管理起來更困難。針對這些特點,目前HDFS存儲的海量非結構化小文件采用Mapfile技術合并為大文件后,沒有經過壓縮處理,占用的存儲空間多,因此,如何去除海量非結構化數(shù)據(jù)中重復的內容,節(jié)約存儲空間是急需解決的問題。
技術實現(xiàn)要素:
本發(fā)明實施例提供一種基于HDFS存儲文件的去重方法及裝置,以使HDFS處理存儲的海量非結構化小文件時,有效去重,節(jié)約存儲空間。
第一方面,本發(fā)明實施例提供了一種基于HDFS存儲文件的去重方法,包括:
將待去重文件的文件指紋,與已存儲文件的文件指紋進行比對;
如果比對結果為相同,根據(jù)所述待去重文件的文件標識計算鏈接標識;
以所述鏈接標識和相同的已存儲文件在存儲節(jié)點中的存儲地址,替換所述待去重文件的文件內容,作為所述待去重文件的文件標識的鍵值存儲到存儲節(jié)點中。
優(yōu)選的,將待去重文件的文件指紋,與已存儲文件的文件指紋進行比對之前,還包括:
將接收到的文件存儲至所述存儲節(jié)點中設定區(qū)域中,并標記為未去重處理區(qū)域;
從所述未去重處理區(qū)域中逐一獲取文件,作為待去重文件。
優(yōu)選的,將接收到的文件存儲至所述存儲節(jié)點中設定區(qū)域中包括:
為接收到的文件生成主鍵,作為文件標識;
將所述文件的文件內容轉換為二進制數(shù)據(jù),與所述文件標識對應存儲至所述存儲節(jié)點中設定區(qū)域中。
優(yōu)選的,將接收到的文件存儲至所述存儲節(jié)點中設定區(qū)域中包括:
按照文件的接收日期,將接收到的文件存儲至所述存儲節(jié)點中不同的設定區(qū)域中。
優(yōu)選的,根據(jù)所述待去重文件的文件標識計算鏈接標識包括:
對所述待去重文件的文件標識計算32位MD5值,作為所述鏈接標識。
優(yōu)選的,以所述鏈接標識和相同的已存儲文件在存儲節(jié)點中的存儲地址,替換所述待去重文件的文件內容,作為所述待去重文件的文件標識的鍵值存儲到存儲節(jié)點中之后,還包括:
根據(jù)所述存儲節(jié)點中各文件標識及對應鍵值的存儲位置,重寫所述存儲節(jié)點的索引文件。
優(yōu)選的,所述方法還包括:
根據(jù)接收到的文件讀取請求,獲取待讀取文件的文件標識;
根據(jù)所述文件標識計算對應的鏈接標識;
根據(jù)所述文件標識從存儲節(jié)點中讀取對應的鍵值的設定位數(shù)據(jù);
如果比對所述鏈接標識與所述設定位數(shù)據(jù)匹配,則從所述鍵值中讀取存儲地址;
根據(jù)所述存儲地址在所述存儲節(jié)點中定位查找對應的文件,并讀取后響應所述文件讀取請求。
第二方面,本發(fā)明實施例還提供了一種基于HDFS存儲文件的去重裝置,包括:
指紋比對模塊,用于將待去重文件的文件指紋,與已存儲文件的文件指紋進行比對;
鏈接標識計算模塊,用于如果比對結果為相同,根據(jù)所述待去重文件的文件標識計算鏈接標識;
內容替換模塊,用于以所述鏈接標識和相同的已存儲文件在存儲節(jié)點中的存儲地址,替換所述待去重文件的文件內容,作為所述待去重文件的文件標識的鍵值存儲到存儲節(jié)點中。
優(yōu)選的,所述裝置還包括:
文件存儲模塊,用于將待去重文件的文件指紋,與已存儲文件的文件指紋進行比對之前,將接收到的文件存儲至所述存儲節(jié)點中設定區(qū)域中,并標記為未去重處理區(qū)域;
文件獲取模塊,用于從所述未去重處理區(qū)域中逐一獲取文件,作為待去重文件。
優(yōu)選的,所述文件存儲模塊包括:
主鍵生成單元,用于為接收到的文件生成主鍵,作為文件標識;
內容轉換單元,用于將所述文件的文件內容轉換為二進制數(shù)據(jù),與所述文件標識對應存儲至所述存儲節(jié)點中設定區(qū)域中。
優(yōu)選的,所述文件存儲模塊具體用于:
按照文件的接收日期,將接收到的文件存儲至所述存儲節(jié)點中不同的設定區(qū)域中。
優(yōu)選的,所述鏈接標識計算模塊具體用于:
對所述待去重文件的文件標識計算32位MD5值,作為所述鏈接標識。
優(yōu)選的,所述裝置還包括:
重寫索引模塊,用于以所述鏈接標識和相同的已存儲文件在存儲節(jié)點中的存儲地址,替換所述待去重文件的文件內容,作為所述待去重文件的文件標識的鍵值存儲到存儲節(jié)點中之后,根據(jù)所述存儲節(jié)點中各文件標識及對應鍵值的存儲位置,重寫所述存儲節(jié)點的索引文件。
優(yōu)選的,所述裝置還包括:
文件標識讀取模塊,用于根據(jù)接收到的文件讀取請求,獲取待讀取文件的文件標識;
對應標識計算模塊,用于根據(jù)所述文件標識計算對應的鏈接標識;
設定位數(shù)據(jù)讀取模塊,用于根據(jù)所述文件標識從存儲節(jié)點中讀取對應的鍵值的設定位數(shù)據(jù);
匹配模塊,用于如果比對所述鏈接標識與所述設定位數(shù)據(jù)匹配,則從所述鍵值中讀取存儲地址;
文件查找模塊,用于根據(jù)所述存儲地址在所述存儲節(jié)點中定位查找對應的文件,并讀取后響應所述文件讀取請求。
本發(fā)明實施例針對HDFS中文件內容相同的海量非結構化文件,對內容相同的文件只保留一份,刪除與已存儲文件指紋相同的文件內容,替換為鏈接標識和鏈接地址,有效去除內容重復的文件,減少文件數(shù)量,節(jié)約了大量的存儲空間,釋放內存資源,提升系統(tǒng)性能,同時,能夠滿足快速存儲和正確讀取的需求。
附圖說明
圖1A是本發(fā)明實施例一中的一種基于HDFS存儲文件的去重方法的流程圖;
圖1B是本發(fā)明實施例一中的一種基于HDFS存儲文件的去重方法的示意圖;
圖2是本發(fā)明實施例二中的一種基于HDFS存儲文件的去重方法的流程圖;
圖3是本發(fā)明實施例三中的一種基于HDFS存儲文件的去重方法的流程圖;
圖4A是本發(fā)明實施例四中的一種基于HDFS存儲文件的去重裝置的結構示意圖;
圖4B是本發(fā)明實施例四中的一種基于HDFS存儲文件的去重裝置的結構示意圖。
具體實施方式
下面結合附圖和實施例對本發(fā)明作進一步的詳細說明。可以理解的是,此處所描述的具體實施例僅僅用于解釋本發(fā)明,而非對本發(fā)明的限定。另外還需要說明的是,為了便于描述,附圖中僅示出了與本發(fā)明相關的部分而非全部結構。
實施例一
圖1A為本發(fā)明實施例一提供的一種基于HDFS存儲文件的去重方法的流程圖,本實施例可適用于Hadoop分布式文件系統(tǒng),該系統(tǒng)一般可包括管理節(jié)點和多個存儲節(jié)點。該方法可以由基于HDFS存儲文件的去重裝置來執(zhí)行,該裝置可以采用軟件和/或硬件的方式實現(xiàn),一般集成于Hadoop分布式文件系統(tǒng)中的管理節(jié)點中。
本發(fā)明實施例一的方法具體包括:
S101、將待去重文件的文件指紋,與已存儲文件的文件指紋進行比對。
待去重文件是接收到的文件,可以先將該文件存儲到存儲節(jié)點中,而后在離線狀態(tài)下進行本實施例的去重操作,也可以在接收到待去重文件時,進行在線的去重操作。由于在線去重需要占用較大的資源,運行速度慢,響應時間長,所以優(yōu)選是進行離線去重。從存儲節(jié)點中提取沒有進行過去重處理的文件,作為待去重文件。
具體的,文件指紋是根據(jù)每一個文件的內容計算得出的,不管文件名稱如何變化,只要文件的內容沒有變化,計算出的文件指紋就是相同的。如果待去重文件與已存儲文件的文件內容相同,計算出的文件指紋就相同。文件指紋的計算方法可以是計算文件的消息摘要算法第五版(Message-Digest Algorithm 5,簡稱MD5值)、安全哈希算法(Secure Hash Algorithm 1,簡稱SHA1值)或循環(huán)冗余校驗(Cyclic Redundancy Check,簡稱CRC32值)。其中,MD5值具有高度的離散性,原信息內容的微小變化會導致MD5值的巨大變化,可靠性高。本實施例中,優(yōu)選獲取文件前1K二進制數(shù)據(jù)和文件最后1K二進制數(shù)據(jù)進行MD5值計算,計算的結果作為文件指紋。
在離線狀態(tài)下,定期對待去重文件的文件指紋與已存儲文件的文件指紋進行比對。在每天0點之后,利用Hadoop分布式文件系統(tǒng)中的MapReduce計算模型離線比對所述待去重文件的文件指紋與已存儲文件的文件指紋,篩選出與所述已存儲文件具有相同內容的待去重文件,并獲取對應的已存儲文件及其在數(shù)據(jù)存儲節(jié)點中的存儲地址。
S102、如果比對結果為相同,根據(jù)所述待去重文件的文件標識計算鏈接標識。
具體的,在文件寫入Hadoop分布式文件系統(tǒng)中時,是在映射文件(Mapfile)中以鍵值對Key-Value的形式存儲的,主鍵Key是文件標識,是在文件存儲時分配給該文件能唯一標識該文件的字符串。鍵值Value是Key對應的二進制值,即文件內容對應的全部二進制數(shù)據(jù)。如果文件指紋比對結果為相同,根據(jù)所述待去重文件的文件標識Key計算出鏈接標識,該鏈接標識對已經進行去重處理的文件起到特殊標識作用。在文件讀取階段,如果從文件的鍵值中讀取的是鏈接標識而不是實際的二進制數(shù)據(jù),則表明該文件進行了去重處理。如果文件指紋比對結果不相同,則說明該文件與已存儲文件的文件內容不相同,保留該文件的文件內容,不進行去重處理。
優(yōu)選的,步驟S102包括:
對所述待去重文件的文件標識計算32位MD5值,作為所述鏈接標識。
本實施例中,根據(jù)所述待去重文件的文件標識Key計算出32位MD5值,作為所述鏈接標識。類似于加密過程,對去重處理的文件進行加密標識,計算出32位MD5值,在響應文件讀取請求時進行解密。并且,讀取文件階段,可以根據(jù)文件標識計算出鏈接標識,從而識別該文件是否進行了去重處理。
S103、以所述鏈接標識和相同的已存儲文件在存儲節(jié)點中的存儲地址,替換所述待去重文件的文件內容,作為所述待去重文件的文件標識的鍵值存儲到存儲節(jié)點中。
本實施例中,進行去重處理的文件,其鍵值中不再存儲文件內容的二進制數(shù)據(jù),而是替換為鏈接標識和存儲地址,該存儲地址存儲的內容是與去重處理文件的內容完全相同的。如圖1B所示,假設Key2對應的文件內容與已存儲文件的內容相同,則讀出Key2文件內容對應的二進制數(shù)據(jù),在原位置寫入鏈接標識和存儲地址,即32位MD5值和相同文件存儲的實際地址,完成所述待去重文件內容的替換。Key1和Key3對應的文件內容與已存儲文件的內容不同,保留Key1和Key3文件內容對應的二進制數(shù)據(jù)。
優(yōu)選的,步驟S103包括:
根據(jù)所述存儲節(jié)點中各文件標識及對應鍵值的存儲位置,重寫所述存儲節(jié)點的索引文件。
具體的,根據(jù)索引文件可以快速定位數(shù)據(jù),所述存儲節(jié)點中各文件標識對應的鍵值數(shù)據(jù)已經被替換,原有的索引文件不能正確表示新的映射關系,需要根據(jù)替換后的所述存儲節(jié)點中各文件標識及對應鍵值的存儲位置,重寫所述存儲節(jié)點的索引文件。
本發(fā)明實施例一提供的一種基于HDFS存儲文件的去重方法,在離線狀態(tài)下比對文件指紋并進行數(shù)據(jù)去重處理,可以適當延長處理時間,增加了系統(tǒng)的可靠性,節(jié)約內存資源,降低了對硬件設備的要求,進而節(jié)約大量設備成本,并且能夠有效去除內容重復的文件,減少文件數(shù)量,節(jié)約存儲空間。
實施例二
圖2為本發(fā)明實施例二提供的一種基于HDFS存儲文件的去重方法的流程圖,本發(fā)明實施例二以實施例一為基礎進行了優(yōu)化改進,對如何離線去重操作進行進一步說明,如圖2所示,本發(fā)明實施例二的具體包括:
S201、將接收到的文件存儲至所述存儲節(jié)點中設定區(qū)域中,并標記為未去重處理區(qū)域。
本實施例中,Hadoop分布式文件系統(tǒng)中包含多個映射文件,所述映射文件用于歸檔海量非結構化小文件,并生成歸檔文件對應的映射關系。系統(tǒng)連續(xù)接收文件并進行緩存,當緩存占用空間達到容量閾值或者接收時間達到預設時限時,系統(tǒng)根據(jù)接收非結構化文件的順序依次寫入各存儲節(jié)點的映射文件中,并標記為未去重處理區(qū)域。其中,所述容量閾值的范圍可設置為128M到2G之間,所述預設時限的范圍可以設置為5分鐘到20分鐘之間,寫入方式可以通過多線程并發(fā)寫入,以保證寫入的速度。
優(yōu)選的,步驟S201包括:
為接收到的文件生成主鍵,作為文件標識;
將所述文件的文件內容轉換為二進制數(shù)據(jù),與所述文件標識對應存儲至所述存儲節(jié)點中設定區(qū)域中。
具體的,系統(tǒng)為接收到的文件生成主鍵Key,作為文件標識,根據(jù)主鍵Key進行索引存儲,將所述文件的文件內容轉換為二進制數(shù)據(jù),作為主鍵Key對應的鍵值Value,主鍵Key和對應的鍵值Value以鍵值對的形式存儲至所述存儲節(jié)點的映射文件中。
優(yōu)選的,步驟S201還包括:
按照文件的接收日期,將接收到的文件存儲至所述存儲節(jié)點中不同的設定區(qū)域中。
具體的,存儲文件時,按照接收日期將接收到的文件存儲至所述存儲節(jié)點中不同的映射文件中。針對每天寫入的文件在Hadoop分布式文件系統(tǒng)中新建一個目錄進行保存,以天為單位分區(qū)存儲。
S202、從所述未去重處理區(qū)域中逐一獲取文件,作為待去重文件。
S203、將待去重文件的文件指紋,與已存儲文件的文件指紋進行比對。
S204、如果比對結果為相同,根據(jù)所述待去重文件的文件標識計算鏈接標識。
S205、以所述鏈接標識和相同的已存儲文件在存儲節(jié)點中的存儲地址,替換所述待去重文件的文件內容,作為所述待去重文件的文件標識的鍵值存儲到存儲節(jié)點中。
本發(fā)明實施例二提供的一種基于HDFS存儲文件的去重方法,按照文件的接受日期對文件進行分區(qū)存儲,便于離線處理,針對當天的存儲文件暫時不進行去重處理,能夠保證數(shù)據(jù)的存儲效率,滿足快速存儲數(shù)據(jù)的需求,提高了數(shù)據(jù)存儲的實時性。
實施例三
圖3為本發(fā)明實施例三提供的一種基于HDFS存儲文件的去重方法的流程圖,本發(fā)明實施例三以實施例二為基礎進行了優(yōu)化改進,對在文件經過去重處理后,獲取文件內容的過程進行進一步說明,如圖3所示,本發(fā)明實施例三的具體包括:
S301、根據(jù)接收到的文件讀取請求,獲取待讀取文件的文件標識。
S302、根據(jù)所述文件標識計算對應的鏈接標識。
S303、根據(jù)所述文件標識從存儲節(jié)點中讀取對應的鍵值的設定位數(shù)據(jù)。
S304、如果比對所述鏈接標識與所述設定位數(shù)據(jù)匹配,則從所述鍵值中讀取存儲地址。
S305、根據(jù)所述存儲地址在所述存儲節(jié)點中定位查找對應的文件,并讀取后響應所述文件讀取請求。
在本實施例中,獲取文件內容的過程對文件使用者屏蔽內部處理流程,系統(tǒng)根據(jù)接收到的文件讀取請求,獲取待讀取文件的文件標識主鍵Key,根據(jù)所述主鍵Key計算待讀取文件主鍵Key對應的鏈接標識,該鏈接標識可以通過計算MD5值獲取。根據(jù)所述主鍵Key從存儲節(jié)點中讀取對應鍵值的前32位MD5值,比對鏈接標識的MD5值和讀取的前32位MD5值,如果一致,則說明該待讀取文件經過去重處理,文件內容存儲的是內容相同的已存儲文件在存儲節(jié)點中的存儲地址,而不是文件本身真實的內容,去掉該文件內容中的前32位數(shù)據(jù),從所述鍵值中讀取存儲地址,根據(jù)所述存儲地址在所述存儲節(jié)點中定位查找對應的文件,并讀取后響應所述文件讀取請求。比對鏈接標識的MD5值和讀取的前32位MD5值,如果不一致,則說明該待讀取文件沒有經過去重處理,從所述鍵值中讀取文件內容后響應所述文件讀取請求。
本發(fā)明實施例三提供的一種基于HDFS存儲文件的去重方法,對于重復的非結構化文件只保存了對應的存儲地址,讀取文件時對訪問者屏蔽內部處理流程,能夠滿足正確讀取的需求,節(jié)約了存儲空間,提升了系統(tǒng)性能。
實施例四
圖4A是本發(fā)明實施例四中的一種基于HDFS存儲文件的去重裝置的結構示意圖,該裝置應用于Hadoop分布式文件系統(tǒng)。如圖4A所示,該裝置包括:
指紋比對模塊401,用于將待去重文件的文件指紋,與已存儲文件的文件指紋進行比對;
鏈接標識計算模塊402,用于如果比對結果為相同,根據(jù)所述待去重文件的文件標識計算鏈接標識;
內容替換模塊403,用于以所述鏈接標識和相同的已存儲文件在存儲節(jié)點中的存儲地址,替換所述待去重文件的文件內容,作為所述待去重文件的文件標識的鍵值存儲到存儲節(jié)點中。
優(yōu)選的,所述鏈接標識計算模塊具體用于:
對所述待去重文件的文件標識計算32位MD5值,作為所述鏈接標識。
優(yōu)選的,所述裝置還包括:
重寫索引模塊404,用于以所述鏈接標識和相同的已存儲文件在存儲節(jié)點中的存儲地址,替換所述待去重文件的文件內容,作為所述待去重文件的文件標識的鍵值存儲到存儲節(jié)點中之后,根據(jù)所述存儲節(jié)點中各文件標識及對應鍵值的存儲位置,重寫所述存儲節(jié)點的索引文件。
具體的,在離線狀態(tài)下,利用指紋比對模塊比對所述待去重文件的文件指紋與已存儲文件的文件指紋,篩選出與所述已存儲文件具有相同內容的待去重文件,并獲取對應的已存儲文件及其在數(shù)據(jù)存儲節(jié)點中的存儲地址。如果文件指紋比對結果為相同,根據(jù)所述待去重文件的文件標識Key,在鏈接標識計算模塊中計算出32位MD5值,作為鏈接標識,該鏈接標識對已經進行去重處理的文件起到標識作用。通過內容替換模塊,以所述鏈接標識和相同的已存儲文件在存儲節(jié)點中的存儲地址,替換所述待去重文件的文件內容,作為所述待去重文件的文件標識的鍵值存儲到存儲節(jié)點中。根據(jù)所述存儲節(jié)點中各文件標識及對應鍵值的存儲位置,在重寫索引模塊重寫所述存儲節(jié)點的索引文件。
優(yōu)選的,如圖4A所示,所述裝置還包括:
文件存儲模塊405,用于將待去重文件的文件指紋,與已存儲文件的文件指紋進行比對之前,將接收到的文件存儲至所述存儲節(jié)點中設定區(qū)域中,并標記為未去重處理區(qū)域;
文件獲取模塊406,用于從所述未去重處理區(qū)域中逐一獲取文件,作為待去重文件。
優(yōu)選的,所述文件存儲模塊包括:
主鍵生成單元,用于為接收到的文件生成主鍵,作為文件標識;
內容轉換單元,用于將所述文件的文件內容轉換為二進制數(shù)據(jù),與所述文件標識對應存儲至所述存儲節(jié)點中設定區(qū)域中。
優(yōu)選的,所述文件存儲模塊具體用于:
按照文件的接收日期,將接收到的文件存儲至所述存儲節(jié)點中不同的設定區(qū)域中。
具體的,文件存取模塊連續(xù)接收文件并進行緩存,當緩存占用空間達到容量閾值或者接收時間達到預設時限時,系統(tǒng)按照文件的接受日期,根據(jù)接收非結構化文件的順序多線程并發(fā)寫入各存儲節(jié)點的映射文件中。其中,所述容量閾值的范圍可設置為128M到2G之間,所述預設時限的范圍可以設置為5分鐘到20分鐘之間。主鍵生成單元為接收到的文件生成主鍵Key,作為文件標識,利用內容轉換單元將所述文件的文件內容轉換為二進制數(shù)據(jù),作為主鍵Key對應的鍵值Value,主鍵Key和對應的鍵值Value以鍵值對的形式存儲至所述存儲節(jié)點的映射文件中。根據(jù)文件獲取模塊從所述未去重處理區(qū)域中逐一獲取文件,作為待去重文件。
優(yōu)選的,如圖4B所示,所述裝置還包括:
文件標識讀取模塊407,用于根據(jù)接收到的文件讀取請求,獲取待讀取文件的文件標識;
對應標識計算模塊408,用于根據(jù)所述文件標識計算對應的鏈接標識;
設定位數(shù)據(jù)讀取模塊409,用于根據(jù)所述文件標識從存儲節(jié)點中讀取對應的鍵值的設定位數(shù)據(jù);
匹配模塊410,用于如果比對所述鏈接標識與所述設定位數(shù)據(jù)匹配,則從所述鍵值中讀取存儲地址;
文件查找模塊411,用于根據(jù)所述存儲地址在所述存儲節(jié)點中定位查找對應的文件,并讀取后響應所述文件讀取請求。
具體的,利用文件標識讀取模塊根據(jù)接收到的文件讀取請求,獲取待讀取文件的文件標識主鍵Key,利用對應標識計算模塊根據(jù)所述主鍵Key計算待讀取文件主鍵Key對應的MD5值。利用設定位數(shù)據(jù)讀取模塊根據(jù)所述主鍵Key從存儲節(jié)點中讀取對應鍵值的前32位MD5值,在匹配模塊中比對鏈接標識的MD5值和讀取的前32位MD5值,如果一致,則說明該待讀取文件經過去重處理,文件內容存儲的是內容相同的已存儲文件在存儲節(jié)點中的存儲地址,而不是文件本身真實的內容,去掉該文件內容中的前32位數(shù)據(jù),通過文件查找模塊從所述鍵值中讀取存儲地址,根據(jù)所述存儲地址在所述存儲節(jié)點中定位查找對應的文件,并讀取后響應所述文件讀取請求。如果不一致,則說明該待讀取文件沒有經過去重處理,從所述鍵值中讀取文件內容后響應所述文件讀取請求。
本發(fā)明實施例四提供的一種基于HDFS存儲文件的去重裝置,能夠有效去除內容重復的文件,減少文件數(shù)量,節(jié)約了大量的存儲空間,釋放內存資源,提升系統(tǒng)性能,同時,能夠滿足快速存儲和正確讀取的需求。
本發(fā)明實施例提供的裝置可執(zhí)行本發(fā)明任意實施例提供的方法,具備執(zhí)行方法相應的功能模塊和有益效果。
注意,上述僅為本發(fā)明的較佳實施例及所運用技術原理。本領域技術人員會理解,本發(fā)明不限于這里所述的特定實施例,對本領域技術人員來說能夠進行各種明顯的變化、重新調整和替代而不會脫離本發(fā)明的保護范圍。因此,雖然通過以上實施例對本發(fā)明進行了較為詳細的說明,但是本發(fā)明不僅僅限于以上實施例,在不脫離本發(fā)明構思的情況下,還可以包括更多其他等效實施例,而本發(fā)明的范圍由所附的權利要求范圍決定。