亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種針對(duì)小文件合并的批量刪除/查詢方法與裝置的制造方法

文檔序號(hào):10553026閱讀:250來源:國(guó)知局
一種針對(duì)小文件合并的批量刪除/查詢方法與裝置的制造方法
【專利摘要】本發(fā)明提出一種針對(duì)小文件合并的批量刪除/查詢方法與裝置,該方法包括客戶端上傳的小文件到目標(biāo)文件中,將所述小文件的名稱作為key,將所述小文件的內(nèi)容作為value,上傳到Memcache中,將所述key寫到表key_list上,所述表key_list存儲(chǔ)在所述Memcache中,所述表key_list記錄所述Memcache中存儲(chǔ)的所有小文件的key;在所述目標(biāo)文件中添加標(biāo)志文件flag,以及標(biāo)志文件DE_flag,所述客戶端收到刪除所述小文件的請(qǐng)求后,先從所述表key_list中查找是否存在所述小文件的所述key,若存在,則從所述Memcache中取出并刪除所述小文件,并刪除所述表key_list中所述小文件的所述key,否則在所述標(biāo)識(shí)文件flag中記錄所述小文件的文件名;獲取需要查詢的文件F,查詢所述表key_list上記錄的所述文件F的key,根據(jù)所述key從所述Memcache中取出所述文件F。
【專利說明】
一種針對(duì)小文件合并的批量刪除/查詢方法與裝置
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及文件處理領(lǐng)域問題,特別涉及一種針對(duì)小文件合并的批量刪除/查詢方法與裝置。
【背景技術(shù)】
[0002]目前,隨著信息化的發(fā)展,各個(gè)領(lǐng)域的數(shù)據(jù)均呈爆炸式增加,這些數(shù)據(jù)以文件的形式存儲(chǔ),由于各方面原因,大部分都是小文件,小文件是指文件大小比較小的文件,由于數(shù)量巨大,難以管理。
[0003]HDFS上的文件是以塊為單位存儲(chǔ)的,當(dāng)HDFS上存在大量的小文件時(shí),不僅占用DataNode大量的存儲(chǔ)空間,在NameNode內(nèi)存中也產(chǎn)生大量的元數(shù)據(jù),Yahoo內(nèi)部有一個(gè)生產(chǎn)集群,統(tǒng)計(jì)下來大概有57,000,000個(gè)小于一個(gè)塊大小的小文件,這些小文件消耗了95 %的NameSpace,占用了30%的存儲(chǔ)空間,也給NameNode帶來了壓力。
[0004]目前有幾種處理小文件的方法:
[0005]Hadoop自帶了幾種處理小文件的方法,比如HAR,SequenceF i Ie等,HAR是一個(gè)文件存檔工具,能夠?qū)⒍鄠€(gè)小文件打包成一個(gè)HAR文件,再放入HDFS中,也可以通過MapReduce進(jìn)行操作,打包后的文件包含文件部分以及索引部分,其中索引為二層索引,完成了小文件與目標(biāo)文件之間的映射,但這種方法有一個(gè)不足一一創(chuàng)建好的HAR文件不能修改,即不能從目標(biāo)文件中刪除小文件,也不能將小文件追加到合并好的目標(biāo)文件中,只能重新創(chuàng)建新HAR文件,SequenceFi Ie由一系列的二進(jìn)制key/value組成,如果key為小文件名,value為文件內(nèi)容,則可以將大批小文件合并成一個(gè)目標(biāo)文件,SequenceFile是Hadoop—個(gè)重要的文本存儲(chǔ)文件,能夠?qū)⑿∥募喜⒊赡繕?biāo)文件后統(tǒng)一進(jìn)行存儲(chǔ),在MapReduce中有重要應(yīng)用。
[0006]除了使用Hadoop自帶的方法,還有很多其他方案:
[0007]采用先合并,再上傳的策略。發(fā)明專利“一種小文件處理方法及裝置”提出一種小文件存儲(chǔ)系統(tǒng),該專利所述方法能夠?qū)⒕哂邢嗤募?biāo)志的小文件合并在一起,將小文件預(yù)先合并好,放在內(nèi)存區(qū)中,再一同存到硬盤上,這篇專利能夠?qū)⒂嘘P(guān)聯(lián)的小文件整合,由于在合并和查詢時(shí)都使用了內(nèi)存暫時(shí)存放文件塊,提高合并以及檢索效率。相對(duì)于每篇文章分別作為一個(gè)對(duì)象的方法而言,無須浪費(fèi)太多硬盤空間存儲(chǔ)非文件數(shù)據(jù),這篇專利是先將一段時(shí)間收集的小文件進(jìn)行合并,再上傳到磁盤或服務(wù)器上。雖然這個(gè)方法將文件合并來存儲(chǔ)和處理小文件,然而都不能修改合并后的目標(biāo)文件,包括追加和刪除。

【發(fā)明內(nèi)容】

