孫玉林++王曉卉
摘 要
針對(duì)電商平臺(tái)海量圖片的檢索出現(xiàn)的性能瓶頸問(wèn)題,本文提出一種基于Hadoop的海量圖片檢索策略,通過(guò)Sequence實(shí)現(xiàn)對(duì)小圖片合并,并在合并過(guò)程中設(shè)定單個(gè)Sequence File的偏移量,解析索引快速定位存儲(chǔ)圖片Block的DataNode和Fileld,解決海量圖片數(shù)據(jù)擴(kuò)容和快速檢索的問(wèn)題。
【關(guān)鍵詞】分布式系統(tǒng) 海量圖片 檢索策略
隨著互聯(lián)網(wǎng)的普及和廣泛應(yīng)用,電商平臺(tái)和社交網(wǎng)絡(luò)也不斷發(fā)展,用于商品展示或社交分享的圖片數(shù)量呈爆炸式增長(zhǎng)。在這些電子商務(wù)網(wǎng)站和社交網(wǎng)站上,圖片的信息表達(dá)遠(yuǎn)遠(yuǎn)超過(guò)了文字信息的描述,所以這些電子商務(wù)網(wǎng)站和社交網(wǎng)站更加注重圖片的質(zhì)量。從對(duì)淘寶網(wǎng)的分析來(lái)看,在整個(gè)商務(wù)平臺(tái)的流量中,對(duì)圖片的訪(fǎng)問(wèn)高達(dá)91.5%以上。騰訊相冊(cè)的用戶(hù)每周上傳的圖片也高達(dá)11億張,目前的總圖片數(shù)量有近700億張,總?cè)萘扛哌_(dá)15PB。由于海量圖片需要消耗海量的存儲(chǔ)空間,圖片的存儲(chǔ)和檢索都會(huì)出現(xiàn)性能瓶頸。面對(duì)海量的圖片資源,如何高效的檢索以及如何在滿(mǎn)足高并發(fā)訪(fǎng)問(wèn)的前提下構(gòu)建高效廉價(jià)的檢索系統(tǒng)成為需要迫切解決的問(wèn)題。
1 Hadoop云計(jì)算平臺(tái)
Hadoop是一個(gè)能夠?qū)Υ罅繑?shù)據(jù)進(jìn)行分布式處理的軟件框架,同時(shí)它又是可靠、高效、可擴(kuò)展的??煽啃泽w現(xiàn)在它假設(shè)計(jì)算元素和存儲(chǔ)會(huì)失敗,因此它維護(hù)多個(gè)工作數(shù)據(jù)副本,確保能夠針對(duì)失敗的節(jié)點(diǎn)重新分布處理。高效性體現(xiàn)在它以并行的方式工作,通過(guò)并行處理加快處理速度??赏卣剐灾钙淠軌蛱幚鞵B級(jí)數(shù)據(jù)。由于Hadoop最初是針對(duì)大規(guī)模文本數(shù)據(jù)處理設(shè)計(jì)的,內(nèi)部數(shù)據(jù)類(lèi)型有限,不能直接處理圖片數(shù)據(jù)。在HDFS中,文件或目錄等均是以對(duì)象形式在內(nèi)存中存儲(chǔ),每個(gè)對(duì)象約使用150比特內(nèi)存。隨著海量圖片數(shù)量的增加,耗費(fèi)的內(nèi)存也迅速增加,大量名字節(jié)點(diǎn)內(nèi)存的耗費(fèi),嚴(yán)重影響了Hadoop的應(yīng)用性。同時(shí),檢索大量圖片的速度遠(yuǎn)遠(yuǎn)慢于訪(fǎng)問(wèn)相同數(shù)據(jù)量的大文件。
2 基于Hadoop的海量圖片檢索策略
HDFS是分布式計(jì)算的存儲(chǔ)基石,Hadoop的分布式文件系統(tǒng)和其他分布式文件系統(tǒng)有很多類(lèi)似的特質(zhì)。它將復(fù)雜的運(yùn)行于大規(guī)模集群上的并行計(jì)算過(guò)程高度的抽象到了兩個(gè)函數(shù)Map和Reduce。MapReduce是一個(gè)用于進(jìn)行大數(shù)據(jù)量計(jì)算的編程模型,同時(shí)也是一種高效的任務(wù)調(diào)度模型,它將一個(gè)任務(wù)分成很多更細(xì)粒度的子任務(wù),這些子任務(wù)能夠在空閑的處理節(jié)點(diǎn)之間調(diào)度,使處理速度越快的節(jié)點(diǎn)處理越多的任務(wù),從而避免處理速度慢的節(jié)點(diǎn)延長(zhǎng)整個(gè)任務(wù)的完成時(shí)間。
步驟1 搭建Hadoop集群平臺(tái)。每臺(tái)計(jì)算機(jī)安裝操作系統(tǒng)和Hadoop軟件,將一臺(tái)計(jì)算機(jī)配置成NameNode,其它計(jì)算機(jī)配置成DataNodes。各個(gè)機(jī)器通過(guò)SSH直接通信。NameNode負(fù)責(zé)的是整個(gè)存儲(chǔ)層的管理,DataNode主要作為存儲(chǔ)節(jié)點(diǎn)。驗(yàn)證DataNode和NameNode之間聯(lián)通性是通過(guò)心跳檢測(cè)來(lái)實(shí)現(xiàn),并且DataNode還要定期將自己的存儲(chǔ)區(qū)信息發(fā)送給NameNode。當(dāng)客戶(hù)端訪(fǎng)問(wèn)時(shí),首先訪(fǎng)問(wèn)NameNode,NameNode會(huì)分配相應(yīng)的空間,在得到相應(yīng)的空間后開(kāi)始各個(gè)作業(yè)。
步驟2 設(shè)置安全策略。Hadoop集群平臺(tái)中新增一臺(tái)DataNode2作為NameNode備份機(jī),將原有NameNode中的數(shù)據(jù)復(fù)制到選定的DataNode2中,在NameNode運(yùn)行時(shí),NameNode2會(huì)實(shí)時(shí)的檢測(cè)NameNode的運(yùn)行狀態(tài),同時(shí)把NameNode中的操作實(shí)時(shí)更新到本地,在NameNode出現(xiàn)故障時(shí),NameNode2代替NameNode保證服務(wù)的正常進(jìn)行。
步驟3 單圖片存儲(chǔ)處理。圖片先經(jīng)過(guò)負(fù)載均衡模塊過(guò)濾,進(jìn)入應(yīng)用服務(wù)器隊(duì)列等待進(jìn)入HDFS存儲(chǔ)系統(tǒng),通過(guò)NameNode分配DataNode進(jìn)行存儲(chǔ),圖片寫(xiě)入過(guò)程中先確定寫(xiě)入Block,再確定Sequence File,系統(tǒng)將二者的ID組合命名為圖片的系統(tǒng)內(nèi)的名稱(chēng)。圖片元數(shù)據(jù)保存在HBase,同時(shí)元數(shù)據(jù)也保存在由Redis構(gòu)建的緩存系統(tǒng)中。圖片完成寫(xiě)入操作。
步驟4 文件預(yù)處理合并。將指定目錄下的圖片文件讀取進(jìn)圖片數(shù)組,并初始化byte數(shù)組,用相應(yīng)的輸出文件流將byte中的圖片讀入到指定路徑下的合并文件中去。
步驟5 建立圖片索引。圖片名用的是聯(lián)合編碼的方式,主要包含BlockId和FileId兩部分。其中BlockId代表的是一個(gè)存儲(chǔ)單元,NameNode可以根據(jù)其確定最近的DateNode地址,F(xiàn)ileId代表的是小圖片在拼接的時(shí)候SequenceFile的Id;offset代表的是相應(yīng)key值的一個(gè)的偏移量。HDFS前端在接收到客戶(hù)端的請(qǐng)求后首先會(huì)解析文件名,根據(jù)相關(guān)信息定位到相應(yīng)的Block文件、FileId和offset,然后客戶(hù)端直接對(duì)圖片進(jìn)行讀取。在對(duì)文件名解析以后,可以直接讀取DateNode節(jié)點(diǎn)數(shù)據(jù),并可以通過(guò)偏移量定位到圖片的開(kāi)始位置。
步驟6 客戶(hù)端以圖片名稱(chēng)和創(chuàng)建時(shí)間為參數(shù)發(fā)起訪(fǎng)問(wèn)請(qǐng)求,NameNode運(yùn)算獲取圖片所在分鐘時(shí)間段和合并文件對(duì)應(yīng)的Blocks信息,返回給客戶(hù)端。客戶(hù)端向最近的DataNode發(fā)起圖片讀取請(qǐng)求。DataNode運(yùn)算獲得圖片具體地址信息。
3 結(jié)束語(yǔ)
本文提出的一種基于Hadoop的海量圖片檢索策略,可以很好的解決Hadoop檢索海量圖片時(shí)NameNode內(nèi)存消耗過(guò)度和檢索效率低下的問(wèn)題,并有效降低了檢索時(shí)的NameNode負(fù)載,實(shí)現(xiàn)了對(duì)NameNode性能的提升,從而推動(dòng)hadoop平臺(tái)更廣泛的應(yīng)用。
參考文獻(xiàn)
[1]郭本俊,王鵬, 陳高云等.基于MPI的云計(jì)算模型[J].計(jì)算機(jī)工程,2009,35(24): 84-85,96.
[2]王文平,劉希玉,韓杰.基于并行遺傳算法的關(guān)聯(lián)規(guī)則挖掘[J].山東師范大學(xué)學(xué)報(bào)(自然科學(xué)版),2006,21(04):29-31.
電子技術(shù)與軟件工程2016年18期