2013-07-06 45 views
4

我有大量的圖像文件,我需要存儲和處理HDFS上在HBASE存儲圖像處理和快速訪問

假設2種情況:

  1. 圖片小於5MB
  2. 圖像範圍從50KB到20MB

我想這樣做的4件事與圖像:

  1. 我需要對每個圖像獨立應用一些函數fnc()。
  2. 我需要不時從HDFS中提取特定圖像(每天1000次)並將其顯示在網站上。 這些是針對特定圖像的用戶查詢,因此延遲應該是幾秒鐘
  3. 每年一次的圖像組將不得不被刪除。
  4. 新的圖像將被添加到系統中(1000個新的圖像/天)

解決方案設計IMO應考慮:

  1. 小文件的問題:
  2. MR處理
  3. 快速訪問文件
  4. 快速寫入新文件並不是什麼大問題,因爲映像將n不能立即使用。延遲幾分鐘或幾小時即可。

我首先想到的是聚集圖像帶着小文件的問題,滿足了1和2 的照顧,但我留下了快速隨機訪問圖像的問題,並增加了新的圖片。我不知道我該如何處理這個。我看着sequenceFiles,HAR,mapFiles,combineFileInputFormat,Avro,但無法找到(3)和(4)的解決方案。由於我必須注意索引塊的內容,搜索和刪除或添加新文件可能會變得棘手。

另一種方法是使用HBase或HCatalog存儲圖像,這會照顧(1)(2)(3)和(4),但費用是多少?我知道將二進制BLOBS存儲在數據庫中並不是非常有效,特別是隨着圖像數量的增加,但我認爲HBase或HCatalog可能會有點不同。

感謝您的幫助!

編輯:

我剛剛發現HBase的這個線程提供圖像,顯然Yfrog和ImageShack的具有數十億與此圖像記錄是link這是一個很好看的。雖然如果任何人知道任何基準將是偉大的。

+0

你只需要應用'FNC()人'一次,加載文件時,還是有需要進一步的圖像處理?如果沒有,也許HDFS不是最好的選擇,因爲它不是很好的表現,隨機訪問 – Jacopofar

+0

是的,fnc()只會被應用一次,我只需要map函數沒有reducer。 – ASA

回答

3

恕我直言,沒有問題直接在hbase中存儲大小〜10MB的圖像。而更大的文件可以存儲在HDFS本身,並帶有hbase中的指針。即使您擁有數百萬個這樣的文件,這也可以更快地訪問。 MR與hbase和HDFS完美兼容。

+0

謝謝塔裏克,我同意你的意見。你碰巧知道任何好的參考或基準?我會很快運行我的測試並想要比較。 – ASA

+0

不客氣。您可能會對此演示文稿有用:http://www.slideshare.net/jacque74/hug-hbase-presentation – Tariq