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