開源云原生分布式文件系統 - JuiceFS
大家最耳熟能詳的分布式文件系統當屬 HDFS,它的全稱是 ??Hadoop Distributed File System?
?,在 Hadoop 技術棧盛行時大放異彩。隨著云計算的發展成熟,數據上云成為趨勢,但由于對象存儲和文件存儲的結構不同,在云上要進行大數據存儲時會遇到很多問題:查詢性能慢、數據不能保證一致性。
今天要為大家介紹的就是一款為云環境設計的文件系統,JuiceFS 是一款云原生高性能分布式文件系統, 采用的是插件化的架構,「數據」與「元數據」分離,用戶可按照場景需求選擇適用的元數據以及數據引擎。使用 JuiceFS 存儲數據,數據本身會被持久化在對象存儲(例如,Amazon S3),相對應的元數據可以按需存儲在 Redis、MySQL、TiKV、SQLite 等多種數據庫中。
JuiceFS 于 2021 年 1 月在 GitHub 上開源,1年半時間已經獲得 6.5 K Star,是基礎領域備受關注的項目; JuiceFS 采用的是 Aache 2.0 許可證,意味著 用戶可以更放心地將 JuiceFS 應用于各種商業環境,與自己的應用集成。在 AI 組件 Fluid 和 PaddlePaddle 中都可以看到 JuiceFS 的身影。
特性
- POSIX 兼容:像本地文件系統一樣使用,無縫對接已有應用,無業務侵入性。
- HDFS 兼容:完整兼容HDFS API[1],提供更強的元數據性能。
- S3 兼容:提供S3 網關[2]實現 S3 協議兼容的訪問接口。
- 云原生:通過CSI Driver[3]輕松地在 Kubernetes 中使用 JuiceFS。
- 分布式設計:同一文件系統可在上千臺服務器同時掛載,高性能并發讀寫,共享數據。
- 強一致性:確認的文件修改會在所有服務器上立即可見,保證強一致性。
- 強悍性能:毫秒級延遲,近乎無限的吞吐量(取決于對象存儲規模),查看性能測試結果[4]。
- 數據安全:支持傳輸中加密(encryption in transit)和靜態加密(encryption at rest),查看詳情[5]。
- 文件鎖:支持 BSD 鎖(flock)和 POSIX 鎖(fcntl);數據壓縮:支持 LZ4 和 Zstandard 壓縮算法,節省存儲空間。
快速上手
安裝 JuiceFS 非常簡單,你需要準備好元數據存儲引擎(比如 Redis, MySQL),以及對象存儲,最后下載 JuiceFS 客戶端執行一行命令,就能立刻開始使用了。
你可以在 GitHub 項目頁面找到 JuiceFS 最新版客戶端下載地址,選擇你所在平臺的預編譯版本,下載安裝到 /usr/local/bin/juicefs。
當在終端輸入并執行 juicefs 并返回了程序的幫助信息,就說明你成功安裝了 JuiceFS 客戶端。
創建文件系統
創建文件系統使用客戶端提供的 format 命令,一般格式為:
juicefs format [command options] META-URL NAME
可見,格式化文件系統需要提供 3 種信息:
- ?[command options]:設定文件系統的存儲介質,留空則默認使用本地磁盤作為存儲介質,路徑為$HOME/.juicefs/local,/var/jfs? 或C:/jfs/local。
- META-URL:用來設置元數據存儲,即數據庫相關的信息,通常是數據庫的 URL 或文件路徑。
- NAME:是文件系統的名稱。
掛載文件系統
掛載文件系統使用客戶端提供的 mount 命令,一般格式為:
juicefs mount [command options] META-URL MOUNTPOINT
與創建文件系統的命令類似,掛載文件系統需要提供以下信息:**[command options]**:用來指定文件系統相關的選項,例如:-d 可以實現后臺掛載;META-URL:用來設置元數據存儲。即數據庫相關的信息,通常是數據庫的 URL 或文件路徑;MOUNTPOINT:指定文件系統的掛載點。例如,以下命令將 myjfs 文件系統掛載到 ~/jfs 文件夾:
juicefs mount sqlite3://myjfs.db ~/jfs
當你獲得以下反饋即為掛載成功了!!
驗證文件系統
當掛載好文件系統以后可以通過 juicefs bench 命令對文件系統進行基礎的性能測試和功能驗證,確保 JuiceFS 文件系統能夠正常訪問且性能符合預期。
juicefs bench ~/jfs
運行 juicefs bench 命令以后會根據指定的并發度(默認為 1)往 JuiceFS 文件系統中寫入及讀取 N 個大文件(默認為 1)及 N 個小文件(默認為 100),并統計讀寫的吞吐和單次操作的延遲,以及訪問元數據引擎的延遲。
驗證成功之后,歡迎大展身手,探索更多玩法~
?項目地址:https://github.com/juicedata/juicefs。?
參考資料
[1]HDFS API: https://juicefs.com/docs/zh/community/hadoop_java_sdk。
[2]S3 網關: https://juicefs.com/docs/zh/community/s3_gateway。
[3]CSI Driver: https://juicefs.com/docs/zh/community/how_to_use_on_kubernetes/。
[4]性能測試結果: https://juicefs.com/docs/zh/community/benchmark/。
[5]查看詳情: https://juicefs.com/docs/zh/community/security/encrypt。