非結構化數據怎麼存?——開源對象存儲方案介紹

過去的相當長的一段時間裡,商用對象存儲佔據了市場上的大量的份額。國外的Amazon S3,中國的阿里雲OSS都成為了大多數公司的選擇。但是構建一個企業級的數據湖(包括結構化和非結構化數據)已經成為了越來越多公司的目標。那麼Hadoop還能滿足我們的要求嗎?還是我們需要更多的選擇?

存儲方案

如圖所示,底層存儲大體可以分為四類。對象存儲(Object Storage),NoSQL 資料庫(NoSQL Sources),關係型資料庫(RDBMS Storage),大數據(Hadoop)。

對於大量的數據存儲與歸檔,毫無疑問Hadoop是一個不錯的選擇。但是Hadoop是為大文件存儲而設計的,在小文件存儲中有著非常大的劣勢。

HDFS缺陷

元數據的擴展性:NameNode是一個中央元數據服務節點,也是集群管理節點,文件系統的元數據以及塊位置關係全部在記憶體中。NameNode對記憶體的要求非常高,需要訂製大記憶體的機器,記憶體大小也限制了集群擴展性。

全局鎖:NameNode 有一把FSNamesystem全局鎖,每個元數據請求時都會加這把鎖。雖然是讀寫分開的,且有部分流程對該鎖的持有範圍進行了優化,但依然大問題。

塊彙報風暴:HDFS塊大小默認128M,啟動幾百PB數據量的集群時,NameNode需要接受所有塊彙報才可以退出安全模式,因此啟動時間會達數小時。

毫無疑問,對象存儲才是最佳的解決方案。

什麼是對象存儲

對象存儲,是一種扁平結構,其中文件被分解成碎片並分散在硬體中。在對象存儲中,數據被分成稱為對象的離散單元並保存在單個存儲庫中,而不是作為文件夾中的文件或伺服器上的塊保存。

比如阿里雲對象存儲就是基於對象存儲提高的服務。

阿里雲對象存儲OSS(Object Storage Service)是阿里雲提供的海量、安全、低成本、高持久的雲存儲服務。其數據設計持久性不低於99.9999999999%(12個9),服務可用性(或業務連續性)不低於99.995%。

  • 對象(Object)是OSS存儲數據的基本單元,也被稱為OSS的文件。對象由元資訊(Object Meta)、用戶數據(Data)和文件名(Key)組成。對象由存儲空間內部唯一的Key來標識。對象元資訊是一組鍵值對,表示了對象的一些屬性,例如最後修改時間、大小等資訊,同時您也可以在元資訊中存儲一些自定義的資訊。
  • 存儲空間(Bucket)是您用於存儲對象(Object)的容器,所有的對象都必須隸屬於某個存儲空間。存儲空間具有各種配置屬性,包括地域、訪問許可權、存儲類型等。您可以根據實際需求,創建不同類型的存儲空間來存儲不同的數據。

開源對象存儲方案

部署自己的對象存儲的最大優勢就是可以把數據存在私有存儲里。還好目前已經有了很多的開源方案已經出現,他們大多支援 Amazon 的 S3 協議,並允許您直接從本地數據湖中查詢數據。

MinIO

MinIO是個高性能,雲原生的對象存儲。Github有進30K的Stars。

//github.com/minio/minio

它提供了與 Amazon S3 雲存儲服務兼容的 API,使用 MinIO 為機器學習、分析和應用程式數據工作負載構建高性能基礎架構。

輕量,操作簡單。

Ceph

Ceph 是一個分散式對象、塊和文件存儲平台。

//github.com/ceph/ceph

紅帽支援的存儲解決方案,能夠提供企業中三種常見的存儲需求:塊存儲、文件存儲和對象存儲,相當於是全平台解決方案。

當然這麼強大的解決方案,對於運維的要求也是非常的高。

目前來看,MinIO是一個不錯的選擇。

SeaweedFS

SeaweedFS是一種簡單的、高度可擴展的分散式文件系統。旨在優化Fackbook內部圖片存儲和獲取。

Githup地址為: //github.com/chrislusf/seaweedfs

SeaweedFS最初作為一個對象存儲來有效地處理小文件。中央主伺服器只管理文件卷,而不是管理中央主伺服器中的所有文件元數據,它允許這些卷伺服器管理文件及其元數據。這減輕了中央主伺服器的並發壓力,並將文件元數據傳播到卷伺服器,允許更快的文件訪問(只需一個磁碟讀取操作)。

綜上,目前來看MinIO的資料更全面一些,是一個不錯的選擇。

更多大數據技術與學習交流,歡迎關注 大數據流動

Tags: