過去的相當長的一段時間裡,商用物件儲存佔據了市場上的大量的份額。國外的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。
https://github.com/minio/minio
它提供了與 Amazon S3 雲端儲存服務相容的 API,使用 MinIO 為機器學習、分析和應用程式資料工作負載構建高效能基礎架構。
輕量,操作簡單。
Ceph
Ceph 是一個分散式物件、塊和檔案儲存平臺。
紅帽支援的儲存解決方案,能夠提供企業中三種常見的儲存需求:塊儲存、檔案儲存和物件儲存,相當於是全平臺解決方案。
當然這麼強大的解決方案,對於運維的要求也是非常的高。
目前來看,MinIO是一個不錯的選擇。
SeaweedFS
SeaweedFS是一種簡單的、高度可擴充套件的分散式檔案系統。旨在優化Fackbook內部圖片儲存和獲取。
Githup地址為: https://github.com/chrislusf/seaweedfs
SeaweedFS最初作為一個物件儲存來有效地處理小檔案。中央主伺服器只管理檔案卷,而不是管理中央主伺服器中的所有檔案後設資料,它允許這些卷伺服器管理檔案及其後設資料。這減輕了中央主伺服器的併發壓力,並將檔案後設資料傳播到卷伺服器,允許更快的檔案訪問(只需一個磁碟讀取操作)。
綜上,目前來看MinIO的資料更全面一些,是一個不錯的選擇。
更多大資料技術與學習交流,歡迎關注 大資料流動