漫談未來的HDFS

前面我們提到的HDFS,瞭解了HDFS的特性和架構。HDFS能夠存儲TB甚至PB規模的數據是有前提的,首先數據要以大文件為主,其次NameNode的內存要足夠大。對HDFS有所瞭解的同學肯定都知道,NameNode是HDFS的存儲著整個集群的元數據信息,比如所有文件和目錄信息等等。而且當元數據信息較多時,NameNode的啟動會變得很慢,也比較容易觸發GC操作。顯然當數據到了一定的量級,元數據管理會成為HDFS的一個瓶頸,其實這也是為什麼說它適合存儲大文件的原因。如果解決了元數據管理的問題,其實HDFS是可以支撐海量小文件的。

終於到了本篇文章的重頭戲:Ozone,Ozone是Hortonworks基於HDFS實現的一個對象存儲服務,旨在基於HDFS的DataNode存儲,支持更大規模的數據對象存儲,支持各種對象大小並且擁有HDFS的可靠性,一致性和可用性,詳情請看Hadoop的Jira HDFS-7240。經過這麼長時間的發展和激烈的名稱討論之後最終會命名為HDDS(Hadoop Distributed Data Store)詳見Jira HDFS-10419。

那麼Ozone是如何解決HDFS的現有問題的呢?

Ozone的主旨就是 Scaling HDFS(縮放HDFS)。縮放HDFS即針對HDFS當前存在的問題:NameNode元數據管理瓶頸進行處理,一方面減輕NameNode的壓力,一方面抽象另外一層映射保證數據的快速讀取和寫入。

HDFS目前的分層如下:

  1. A namespace layer(命名空間層) 在NameNode服務中實現
  2. A block layer(Block塊層) 主要在DataNode服務中實現,並且NameNode也會提供一個block management服務。
漫談未來的HDFS

Ozone的設計就是針對於HDFS目前的分層去縮放相關的功能模塊。

命名空間層:

  1. Scaling NameSpace(縮放命名空間)
  2. Scaling client/rpc load on NN(縮放NameNode支撐的請求)
  3. NN startup time(縮短NameNode的啟動時間)

Block塊層:

  1. Scaling block namespace(縮放block塊的命名空間)
  2. Scaling block reports(縮放block塊向NN的報告請求)
  3. Scaling Datanode‘s block management(縮放Block塊管理層)

解決HDFS現有的問題需要同時從上面兩個維度對HDFS進行優化,在其設計論文中簡要描述瞭如何實現命名空間和Block塊的縮放工作,比如參考了Ceph的分佈式命名空間,或者針對於頻繁操作的數據保存到內存的workingSet中,其他數據進行持久化等等。同時抽象一個大小約為2G~16G的block group層叫做container,解決Block塊的縮放問題,這裡我們可以腦補一下Ceph的PG。

而Ozone最終實現了兩個服務來實現上面的解決方案:KSM(Key Space Manager) 和 SCM(Storage Container Manager)

漫談未來的HDFS

KSM:負責管理的是Ozone命名空間。所有的volume,bucket、key的記錄信息都保存在了KSM中。此角色類似於HDFS的NameNode。

SCM:負責管理"Container"對象,Container在邏輯上存儲的是block塊對象集合。DataNode是以Container的形式來提供存儲能力。SCM只負責維護這些Container信息。原先的block report就會變成container report

同時Ozone也實現了一套文件系統接口,Ozone FS,它完全兼容現有的HDFS讀寫方式,支持Spark,Hive等程序。可以支持方便的將數據從老的HDFS轉移到Ozone中。

而最終我們期待的更加完美的HDFS應該是這樣的。

漫談未來的HDFS

漫談未來的HDFS

聊聊HDFS和Ozone的融合

HDFS+Scalability-v2

歡迎關注課程《HBase+SpringBoot實戰分佈式文件存儲》


分享到:


相關文章: