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