[0008]針對(duì)現(xiàn)有技術(shù)的不足,本發(fā)明提出一種針對(duì)小文件合并的批量刪除/查詢方法與
目.ο
[0009]本發(fā)明提出一種針對(duì)小文件合并的批量刪除/查詢方法,包括:
[0010]將小文件上傳到Memcache步驟,客戶端上傳的小文件到目標(biāo)文件中,將所述小文件的名稱作為key,將所述小文件的內(nèi)容作為value,上傳到Memcache中,將所述key寫到表key_l ist上,所述表key_list存儲(chǔ)在所述Memcache中,所述表key_l ist記錄所述Memcache中存儲(chǔ)的所有小文件的key;
[0011 ]小文件刪除步驟,在所述目標(biāo)文件中添加標(biāo)志文件flag,以及標(biāo)志文件DE_f lag,所述客戶端收到刪除所述小文件的請(qǐng)求后,先從所述表key_list中查找是否存在所述小文件的所述key,若存在,貝Ij從所述Memcache中取出并刪除所述小文件,并刪除所述表key_I ist中所述小文件的所述key,否則在所述標(biāo)識(shí)文件flag中記錄所述小文件的文件名;
[0012]小文件查詢步驟,獲取需要查詢的文件F,查詢所述表key_list上記錄的所述文件F的key,根據(jù)所述key從所述Memcache中取出所述文件F,返回給所述客戶端。
[0013]所述將小文件上傳到Memcache步驟包括預(yù)測(cè)所述Memcache中是否存在足夠的空間容納所述小文件其中所述Memcache中剩余空間為L(zhǎng)i,所述小文件大小為Si,所述Memcache總空間為P,若Li+Si〈 = P,則將所述小文件放入所述Memcache中,若Li+f i>P,則將所述小文件存儲(chǔ)到磁盤上,不再有新的小文件上傳后,再將磁盤上的小文件上傳到所述Memcache中;將線程進(jìn)行加鎖,保證同時(shí)只有一個(gè)線程執(zhí)行寫所述表key_l ist;從所述Memcache上下載所述表key_l ist;將所述小文件的文件名以及所述目標(biāo)文件的文件名追加到key_l i s t文件后;將所述表key_l ist上傳到所述Memcache,將線程進(jìn)行解鎖。
[0014]所述小文件刪除步驟,還包括
[0015]根據(jù)所述小文件的文件名查找要?jiǎng)h除的小文件所在的目標(biāo)文件的位置;
[0016]在與所述目標(biāo)文件相對(duì)于的標(biāo)志文件flag上記錄信息,所述信息為要?jiǎng)h除的小文件的文件名;
[0017]設(shè)置一閾值V,定期遍歷每一個(gè)合并后的目標(biāo)文件下的標(biāo)志文件flag與」ndex文件,并讀取這兩個(gè)文件的行數(shù)cl與c2,當(dāng)cl/c2〈V時(shí),不做任何操作,當(dāng)cl/c2> = V時(shí),則另外起用一個(gè)線程,對(duì)目標(biāo)文件進(jìn)行重新合并,重新合并步驟為:
[0018]在目標(biāo)文件所在文件夾下新建標(biāo)志文件DE_flag,把合并后的目標(biāo)文件恢復(fù)成小文件,并下載到本地,把標(biāo)志文件flag也下載到本地,并清空所述標(biāo)志文件flag;
[0019]讀取本地的標(biāo)志文件flag,按行獲取信息,每一行為一個(gè)要?jiǎng)h除的文件,從本地的小文件中找到要?jiǎng)h除的文件并刪除;
[°02°] 把刪除完成后剩余的小文件上傳到HDFS,并利用hadoop archive的方法進(jìn)行重新合并;
[0021 ]把HDFS上原有的標(biāo)志文件flag復(fù)制到新合并的目標(biāo)文件中,并用新合并的目標(biāo)文件替換舊的目標(biāo)文件。
[0022]所述小文件查詢步驟包括,步驟21,獲取需要訪問所述文件F,首先查詢所述表key_list上是否記錄了所述文件F的key,如果記錄了所述文件F,則根據(jù)所述key從所述Memcache中取出所述文件F,返回給所述客戶端,否則執(zhí)行步驟22;
[0023]步驟22,查詢所述表key_process,如果記錄了key,則從所述Memcache中用key取出所述文件F,否則執(zhí)行步驟23;
[0024]步驟23,根據(jù)所述文件F,查詢所述文件F對(duì)應(yīng)的目標(biāo)文件的位置;
[0025]步驟24,查詢目標(biāo)文件中的標(biāo)志文件flag中是否記錄目標(biāo)文件的文件名,如果有,則返回客戶端目標(biāo)文件不存在,否則執(zhí)行步驟25;
[0026]步驟25,從該目標(biāo)文件中的_!1^8七61';[11(161與_;[11(161中查詢所述文件F,并返回給客戶端。
[0027]本發(fā)明還提出一種針對(duì)小文件合并的批量刪除/查詢裝置,包括:
[0028]將小文件上傳到Memcache模塊,用于客戶端上傳的小文件到目標(biāo)文件中,將所述小文件的名稱作為key,將所述小文件的內(nèi)容作為value,上傳到Memcache中,將所述key寫到表key_l ist上,所述表key_list存儲(chǔ)在所述Memcache中,所述表key_l ist記錄所述Memcache中存儲(chǔ)的所有小文件的key;
[0029]小文件刪除模塊,用于在所述目標(biāo)文件中添加標(biāo)志文件flag,以及標(biāo)志文件DE_flag,所述客戶端收到刪除所述小文件的請(qǐng)求后,先從所述表key_list中查詢是否存在所述小文件的所述key,若存在,貝Ij從所述Memcache中取出并刪除所述小文件,并刪除所述表key_l ist中所述小文件的所述key,否則在所述標(biāo)識(shí)文件flag中記錄所述小文件的文件名
[0030]小文件查詢模塊,用于獲取需要查詢的文件F,查詢所述表key_list上記錄的所述文件F的key,根據(jù)所述key從所述Memcache中取出所述文件F,返回給所述客戶端。
[0031 ] 所述將小文件上傳到Memcache模塊包括預(yù)測(cè)所述Memcache中是否存在足夠的空間容納所述小文件其中所述Memcache中剩余空間為L(zhǎng)i,所述小文件大小為Si,所述Memcache總空間為P,若Li+Si〈 = P,則將所述小文件放入所述Memcache中,若Li+f i>P,則將所述小文件存儲(chǔ)到磁盤上,不再有新的小文件上傳后,再將磁盤上的小文件上傳到所述Memcache中;將線程進(jìn)行加鎖,保證同時(shí)只有一個(gè)線程執(zhí)行寫所述表key_l ist;從所述Memcache上下載所述表key_l ist;將所述小文件的文件名以及所述目標(biāo)文件的文件名追加到key_l i s t文件后;將所述表key_l ist上傳到所述Memcache,將線程進(jìn)行解鎖。
[0032]所述小文件刪除模塊,還包括
[0033]根據(jù)所述小文件的文件名查詢要?jiǎng)h除的小文件所在的目標(biāo)文件的位置;
[0034]在與所述目標(biāo)文件相對(duì)于的標(biāo)志文件flag上記錄信息,所述信息為要?jiǎng)h除的小文件的文件名;
[0035]設(shè)置一閾值V,定期遍歷每一個(gè)合并后的目標(biāo)文件下的標(biāo)志文件flag與」ndex文件,并讀取這兩個(gè)文件的行數(shù)cl與c2,當(dāng)cl/c2〈V時(shí),不做任何操作,當(dāng)cl/c2> = V時(shí),則另外起用一個(gè)線程,對(duì)目標(biāo)文件進(jìn)行重新合并,重新合并步驟為:
[0036]在目標(biāo)文件所在文件夾下新建標(biāo)志文件DE_flag,把合并后的目標(biāo)文件恢復(fù)成小文件,并下載到本地,把標(biāo)志文件flag也下載到本地,并清空所述標(biāo)志文件flag;
[0037]讀取本地的標(biāo)志文件flag,按行獲取信息,每一行為一個(gè)要?jiǎng)h除的文件,從本地的小文件中找到要?jiǎng)h除的文件并刪除;
[0038]把刪除完成后剩余的小文件上傳到HDFS,并利用hadoop archive的方法進(jìn)行重新合并;
[0039]把HDFS上原有的標(biāo)志文件flag復(fù)制到新合并的目標(biāo)文件中,并用新合并的目標(biāo)文件替換舊的目標(biāo)文件。
[0040]還包括小文件查詢模塊用于執(zhí)行以下步驟:步驟21,獲取需要訪問文件F,首先查詢所述表key_list上是否記錄了所述文件F的key,如果記錄了所述文件F,則根據(jù)所述key從所述Memcache中取出所述文件F,返回給所述客戶端,否則執(zhí)行步驟22;
[0041 ] 步驟22,查詢所述表key_process,如果記錄了key,則從所述Memcache中用key取出所述文件F,否則執(zhí)行步驟23;
[0042]步驟23,根據(jù)所述文件F,查詢所述文件F對(duì)應(yīng)的目標(biāo)文件的位置;
[0043]步驟24,查詢目標(biāo)文件中的標(biāo)志文件flag中是否記錄目標(biāo)文件的文件名,如果有,則返回客戶端目標(biāo)文件不存在,否則執(zhí)行步驟25;
[0044]步驟25,從目標(biāo)文件中的_!1^8七61';[11(161與_111(161中查詢所述文件F,并返回給客戶端。
[0045]由以上方案可知,本發(fā)明的優(yōu)點(diǎn)在于:
[0046]本發(fā)明能夠?qū)ο到y(tǒng)中目標(biāo)文件的內(nèi)容進(jìn)行動(dòng)態(tài)調(diào)整,滿足用戶的需要。對(duì)于小文件的存儲(chǔ)和管理具有重要的作用,具有良好的前景和應(yīng)用價(jià)值。
【附圖說明】
[0047]圖1是追加文件緩存Memcache流程圖;
[0048]圖2是小文件追加到HDFS上的目標(biāo)文件中圖;
[0049]圖3是刪除小文件圖。
【具體實(shí)施方式】
[0050]為了解決現(xiàn)有技術(shù)中存在的技術(shù)問題,本發(fā)明提出一種針對(duì)小文件合并的批量刪除/查詢方法與裝置,包括:
[0051]本發(fā)明提出一種針對(duì)小文件合并的批量刪除/查詢方法,包括:
[0052]將小文件上傳到Memcache步驟,客戶端上傳的小文件到目標(biāo)文件中,將所述小文件的名稱作為key,將所述小文件的內(nèi)容作為value,上傳到Memcache中,將所述key寫到表key_l ist上,所述表key_list存儲(chǔ)在所述Memcache中,所述表key_l ist記錄所述Memcache中存儲(chǔ)的所有小文件的key;
[0053]小文件刪除步驟,在所述目標(biāo)文件中添加標(biāo)志文件flag,以及標(biāo)志文件DE_flag,所述客戶端收到刪除所述小文件的請(qǐng)求后,先從所述表key_list中查找是否存在所述小文件的所述key,若存在,貝Ij從所述Memcache中取出并刪除所述小文件,并刪除所述表key_I ist中所述小文件的所述key,否則在所述標(biāo)識(shí)文件flag中記錄所述小文件的文件名;
[0054]小文件查詢步驟,獲取需要查詢的文件F,查詢所述表key_list上記錄的所述文件F的key,根據(jù)所述key從所述Memcache中取出所述文件F,返回給所述客戶端。
[0055]所述將小文件上傳到Memcache步驟包括預(yù)測(cè)所述Memcache中是否存在足夠的空間容納所述小文件其中所述Memcache中剩余空間為L(zhǎng)i,所述小文件大小為Si,所述Memcache總空間為P,若Li+Si〈 = P,則將所述小文件放入所述Memcache中,若Li+f i>P,則將所述小文件存儲(chǔ)到磁盤上,不再有新的小文件上傳后,再將磁盤上的小文件上傳到所述Memcache中;將線程進(jìn)行加鎖,保證同時(shí)只有一個(gè)線程執(zhí)行寫所述表key_l ist;從所述Memcache上下載所述表key_l ist;將所述小文件的文件名以及所述目標(biāo)文件的文件名追加到key_l i s t文件后;將所述表key_l ist上傳到所述Memcache,將線程進(jìn)行解鎖。
[0056]所述小文件刪除步驟,還包括
[0057]根據(jù)所述小文件的文件名查找要?jiǎng)h除的小文件所在的目標(biāo)文件的位置;
[0058]在與所述目標(biāo)文件相對(duì)于的標(biāo)志文件flag上記錄信息,所述信息為要?jiǎng)h除的小文件的文件名;
[0059]設(shè)置一閾值V,定期遍歷每一個(gè)合并后的目標(biāo)文件下的標(biāo)志文件flag與」ndex文件,并讀取這兩個(gè)文件的行數(shù)cl與c2,當(dāng)cl/c2〈V時(shí),不做任何操作,當(dāng)cl/c2> = V時(shí),則另外起用一個(gè)線程,對(duì)目標(biāo)文件進(jìn)行重新合并,重新合并步驟為:
[0060]在目標(biāo)文件所在文件夾下新建標(biāo)志文件DE_flag,把合并后的目標(biāo)文件恢復(fù)成小文件,并下載到本地,把標(biāo)志文件flag也下載到本地,并清空所述標(biāo)志文件flag;
[0061]讀取本地的標(biāo)志文件flag,按行獲取信息,每一行為一個(gè)要?jiǎng)h除的文件,從本地的小文件中找到要?jiǎng)h除的文件并刪除;
[0062]把刪除完成后剩余的小文件上傳到HDFS,并利用hadoop archive的方法進(jìn)行重新合并;
[0063]把HDFS上原有的標(biāo)志文件flag復(fù)制到新合并的目標(biāo)文件中,并用新合并的目標(biāo)文件替換舊的目標(biāo)文件。
[0064]所述小文件查詢步驟包括,步驟21,獲取需要訪問所述文件F,首先查詢所述表key_list上是否記錄了所述文件F的key,如果記錄了所述文件F,則根據(jù)所述key從所述Memcache中取出所述文件F,返回給所述客戶端,否則執(zhí)行步驟22;
[0065]步驟22,查詢所述表key_process,如果記錄了key,則從所述Memcache中用key取出所述文件F,否則執(zhí)行步驟23;
[0066]步驟23,根據(jù)所述文件F,查詢所述文件F對(duì)應(yīng)的目標(biāo)文件的位置;
[0067]步驟24,查詢目標(biāo)文件中的標(biāo)志文件flag中是否記錄目標(biāo)文件的文件名,如果有,則返回客戶端目標(biāo)文件不存在,否則執(zhí)行步驟25;
[0068]步驟25,從該目標(biāo)文件中的_!1^8七61';[11(161與_;[11(161中查詢所述文件F,并返回給客戶端。
[0069]本發(fā)明還提出一種針對(duì)小文件合并的批量刪除/查詢裝置,包括:
[0070]將小文件上傳到Memcache模塊,用于客戶端上傳的小文件到目標(biāo)文件中,將所述小文件的名稱作為key,將所述小文件的內(nèi)容作為value,上傳到Memcache中,將所述key寫到表key_l ist上,所述表key_list存儲(chǔ)在所述Memcache中,所述表key_l ist記錄所述Memcache中存儲(chǔ)的所有小文件的key;
[0071]小文件刪除模塊,用于在所述目標(biāo)文件中添加標(biāo)志文件flag,以及標(biāo)志文件DE_flag,所述客戶端收到刪除所述小文件的請(qǐng)求后,先從所述表key_list中查詢是否存在所述小文件的所述key,若存在,貝Ij從所述Memcache中取出并刪除所述小文件,并刪除所述表key_l ist中所述小文件的所述key,否則在所述標(biāo)識(shí)文件flag中記錄所述小文件的文件名
[0072]小文件查詢模塊,用于獲取需要查詢的文件F,查詢所述表key_list上記錄的所述文件F的key,根據(jù)所述key從所述Memcache中取出所述文件F,返回給所述客戶端。
[0073]所述將小文件上傳到Memcache模塊包括預(yù)測(cè)所述Memcache中是否存在足夠的空間容納所述小文件其中所述Memcache中剩余空間為L(zhǎng)i,所述小文件大小為Si,所述Memcache總空間為P,若Li+Si〈 = P,則將所述小文件放入所述Memcache中,若Li+f i>P,則將所述小文件存儲(chǔ)到磁盤上,不再有新的小文件上傳后,再將磁盤上的小文件上傳到所述Memcache中;將線程進(jìn)行加鎖,保證同時(shí)只有一個(gè)線程執(zhí)行寫所述表key_l ist;從所述Memcache上下載所述表key_l ist;將所述小文件的文件名以及所述目標(biāo)文件的文件名追加到key_l i s t文件后;將所述表key_l ist上傳到所述Memcache,將線程進(jìn)行解鎖。
[0074]所述小文件刪除模塊,還包括
[0075]根據(jù)所述小文件的文件名查詢要?jiǎng)h除的小文件所在的目標(biāo)文件的位置;
[0076]在與所述目標(biāo)文件相對(duì)于的標(biāo)志文件flag上記錄信息,所述信息為要?jiǎng)h除的小文件的文件名;
[0077]設(shè)置一閾值V,定期遍歷每一個(gè)合并后的目標(biāo)文件下的標(biāo)志文件flag與」ndex文件,并讀取這兩個(gè)文件的行數(shù)cl與c2,當(dāng)cl/c2〈V時(shí),不做任何操作,當(dāng)cl/c2> = V時(shí),則另外起用一個(gè)線程,對(duì)目標(biāo)文件進(jìn)行重新合并,重新合并步驟為:
[0078]在目標(biāo)文件所在文件夾下新建標(biāo)志文件DE_flag,把合并后的目標(biāo)文件恢復(fù)成小文件,并下載到本地,把標(biāo)志文件flag也下載到本地,并清空所述標(biāo)志文件flag;
[0079]讀取本地的標(biāo)志文件flag,按行獲取信息,每一行為一個(gè)要?jiǎng)h除的文件,從本地的小文件中找到要?jiǎng)h除的文件并刪除;
[0080]把刪除完成后剩余的小文件上傳到HDFS,并利用hadoop archive的方法進(jìn)行重新合并;
[0081 ]把HDFS上原有的標(biāo)志文件flag復(fù)制到新合并的目標(biāo)文件中,并用新合并的目標(biāo)文件替換舊的目標(biāo)文件。
[0082]小文件查詢模塊用于執(zhí)行以下步驟:步驟21,獲取需要訪問文件F,首先查詢所述表key_list上是否記錄了所述文件F的key,如果記錄了所述文件F,則根據(jù)所述key從所述Memcache中取出所述文件F,返回給所述客戶端,否則執(zhí)行步驟22;
[0083]步驟22,查詢所述表key_process,如果記錄了key,則從所述Memcache中用key取出所述文件F,否則執(zhí)行步驟23;
[0084]步驟23,根據(jù)所述文件F,查詢所述文件F對(duì)應(yīng)的目標(biāo)文件的位置;
[0085]步驟24,查詢目標(biāo)文件中的標(biāo)志文件flag中是否記錄目標(biāo)文件的文件名,如果有,則返回客戶端目標(biāo)文件不存在,否則執(zhí)行步驟25;
[0086]步驟25,從目標(biāo)文件中的_!1^8七61';[11(161與_;[11(161中查詢所述文件F,并返回給客戶端。
[0087]下面結(jié)合附圖1,2,更進(jìn)一步描述本發(fā)明步驟,如圖1,2本發(fā)明追加文件的步驟包含連續(xù)執(zhí)行:A、緩存文件;B、將小文件追加到HDFS上的目標(biāo)文件中。具體的一種實(shí)施方式如下:
[0088]A.緩存文件,將文件從客戶端上傳到Memcache中。其實(shí)現(xiàn)方法為:
[0089]Al.用戶從客戶端發(fā)出追加小文件請(qǐng)求,包括小文件f i,文件路徑Pi,文件名srci,目標(biāo)文件名desti;
[0090]A2.將文件名srci作為key,fHtSvalue,然后上傳到Memcache中,分別執(zhí)行以下步驟:
[0091 ] A2-1:預(yù)測(cè)Memcache中是否有足夠的空間能容納fi C3Memcache中剩余空間為L(zhǎng)i,fi大小為31,總空間為?,比較1^+3古?的大小。這里有兩種可能:1)1^+3< = ?,即1611^(^的空間足以容納f i,則將f Jj^Memcache中;2) Li+Si>P,也就是說Memcache已經(jīng)不能容納下f i 了,則將fi存儲(chǔ)到磁盤上。不再有新的小文件上傳后,再將磁盤上的小文件上傳到Memcache中。
[0092]A3.將上傳文件名srci以及目標(biāo)文件名desti寫入key_list文件中。分別執(zhí)行以下步驟:
[0093]A3-1:加鎖,保證同時(shí)只有一個(gè)線程寫key_l ist文件;
[0094]A3-2:從 Memcache 上下載key_l ist文件;
[0095]A3-3:將需要上傳文件的文件名srci以及目標(biāo)文件名desti追加到key_list文件后;
[0096]A3-4:將 key_l ist 上傳到Memcache,解鎖。
[0097]B.將小文件追加到HDFS上的目標(biāo)文件中,其實(shí)現(xiàn)方法為:
[0098]B1.從Memcache上下載key_list,得到Memcache上的文件名列表,用變量count記錄當(dāng)前正在運(yùn)行的線程數(shù);
[0099]B2.將key_list復(fù)制到文件key_process中,清空key_list,上傳key_list和key_process;
[0100]B3.判斷是否開始追加下一個(gè)小文件,這里有兩種可能情況:l)c0unt〈n,則從key_process中取出一個(gè)srci和desti,從Memcache上得到相應(yīng)的fi,執(zhí)行B4;2)count> = n,則等待有線程執(zhí)行完畢(其中η為最大并發(fā)處理數(shù));
[0101]Β4.創(chuàng)建一個(gè)新線程,判斷desti目標(biāo)文件下是否包含標(biāo)志文件DE_flag,這里有兩種情況:I)包含,則說明該目標(biāo)文件正在進(jìn)行刪除操作,故掛起線程,等待刪除結(jié)束;2)不包含,則執(zhí)行B5;
[0102]B5.判斷desti目標(biāo)文件下是否包含標(biāo)志文件ADD_flag,這里有兩種情況:I)包含,則說明目標(biāo)文件正在進(jìn)行追加操作,故掛起線程,等待追加結(jié)束;2)不包含,則執(zhí)行B6;
[0103]86.將匕追加到Clest1中;目標(biāo)文件所在文件夾下包括四個(gè)文件:標(biāo)志文件:SUCCESS ;數(shù)據(jù)文件:part-x,文件的內(nèi)容;索引文件:記錄part中偏移的」ndex以及記錄_index中的偏移_mas ter index。這里要追加后三個(gè)文件,步驟如下所示:
[0104]B6-1:在desti下查找標(biāo)號(hào)最大的part文件(part-m);在目標(biāo)文件desti目錄下遍歷part-x文件,得到各個(gè)文件的名稱,找到X最大的為part-m;
[0?05] B6-2:預(yù)測(cè)fi追加到part-m后是否會(huì)超過part-m的最大限制。Fi大小為Si, part-m大小為Pi,文件大小限制為L(zhǎng)。I)若si+pi>L,則新建一個(gè)part-(m+l)文件,將f i寫入part_(m+I)中;2)若si+pi〈 = L,則將fi以字節(jié)流的形式追加到desti下的part-m文件后面;
[0106]B6-3:將文件名srCi,文件大小,權(quán)限,時(shí)間戳,在part-χ文件中的起始位置等內(nèi)容以字節(jié)流的形式追加到」ndex文件后面,其中」ndex記錄了文件在part_x中的存儲(chǔ)偏移位置;
[0107]136-4:_11^8七61';[11(161記錄了_;[11(161文件中的偏移位置,將追加前的_;[11(161文件大小以及追加后的文件大小以字節(jié)流的形式寫入_masterindex中;
[0108]B7.刪除Memcache中的小文件f i ;
[0109]B8.T記錄當(dāng)前時(shí)間,在t時(shí)間后,再進(jìn)行下一批文件追加。
[0110]如圖3,將小文件從HDFS上的目標(biāo)文件中刪除,具體的實(shí)施方式如下:
[0111]Cl.客戶端發(fā)出刪除小文件fd的請(qǐng)求。
[0112]C2.從key_l ist文件中查找是否存在該小文件的記錄,存在則從Memcache中取出并刪除該小文件,并刪除key_list文件中的該小文件的記錄,刪除小文件請(qǐng)求處理結(jié)束。若key_l ist文件中不存在該小文件的key,則繼續(xù)往下執(zhí)行。
[0113]C3.根據(jù)fd找到要?jiǎng)h除的小文件所在的目標(biāo)文件的位置。
[0114]C4.在該目標(biāo)文件所在的文件下的標(biāo)志文件flag上記錄一行信息,該信息即為要?jiǎng)h除的小文件的文件名。
[0115]C5.設(shè)定一個(gè)閾值V,定期遍歷每一個(gè)合并后的目標(biāo)文件下的標(biāo)志文件^&8和_index文件,并讀取這兩個(gè)文件的行數(shù)cl和c2。當(dāng)cl/c2〈V時(shí),不做任何操作;當(dāng)cl/c2> = V時(shí),則另起一個(gè)線程,對(duì)該目標(biāo)文件進(jìn)行重新合并,重新合并過程如下:
[0116]C5-1.在該目標(biāo)文件所在文件夾下新建DE_flag標(biāo)志文檔,把合并后的目標(biāo)文件恢復(fù)成小文件下載到本地,把標(biāo)志文件flag也下載到本地,并清空hdfs上的此標(biāo)志文件flag。
[0117]C5-2.讀取本地的標(biāo)志文件flag,按行獲取信息,每一行就是一個(gè)要?jiǎng)h除的文件,從本地的小文件中找到要?jiǎng)h除的文件并刪除。
[0?18] C5-3.把剩下的小文件上傳到HDFS,并利用hadoop archive的方法進(jìn)行重新合并。
[0119]C5-4.把HDFS上原的標(biāo)志文件flag復(fù)制到新合并好的目標(biāo)文件.har中,并用該文件夾替換舊的目標(biāo)文件夾。
[0120]訪問小文件,具體的實(shí)施方式如下:
[0121]Dl.客戶端發(fā)出訪問請(qǐng)求,需要訪問F文件,首先查找key_list文件上面是否記錄了 key,如果記錄了要訪問的文件,則直接根據(jù)該key從Memcache中取出該文件,返回給客戶端。如果沒有執(zhí)行D2。
[0122]D2.查找key_process文件,如果記錄了key,則從Memcache中用key取出該文件;否則執(zhí)行D3。
[0123]D3.根據(jù)F文件,找到該文件對(duì)應(yīng)的目標(biāo)文件的位置。
[0124]D4.查找該目標(biāo)文件中的標(biāo)志文件flag中是否記錄該文件名,如果有,則返回客戶端該文件不存在。如果無,則執(zhí)行D3。
[0125]D5.從該目標(biāo)文件中的_!1^8七61';[11(161和_丨11(161中查找F文件,并返回給客戶端。
【主權(quán)項(xiàng)】
1.一種針對(duì)小文件合并的批量刪除/查詢方法,其特征在于,包括: 將小文件上傳到Memcache步驟,客戶端上傳的小文件到目標(biāo)文件中,將所述小文件的名稱作為key,將所述小文件的內(nèi)容作為value,上傳到Memcache中,將所述key寫到表key_I i st上,所述表key_l i st存儲(chǔ)在所述Memcache中,所述表key_l i st記錄所述Memcache中存儲(chǔ)的所有小文件的key; 小文件刪除步驟,在所述目標(biāo)文件中添加標(biāo)志文件flag,以及標(biāo)志文件DE_flag,所述客戶端收到刪除所述小文件的請(qǐng)求后,先從所述表key_list中查找是否存在所述小文件的所述key,若存在,貝Ij從所述Memcache中取出并刪除所述小文件,并刪除所述表key_li st中所述小文件的所述key,否則在所述標(biāo)識(shí)文件flag中記錄所述小文件的文件名; 小文件查詢步驟,獲取需要查詢的文件F,查詢所述表key_li st上記錄的所述文件F的key,根據(jù)所述key從所述Memcache中取出所述文件F,返回給所述客戶端。2.如權(quán)利要求1所述的針對(duì)小文件合并的批量追加/刪除/查詢/方法,其特征在于,所述將小文件上傳到Memcache步驟包括預(yù)測(cè)所述Memcache中是否存在足夠的空間容納所述小文件其中所述Memcache中剩余空間為U,所述小文件大小為Si,所述Memcache總空間為P,若Li+Si〈 = P,則將所述小文件放入所述Memcache中,若Li+fi>P,則將所述小文件存儲(chǔ)到磁盤上,不再有新的小文件上傳后,再將磁盤上的小文件上傳到所述Memcache中;將線程進(jìn)行加鎖,保證同時(shí)只有一個(gè)線程執(zhí)行寫所述表key_li st;從所述Memcache上下載所述表key_list;將所述小文件的文件名以及所述目標(biāo)文件的文件名追加到key_list文件后;將所述表key_l ist上傳到所述Memcache,將線程進(jìn)行解鎖。3.如權(quán)利要求1所述的針對(duì)小文件合并的批量追加/刪除/查詢/方法,其特征在于,所述小文件刪除步驟,還包括 根據(jù)所述小文件的文件名查找要?jiǎng)h除的小文件所在的目標(biāo)文件的位置; 在與所述目標(biāo)文件相對(duì)于的標(biāo)志文件flag上記錄信息,所述信息為要?jiǎng)h除的小文件的文件名; 設(shè)置一閾值V,定期遍歷每一個(gè)合并后的目標(biāo)文件下的標(biāo)志文件flag與」ndex文件,并讀取這兩個(gè)文件的行數(shù)cl與c2,當(dāng)cl/c2〈V時(shí),不做任何操作,當(dāng)cl/c2> = V時(shí),則另外起用一個(gè)線程,對(duì)目標(biāo)文件進(jìn)行重新合并,重新合并步驟為: 在目標(biāo)文件所在文件夾下新建標(biāo)志文件DE_flag,把合并后的目標(biāo)文件恢復(fù)成小文件,并下載到本地,把標(biāo)志文件flag也下載到本地,并清空所述標(biāo)志文件flag; 讀取本地的標(biāo)志文件flag,按行獲取信息,每一行為一個(gè)要?jiǎng)h除的文件,從本地的小文件中找到要?jiǎng)h除的文件并刪除; 把刪除完成后剩余的小文件上傳到HDFS,并利用hadoop archive的方法進(jìn)行重新合并; 把HDFS上原有的標(biāo)志文件flag復(fù)制到新合并的目標(biāo)文件中,并用新合并的目標(biāo)文件替換舊的目標(biāo)文件。4.如權(quán)利要求1或3所述的針對(duì)小文件合并的批量追加/刪除/查詢/方法,其特征在于,所述小文件查詢步驟包括,步驟21,獲取需要訪問所述文件F,首先查詢所述表key_l ist上是否記錄了所述文件F的key,如果記錄了所述文件F,則根據(jù)所述key從所述Memcache中取出所述文件F,返回給所述客戶端,否則執(zhí)行步驟22; 步驟22,查詢所述表key_process,如果記錄了key,則從所述Memcache中用key取出所述文件F,否則執(zhí)行步驟23; 步驟23,根據(jù)所述文件F,查詢所述文件F對(duì)應(yīng)的目標(biāo)文件的位置; 步驟24,查詢目標(biāo)文件中的標(biāo)志文件flag中是否記錄目標(biāo)文件的文件名,如果有,則返回客戶端目標(biāo)文件不存在,否則執(zhí)行步驟25; 步驟25,從該目標(biāo)文件中的_11^8七61';[11(161與_111(161中查詢所述文件F,并返回給客戶端。5.—種針對(duì)小文件合并的批量刪除/查詢裝置,其特征在于,包括: 將小文件上傳到Memcache模塊,用于客戶端上傳的小文件到目標(biāo)文件中,將所述小文件的名稱作為key,將所述小文件的內(nèi)容作為value,上傳到Memcache中,將所述key寫到表key_l ist上,所述表key_list存儲(chǔ)在所述Memcache中,所述表key_l ist記錄所述Memcache中存儲(chǔ)的所有小文件的key; 小文件刪除模塊,用于在所述目標(biāo)文件中添加標(biāo)志文件flag,以及標(biāo)志文件DE_flag,所述客戶端收到刪除所述小文件的請(qǐng)求后,先從所述表key_list中查詢是否存在所述小文件的所述key,若存在,貝Ij從所述Memcache中取出并刪除所述小文件,并刪除所述表key_I ist中所述小文件的所述key,否則在所述標(biāo)識(shí)文件flag中記錄所述小文件的文件名 小文件查詢模塊,用于獲取需要查詢的文件F,查詢所述表key_list上記錄的所述文件F的key,根據(jù)所述key從所述Memcache中取出所述文件F,返回給所述客戶端。6.如權(quán)利要求5所述的針對(duì)小文件合并的批量追加/刪除/查詢/裝置,其特征在于,所述將小文件上傳到Memcache模塊包括預(yù)測(cè)所述Memcache中是否存在足夠的空間容納所述小文件其中所述Memcache中剩余空間為U,所述小文件大小為Si,所述Memcache總空間為P,若Li+Si〈 = P,則將所述小文件放入所述Memcache中,若Li+fi>P,則將所述小文件存儲(chǔ)到磁盤上,不再有新的小文件上傳后,再將磁盤上的小文件上傳到所述Memcache中;將線程進(jìn)行加鎖,保證同時(shí)只有一個(gè)線程執(zhí)行寫所述表key_l ist;從所述Memcache上下載所述表key_list;將所述小文件的文件名以及所述目標(biāo)文件的文件名追加到key_list文件后;將所述表key_l ist上傳到所述Memcache,將線程進(jìn)行解鎖。7.如權(quán)利要求5所述的針對(duì)小文件合并的批量追加/刪除/查詢/裝置,其特征在于,所述小文件刪除模塊,還包括 根據(jù)所述小文件的文件名查詢要?jiǎng)h除的小文件所在的目標(biāo)文件的位置; 在與所述目標(biāo)文件相對(duì)于的標(biāo)志文件flag上記錄信息,所述信息為要?jiǎng)h除的小文件的文件名; 設(shè)置一閾值V,定期遍歷每一個(gè)合并后的目標(biāo)文件下的標(biāo)志文件flag與」ndex文件,并讀取這兩個(gè)文件的行數(shù)cl與c2,當(dāng)cl/c2〈V時(shí),不做任何操作,當(dāng)cl/c2> = V時(shí),則另外起用一個(gè)線程,對(duì)目標(biāo)文件進(jìn)行重新合并,重新合并步驟為: 在目標(biāo)文件所在文件夾下新建標(biāo)志文件DE_flag,把合并后的目標(biāo)文件恢復(fù)成小文件,并下載到本地,把標(biāo)志文件flag也下載到本地,并清空所述標(biāo)志文件flag; 讀取本地的標(biāo)志文件flag,按行獲取信息,每一行為一個(gè)要?jiǎng)h除的文件,從本地的小文件中找到要?jiǎng)h除的文件并刪除; 把刪除完成后剩余的小文件上傳到HDFS,并利用hadoop archive的方法進(jìn)行重新合 并; 把HDFS上原有的標(biāo)志文件flag復(fù)制到新合并的目標(biāo)文件中,并用新合并的目標(biāo)文件替換舊的目標(biāo)文件。8.如權(quán)利要求5所述的針對(duì)小文件合并的批量追加/刪除/查詢/裝置,其特征在于,還包括小文件查詢模塊用于執(zhí)行以下步驟:步驟21,獲取需要訪問文件F,首先查詢所述表key_list上是否記錄了所述文件F的key,如果記錄了所述文件F,則根據(jù)所述key從所述Memcache中取出所述文件F,返回給所述客戶端,否則執(zhí)行步驟22; 步驟22,查詢所述表key_process,如果記錄了key,則從所述Memcache中用key取出所述文件F,否則執(zhí)行步驟23; 步驟23,根據(jù)所述文件F,查詢所述文件F對(duì)應(yīng)的目標(biāo)文件的位置; 步驟24,查詢目標(biāo)文件中的標(biāo)志文件flag中是否記錄目標(biāo)文件的文件名,如果有,則返回客戶端目標(biāo)文件不存在,否則執(zhí)行步驟25; 步驟25,從目標(biāo)文件中的_master index與」ndex中查詢所述文件F,并返回給客戶端。
【文檔編號(hào)】G06F17/30GK105912675SQ201610228082
【公開日】2016年8月31日
【申請(qǐng)日】2016年4月13日
【發(fā)明人】鄺倍靖, 孫毓忠, 張笛, 宋 瑩
【申請(qǐng)人】中國(guó)科學(xué)院計(jì)算技術(shù)研究所
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1