天天看點

HCFSFuse——一個萬能的Fuse背景HCFS 協定是什麼HCFSFuse 的架構原理HCFSFuse 的編譯使用 HCFSFuse如何參與貢獻未來規劃

背景

HCFSFuse 是基于 Alluxio Fuse 進行分層擴充而實作的一個 Fuse 程式,差別于 Alluxio,HCFSFuse 除了保留 Alluxio Fuse 原有的通路 Alluxio 叢集的功能外,還提供了通路 HDFS、Ozone、aws、oss、cos、CephFS 等實作 HCFS(Hadoop compatible Filesystem) 的存儲系統。現如今,HCFS 協定已經在大資料生态成為了一個檔案系統标準,在其它領域 HCFS 協定也正在擴大其影響力,是以,使用 HCFSFuse,可以在大多數場景中發揮挂載檔案系統,實作 POSIX 檔案系統的能力。

HCFS 協定是什麼

HCFS (Hadoop Compatible FileSystem),以依賴庫的無服務形式,可以被使用者應用所依賴,不是一個額外的代理轉發服務。目前 HCFS FileSystem 支援的存儲系統已經非常之多。Hadoop 倉庫内有如下支援,其中就有對主流雲廠商存儲系統的支援。

HCFSFuse——一個萬能的Fuse背景HCFS 協定是什麼HCFSFuse 的架構原理HCFSFuse 的編譯使用 HCFSFuse如何參與貢獻未來規劃

下圖是類繼承關系,可以看出 HDFS 内部已經有很多 FS 原生支援了,其中就有 HDFS, S3, 阿裡雲的OSS, 騰訊雲 COSN, 以及 LocalFilesystem 的實作。

HCFSFuse——一個萬能的Fuse背景HCFS 協定是什麼HCFSFuse 的架構原理HCFSFuse 的編譯使用 HCFSFuse如何參與貢獻未來規劃

此外,還支援自己擴充FileSystem的子類,進而遵從HDFS 相容API。這種第三方的檔案系統也有很多,比如Ozone, Alluxio, CephFS 等。

HCFSFuse 的架構原理

HCFSFuse——一個萬能的Fuse背景HCFS 協定是什麼HCFSFuse 的架構原理HCFSFuse 的編譯使用 HCFSFuse如何參與貢獻未來規劃

HCFSFuse 擴充自 alluxio-fuse 子產品,保留了 AlluxioFuse 的原有實作。在此基礎上,擴充了 HCFSFuseFilesystem 這個對接 實作 HCFS 的底層存儲的後端實作。

啟動 HCFSFuse 程式,可以将後端 ozone、hdfs、alluxio、aws、oss、cos 等存儲系統挂載到本地挂載點,提供本地檔案系統。

應用程式通路挂載點的請求,會轉到使用者态 Fuse kernel 子產品,并通過 libfuse 傳遞到使用者态 HCFSFuse 程式,把應用程式的請求代理通路到對應的後端存儲,把結果傳回原路傳回給應用程式。

由于使用 HCFS 通路底層存儲,Ozone 作為遠端存儲的情況下,rename 操作的性能比使用 Goofys (基于 s3 協定的 FUSE 實作) 高出一個數量級,因為 s3 協定沒有 rename api,rename 操作隻能是 Copy & Delete,而 HCFS 協定有 rename API,并且 Ozone Manager 也實作了 rename API,是以,隻需要中繼資料操作就完成了 rename。

HCFSFuse 的編譯

git clone https://github.com/opendataio/hcfsfuse.git
mvn clean package
           

可以通過**-Dhadoop.version=3.2.1 -Dozone.version=1.0.0**, 設定hadoop、ozone 或其它元件的版本。

打包完成,會在 target 目錄生成 hcfsfuse--jar-with-dependencies.jar.

使用 HCFSFuse

不加任何參數執行,可以檢視 help 資訊。

# 下載下傳最新 release 的版本或自己編譯 master 分支的版本。
wget https://github.com/opendataio/hcfsfuse/releases/download/v0.0.10/hcfs-fuse.jar
java -jar hcfsfuse-1.0.0-SNAPSHOT-jar-with-dependencies.jar -c core-site.xml -c another-site.xml -m /Users/mbl/fusefs -r file:///tmp/
           

此後,可以在挂載點 /Users/mbl/fusefs 之下,執行 ls, touch, cp, rm, cat 等指令。

如果想删除挂載點,可以執行。

umount /Users/mbl/fusefs
           

如何參與貢獻

  • 關注 star 項目 https://github.com/opendataio/hcfsfuse
  • 送出 issue,可以是需求或者問題
  • Fork 代碼倉庫,以 Pull Request 的方式,貢獻你的代碼

未來規劃

站在 Alluxio 巨人的肩膀上,HCFSFuse 有着巨大的優勢,可以依靠 Alluxio 為 HCFSFuse 提供資料緩存能力,資料編排能力。也可以通過 viewfs 進行挂載點映射,可以同時把不同的存儲映射到同一個 HCFSFuse 的挂載點中。

在性能優化,和穩定性提升方面,一直會是 HCFSFuse 的核心目标。