一篇就够了 JuiceFS-开源分布式文件系统入门

文章目录2.2 不同的使用场景举例 03 技术架构 04 实战 05 总结 06 文末
01 引言
是一款开源的分布式文件系统,它为云环境设计,兼容 POSIX、HDFS 和 S3 协议的分布式文件系统 。
【一篇就够了JuiceFS-开源分布式文件系统入门】02 为何物?
是一款面向云原生设计的高性能共享文件系统,在2.0 开源协议下发布 。
2.1 的特点 2.1.1 兼容性
提供完备的 POSIX 兼容性,可将几乎所有对象存储接入本地作为海量本地磁盘使用,亦可同时在跨平台、跨地区的不同主机上挂载读写 。
2.1.2 丰富的API
提供了丰富的 API,适用于各种形式数据的管理、分析、归档、备份,可以在不修改代码的前提下无缝对接大数据、机器学习、人工智能等应用平台,为其提供海量、弹性、低价的高性能存储 。
2.1.3 特性总结 特性描述
POSIX 兼容
本地文件系统一样使用,无缝对接已有应用,无业务侵入性
HDFS 兼容
完整兼容 HDFS API,提供更强的元数据性能
S3 兼容
提供 S3 网关实现 S3 协议兼容的访问接口
云原生
通过CSI驱动 轻松地在中使用
分布式设计
同一文件系统可在上千台服务器同时挂载,高性能并发读写,共享数据
强一致性
确认的文件修改会在所有服务器上立即可见,保证强一致性
强悍性能
毫秒级延迟,近乎无限的吞吐量(取决于对象存储规模)
数据安全
支持传输中加密( in )和静态加密( at rest)
文件锁
支持 BSD 锁(flock)和 POSIX 锁(fcntl)
数据压缩
支持 LZ4 和压缩算法,节省存储空间
2.2 不同的使用场景举例
场景一:像本地磁盘一样使用
# 格式化JuiceFS文件系统> juicefs format redis://your-redis-host:6379/1 myjfs# 挂载JuiceFS文件系统> juicefs mount -d redis://your-redis-host:6379/1 /mnt/juicefs# 检查挂载点状态> df -h /mnt/juicefsFilesystemSizeUsedAvail Capacity iusedifree %iusedMounted onJuiceFS:myjfs1.0Pi0Bi1.0Pi0%0 104857600%/mnt/juicefs#从home目录挂载数据集到JuiceFS> cp -r ~/dataset /mnt/juicefs/
场景二:应用开发简单,无需SDK
# Python 例子path = '/mnt/juicefs/dataset/days.txt'days_file = open(path, 'r')days = days_file.read()new_path = '/mnt/juicefs/new_days.txt'new_days = open(new_path, 'w')title = 'Days of the Week\n'new_days.write(title)print(title)new_days.write(days)print(days)days_file.close()new_days.close()
场景三:最简单,最适合K8S PV
apiVersion: v1kind: PersistentVolumeClaimmetadata:name: web-pvcspec:accessModes:- ReadWriteManyresources:requests:storage: 10PistorageClassName: juicefs-sc---apiVersion: apps/v1kind: Deploymentmetadata:name: nginx-runspec:selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: linuxserver/nginxports:- containerPort: 80volumeMounts:- mountPath: /configname: web-datavolumes:- name: web-datapersistentVolumeClaim:claimName: web-pvc
> kubectl get scNAMEPROVISIONERRECLAIMPOLICYVOLUMEBINDINGMODEALLOWVOLUMEEXPANSIONAGEjuicefs-sccsi.juicefs.comRetainImmediatefalse88m
场景四:完全兼容 HDFS,使用方法也一样
# Shell> hadoop fs -ls jfs://myjfs# HiveCREATE TABLE IF NOT EXISTS person(name STRING,age INT) LOCATION 'jfs://myjfs/tmp/person';
场景五:通过 S3 API 访问
# 为JuiceFS文件系统开启S3网关> juicefs gateway redis://localhost:6379/1 localhost:9000# 通过AWS命令行连接访问JuiceFS文件系统> aws --endpoint-url http://localhost:9000 s3 ls s3://myjfs